/todo

To get this branch, use:
bzr branch http://bzr.ed.am/todo

« back to all changes in this revision

Viewing changes to todo

  • Committer: edam
  • Date: 2012-01-04 12:46:10 UTC
  • Revision ID: edam@waxworlds.org-20120104124610-nrrs6mv1btg390ni
rewrite file parsing to cache the last line and only display it when we know the current line is not a section heading "underline" line.

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
my $display_section = "TODO";
17
17
my $display_headers = 0;
18
18
my $mode_edit = 0;
19
 
my $mode_less = 0;
20
19
my $mode_help = 0;
21
20
my $mode_version = 0;
22
21
 
26
25
    'a|all' => \$display_all,
27
26
    'e|edit' => \$mode_edit,
28
27
    'h|headers' => \$display_headers,
29
 
        'l|list' => \$mode_less,
30
 
    's|section=s' => \$display_section,
 
28
    'section=s' => \$display_section,
31
29
    'help' => \$mode_help,
32
30
    'version' => \$mode_version,
33
 
) || @ARGV > 0 ) {
 
31
) ) {
34
32
    print "Try `$app_name --help' for more information.\n";
35
33
    exit( 1 );
36
34
}
38
36
# help mode
39
37
if( $mode_help ) {
40
38
    print "todo - display your todo file\n\n".
41
 
        #01234567890123456789012345678901234567890123456789012345678901234567890123456789
42
39
    "Usage: $app_name [OPTIONS]\n\n".
43
40
    "Options:\n".
44
41
    "  -a, --all              display all sections\n".
45
42
    "  -e, --edit             edit your todo file\n".
46
43
    "  -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".
 
44
    "      --section=SECTION  display this named section\n".
49
45
    "      --help     display this help and exit\n".
50
 
    "      --version  output version information and exit\n".
51
 
        "\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".
54
 
        "\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".
58
 
        "\n".
59
 
        "The environment variables EDITOR and PAGER are used.\n".
60
 
        "\n".
61
 
        "Please report bugs to Tim Marston <tim\@ed.am>.\n";
 
46
    "      --version  output version information and exit\n";
62
47
    exit( 0 );
63
48
}
64
49
 
65
50
# version mode
66
51
if( $mode_version ) {
67
52
    print "todo 1.0\n".
68
 
        "Copyright (C) 2011, 2012 Tim Marston.\n".
 
53
        "Copyright (C) 2011 Tim Marston.\n".
69
54
        "http://ed.am/software/todo\n";
70
55
    exit( 0 );
71
56
}
82
67
$todo_dir = glob( $todo_dir );
83
68
( -f $todo_dir ) and die "$todo_dir exists and is a file";
84
69
 
85
 
# less mode
86
 
if( $mode_less )
87
 
{
88
 
    ( ! -f "$todo_dir/todo" ) && die "no todo file";
89
 
        $mode_edit = 1;
90
 
}
91
 
 
92
70
# edit mode
93
71
if( $mode_edit )
94
72
{
124
102
    }
125
103
 
126
104
    # determine editor from environment, default to "emacs -nw"
127
 
        my $editor;
128
 
        if( $mode_less ) {
129
 
                $editor = $ENV{ 'PAGER' };
130
 
                defined $editor or $editor = 'less';
131
 
        }
132
 
        else {
133
 
                $editor = $ENV{ 'EDITOR' };
134
 
                defined $editor or $editor = 'emacs -nw';
135
 
        }
 
105
    my $editor = $ENV{ 'EDITOR' };
 
106
    defined $editor or $editor = 'emacs -nw';
136
107
    my @exec_array = split( / +/, $editor );
137
108
    push( @exec_array, "$todo_dir/todo" );
138
109
 
211
182
        display_line( $last_line, $section ) if( $last_line ne '' );
212
183
 
213
184
    # display line
214
 
        if( ( lc( $section ) eq lc( $display_section ) ) ||
 
185
        if( ( $section eq $display_section ) ||
215
186
                ( $section && $display_all ) )
216
187
        {
217
188
                $last_line = $_;