26
23
'a|all' => \$display_all,
27
24
'e|edit' => \$mode_edit,
28
25
'h|headers' => \$display_headers,
29
'l|list' => \$mode_less,
30
's|section=s' => \$display_section,
26
'section=s' => \$display_section,
31
27
'help' => \$mode_help,
32
28
'version' => \$mode_version,
34
30
print "Try `$app_name --help' for more information.\n";
40
36
print "todo - display your todo file\n\n".
41
#01234567890123456789012345678901234567890123456789012345678901234567890123456789
42
37
"Usage: $app_name [OPTIONS]\n\n".
44
39
" -a, --all display all sections\n".
45
40
" -e, --edit edit your todo file\n".
46
41
" -h, --headers show setion headers\n".
47
" -l, --list show the list in your pager (see notes)\n".
48
" -s, --section=SECTION display sections matching the regular expression\n".
42
" -s, --section=SECTION display this named section\n".
49
43
" --help display this help and exit\n".
50
" --version output version information and exit\n".
52
"Running without any options is the same as running with --section=TODO and\n".
53
"lists the default section of the todo file.\n".
55
"The advantage of using '--list' is that the pager is run as if the\n".
56
"todo list were being edited. This means that if you decide to spawn an\n".
57
"editor from you pager and edit the list, these changes get noticed.\n".
59
"The environment variables EDITOR and PAGER are used.\n".
61
"Please report bugs to Tim Marston <tim\@ed.am>.\n";
44
" --version output version information and exit\n";
66
49
if( $mode_version ) {
67
50
print "todo 1.0\n".
68
"Copyright (C) 2011, 2012 Tim Marston.\n".
51
"Copyright (C) 2011 Tim Marston.\n".
69
52
"http://ed.am/software/todo\n";
126
102
# determine editor from environment, default to "emacs -nw"
129
$editor = $ENV{ 'PAGER' };
130
defined $editor or $editor = 'less';
133
$editor = $ENV{ 'EDITOR' };
134
defined $editor or $editor = 'emacs -nw';
103
my $editor = $ENV{ 'EDITOR' };
104
defined $editor or $editor = 'emacs -nw';
136
105
my @exec_array = split( / +/, $editor );
137
106
push( @exec_array, "$todo_dir/todo" );
161
# function to display a line
164
my ( $line, $section ) = @_;
165
state $old_section = '';
167
# detect section change
168
if( $section ne $old_section ) {
169
$old_section = $section;
171
# display section heading
172
if( $display_headers || $display_all ) {
174
( "=" x length( $section ) )."\n";
178
# replace tabs with 4 spaces
186
130
# scan through file
187
my $candidate_section = '';
131
my $next_section = '';
188
132
my $section = '';
133
my $old_section = '';
190
134
open FILE, "<$todo_dir/todo" or die "can't open todo file";
193
138
# detect the line after section headings, and thus sections
194
if( /^[-=]{2,}/ && $candidate_section ne '' ) {
195
$section = $candidate_section;
196
$candidate_section = '';
139
if( /^[-=]{2,}/ && $next_section ne '' ) {
140
$section = $next_section;
201
143
# detect section headings
202
if( /^[-_\.A-Za-z0-9 ]+$/ ) {
203
$candidate_section = $_;
204
chomp $candidate_section;
144
elsif( /^[-_\.A-Za-z0-9 ]+$/ ) {
146
chomp( $next_section );
148
# we have neither a section heading nor the line after
207
$candidate_section = '';
211
display_line( $last_line, $section ) if( $last_line ne '' );
214
if( ( lc( $section ) eq lc( $display_section ) ) ||
215
( $section && $display_all ) )
153
if( ( $section eq $display_section ) ||
154
( $section && $display_all ) )
156
# detect section change
157
if( $section ne $old_section ) {
158
$old_section = $section;
160
# display section heading
161
if( $display_headers ||
165
( "=" x length( $section ) )."\n";
169
# replace tabs with 4 spaces
223
display_line( $last_line, $section ) if( $last_line ne '' );