=================================================================== RCS file: /cvs/todotxt/Text-Todo/bin/todo.pl,v retrieving revision 1.14 retrieving revision 1.15 diff -u -r1.14 -r1.15 --- todotxt/Text-Todo/bin/todo.pl 2010/01/11 19:52:06 1.14 +++ todotxt/Text-Todo/bin/todo.pl 2010/01/12 20:30:55 1.15 @@ -1,5 +1,5 @@ #!/usr/bin/perl -# $AFresh1: todo.pl,v 1.13 2010/01/11 02:35:39 andrew Exp $ +# $AFresh1: todo.pl,v 1.14 2010/01/11 19:52:06 andrew Exp $ ######################################################################## # todo.pl *** a perl version of todo.sh. Uses Text::Todo. # @@ -69,7 +69,7 @@ ); my %opts; -getopts( '@+d:fhpPntvV', \%opts ); +getopts( q{+d:fhpPntvV@}, \%opts ); my $action = shift @ARGV; if ( $action && $action eq 'command' ) { @@ -174,7 +174,9 @@ die "Unable to archive $file\n"; } +## no critic 'sigal' sub command { return &unsupported } +## use critic sub del { my ( $config, $line ) = @_; @@ -184,7 +186,7 @@ my $todo = Text::Todo->new($config); my $entry = $todo->list->[ $line - 1 ]; - print "Delete '" . $entry->text . "'? (y/n)\n"; + print 'Delete \'', $entry->text . "'? (y/n)\n"; warn "XXX No delete confirmation currently!\n"; if ( $opts{n} ) { @@ -218,7 +220,7 @@ } # since "do" is reserved -sub mark_done { +sub mark_done { my ( $config, $line ) = @_; if ( !( $line && $line =~ /^\d+$/xms ) ) { die 'usage: todo.pl del ITEM#' . "\n"; @@ -230,7 +232,7 @@ if ( $entry->do && $todo->save ) { my $status = print $line, ': ', $entry->text, "\n", 'TODO: ', $line, " marked as done.\n"; - if (!$opts{a}) { + if ( !$opts{a} ) { return archive($config); } return $status; @@ -238,7 +240,9 @@ die "Unable to mark as done\n"; } -sub help { return &unsupported } +## no critic 'sigal' +sub help { return &unsupported } +## use critic sub list { my ( $config, $term ) = @_; @@ -315,7 +319,9 @@ return print map {"\+$_\n"} $todo->listproj; } +## no critic 'sigal' sub move { return &unsupported } +## use critic sub prepend { my ( $config, $line, @text ) = @_; @@ -338,11 +344,11 @@ my ( $config, $line, $priority ) = @_; my $error = 'usage: todo.pl pri ITEM# PRIORITY'; if ( !( $line && $line =~ /^\d+$/xms && $priority ) ) { - die $error; + die "$error\n"; } - if ( $priority !~ /^[A-Z]$/xms ) { - die $error . "\n" - . "note: PRIORITY must a single letter from A to Z.\n"; + elsif ( $priority !~ /^[A-Z]$/xms ) { + $error .= "\n" . 'note: PRIORITY must a single letter from A to Z.'; + die "$error\n"; } my $todo = Text::Todo->new($config); @@ -355,8 +361,10 @@ die "Unable to prioritize entry\n"; } +## no critic 'sigal' sub replace { return &unsupported } sub report { return &unsupported } +## use critic sub _number_list { my (@list) = @_; @@ -367,14 +375,14 @@ sub _show_sorted_list { my ( $term, @list ) = @_; - $term = defined $term ? quotemeta($term) : ''; + $term = defined $term ? quotemeta($term) : q{}; my $shown = 0; - my @sorted = map { sprintf "%02d %s", $_->{line}, $_->{entry}->text } + my @sorted = map { sprintf '%02d %s', $_->{line}, $_->{entry}->text } sort { lc $a->{entry}->text cmp lc $b->{entry}->text } @list; foreach my $line ( grep {/$term/xms} @sorted ) { - print $line, "\n"; + print "$line\n"; $shown++; } @@ -442,40 +450,48 @@ my ($file) = @_; my %config; - open my $fh, '<', $file or die "Unable to open [$file] : $!"; + open my $fh, '<', $file or die "Unable to open [$file] : $!\n"; LINE: while (<$fh>) { - s/\r?\n$//xms; - s/\s*\#.*$//xms; - next LINE unless $_; - - if (s/^\s*export\s+//xms) { - my ( $key, $value ) = /^([^=]+)\s*=\s*"?(.*?)"?\s*$/xms; - if ($key) { - foreach my $k ( keys %config ) { - $value =~ s/\$\Q$k\E/$config{$k}/gxms; - $value =~ s/\${\Q$k\E}/$config{$k}/gxms; - } - foreach my $k ( keys %ENV ) { - $value =~ s/\$\Q$k\E/$ENV{$k}/gxms; - $value =~ s/\${\Q$k\E}/$ENV{$k}/gxms; - } - $value =~ s/\$\w+//gxms; - $value =~ s/\${\w+}//gxms; - - $config{$key} = $value; - } - } + _parse_line( $_, \%config ); } - close $fh; + close $fh or die "Unable to close [$file]: $!\n"; my %lc_config; foreach my $k ( keys %config ) { - $lc_config{ lc($k) } = $config{$k}; + $lc_config{ lc $k } = $config{$k}; } return \%lc_config; } +sub _parse_line { + my ( $line, $config ) = @_; + + $line =~ s/\r?\n$//xms; + $line =~ s/\s*\#.*$//xms; + return if !$line; + + if (s/^\s*export\s+//xms) { + my ( $key, $value ) = /^([^=]+)\s*=\s*"?(.*?)"?\s*$/xms; + if ($key) { + foreach my $k ( keys %config ) { + $value =~ s/\$\Q$k\E/$config{$k}/gxms; + $value =~ s/\${\Q$k\E}/$config{$k}/gxms; + } + foreach my $k ( keys %ENV ) { + $value =~ s/\$\Q$k\E/$ENV{$k}/gxms; + $value =~ s/\${\Q$k\E}/$ENV{$k}/gxms; + } + $value =~ s/\$\w+//gxms; + $value =~ s/\${\w+}//gxms; + + $config->{$key} = $value; + } + } + + return 1; +} + __END__ =head1 NAME @@ -488,7 +504,7 @@ Since the $VERSION can't be automatically included, here is the RCS Id instead, you'll have to look up $VERSION. - $Id: todo.pl,v 1.14 2010/01/11 19:52:06 andrew Exp $ + $Id: todo.pl,v 1.15 2010/01/12 20:30:55 andrew Exp $ =head1 SYNOPSIS @@ -512,7 +528,18 @@ For more information see L +=head1 USAGE +See todo.pl -h + +=head1 OPTIONS + +See todo.pl -h + +=head1 REQUIRED ARGUMENTS + +See todo.pl -h + =head1 CONFIGURATION AND ENVIRONMENT todo.pl should read the todo.cfg file that todo.sh uses. It is a very @@ -523,6 +550,7 @@ It does not currently support any of the environment variables that todo.sh uses. +=head1 DIAGNOSTICS =head1 DEPENDENCIES