89 lines
1.6 KiB
Perl
89 lines
1.6 KiB
Perl
#!/usr/bin/perl
|
|
|
|
# simple TODO-manager
|
|
|
|
use strict;
|
|
use warnings "all";
|
|
use 5.10.0;
|
|
use Getopt::Long;
|
|
|
|
sub readtodo();
|
|
|
|
my $file = "$ENV{HOME}/todo.txt";
|
|
my ($delete, $help);
|
|
|
|
Getopt::Long::GetOptions(
|
|
"del" => \$delete,
|
|
"d" => \$delete,
|
|
"delete" => \$delete,
|
|
"help" => \$help
|
|
);
|
|
|
|
if ($help) {
|
|
say "Usage: $0 --delete NUM";
|
|
say " $0 --del NUM";
|
|
say " $0 --d NUM";
|
|
say " deletes string number NUM";
|
|
say "";
|
|
say " $0 some thing to-do";
|
|
say " adds memo";
|
|
exit 0;
|
|
}
|
|
|
|
if ($delete) {
|
|
die "NUM not set\n" if ($ARGV[0] !~ /^\d+$/);
|
|
my @TODO = readtodo();
|
|
die "NUM too big\n" if ($ARGV[0] > @TODO);
|
|
|
|
my $cnt = 0;
|
|
my $str = '';
|
|
open (TD, ">", $file) or die "Unable to open $file: $!\n";
|
|
|
|
for (my $i = 0; $i < @TODO; $i++) {
|
|
next if ($i == $ARGV[0]);
|
|
next unless (defined($TODO[$i]));
|
|
print sprintf("%s. %s\n", $cnt, $TODO[$i]);
|
|
print TD sprintf("%s. %s\n", $cnt, $TODO[$i]);
|
|
$cnt++;
|
|
}
|
|
|
|
close TD;
|
|
} else {
|
|
my @TODO = readtodo();
|
|
|
|
if (@ARGV > 0) {
|
|
push @TODO, join(" ", @ARGV);
|
|
open (TD, ">", $file) or die "Unable to open $file: $!\n";
|
|
|
|
for (my $i = 0; $i < @TODO; $i++) {
|
|
next unless (defined($TODO[$i]));
|
|
print sprintf("%s. %s\n", $i, $TODO[$i]);
|
|
print TD sprintf("%s. %s\n", $i, $TODO[$i]);
|
|
}
|
|
|
|
close TD;
|
|
} else {
|
|
for (my $i = 0; $i < @TODO; $i++) {
|
|
next unless (defined($TODO[$i]));
|
|
print sprintf("%s. %s\n", $i, $TODO[$i]);
|
|
}
|
|
}
|
|
}
|
|
|
|
exit 0;
|
|
|
|
sub readtodo() {
|
|
my @TODO;
|
|
open (T, "<", $file) or return @TODO;
|
|
@TODO = <T>;
|
|
close T;
|
|
|
|
@TODO = map {
|
|
chomp;
|
|
$_ =~ /\s*\d+\. (.+)/;
|
|
$1;
|
|
} @TODO;
|
|
|
|
return @TODO;
|
|
}
|