version 1.3, 2010/01/10 22:59:16 |
version 1.6, 2010/01/10 23:54:26 |
|
|
#!/usr/bin/perl |
#!/usr/bin/perl |
# $RedRiver: todo.pl,v 1.2 2010/01/10 07:13:54 andrew Exp $ |
# $RedRiver: todo.pl,v 1.5 2010/01/10 23:37:12 andrew Exp $ |
######################################################################## |
######################################################################## |
# todo.pl *** a perl version of todo.sh. Uses Text::Todo. |
# todo.pl *** a perl version of todo.sh. Uses Text::Todo. |
# |
# |
|
|
usage( $opts{h} ); |
usage( $opts{h} ); |
} |
} |
|
|
my @unsupported = grep { defined $opts{$_} } qw( @ + f h p P n t v V ); |
my @unsupported = grep { defined $opts{$_} } qw( @ + f h p P t v V ); |
if (@unsupported) { |
if (@unsupported) { |
warn 'Unsupported options: ' . ( join q{, }, @unsupported ) . "\n"; |
warn 'Unsupported options: ' . ( join q{, }, @unsupported ) . "\n"; |
} |
} |
|
|
die "Unable to add [$entry]\n"; |
die "Unable to add [$entry]\n"; |
} |
} |
|
|
sub append { return &unsupported } |
sub append { |
sub archive { return &unsupported } |
my ( $config, $line, $text ) = @_; |
|
if ( !( $line && $text && $line =~ /^\d+$/xms ) ) { |
|
die 'usage: todo.pl append ITEM# "TEXT TO APPEND"' . "\n"; |
|
} |
|
|
|
my $todo = Text::Todo->new($config); |
|
my $entry = $todo->list->[ $line - 1 ]; |
|
|
|
if ( $entry->append($text) && $todo->save ) { |
|
return printf "%02d: %s\n", $line, $entry->text; |
|
} |
|
die "Unable to append\n"; |
|
} |
|
|
|
sub archive { |
|
my ( $config ) = @_; |
|
my $todo = Text::Todo->new($config); |
|
|
|
my $file = $todo->file; |
|
|
|
my $archived = $todo->archive; |
|
if (defined $archived) { |
|
return print "TODO: $file archived.\n"; |
|
} |
|
die "Unable to archive $file\n"; |
|
} |
|
|
sub command { return &unsupported } |
sub command { return &unsupported } |
sub del { return &unsupported } |
|
|
sub del { |
|
my ( $config, $line ) = @_; |
|
if ( !( $line && $line =~ /^\d+$/xms ) ) { |
|
die 'usage: todo.pl del ITEM#' . "\n"; |
|
} |
|
my $todo = Text::Todo->new($config); |
|
|
|
my $entry = $todo->list->[$line - 1]; |
|
print "Delete '" . $entry->text . "'? (y/n)\n"; |
|
warn "XXX No delete confirmation currently!\n"; |
|
|
|
if ($opts{n}) { |
|
if ($todo->del($entry) && $todo->save) { |
|
return print 'TODO: \'', $entry->text, "' deleted.\n"; |
|
} |
|
} |
|
else { |
|
my $text = $entry->text; |
|
if ($entry->replace(q{}) && $todo->save) { |
|
return print 'TODO: \'', $text, "' deleted.\n"; |
|
} |
|
} |
|
|
|
die "Unable to delete entry\n"; |
|
} |
|
|
sub depri { return &unsupported } |
sub depri { return &unsupported } |
sub mark_done { return &unsupported } |
sub mark_done { return &unsupported } |
sub help { return &unsupported } |
sub help { return &unsupported } |
|
|
$term = defined $term ? quotemeta($term) : ''; |
$term = defined $term ? quotemeta($term) : ''; |
|
|
my $shown = 0; |
my $shown = 0; |
foreach my $e ( |
my @sorted |
sort { lc $a->{entry}->text cmp lc $b->{entry}->text } |
= map { sprintf "%02d %s", $_->{line}, $_->{entry}->text } |
grep { $_->{entry}->text =~ /$term/xms } @list |
sort { lc $a->{entry}->text cmp lc $b->{entry}->text } @list; |
) |
|
{ |
foreach my $line ( grep {/$term/xms} @sorted ) { |
printf "%02d %s\n", $e->{line}, $e->{entry}->text; |
print $line, "\n"; |
$shown++; |
$shown++; |
} |
} |
|
|