36
36
print "todo - display your todo file\n\n".
37
"Usage: $app_name [OPTIONS]\n\n".
39
" -a, --all display all sections\n".
40
" -e, --edit edit your todo file\n".
41
" -h, --headers show setion headers\n".
42
" -s, --section=SECTION display this named section\n".
43
" --help display this help and exit\n".
44
" --version output version information and exit\n";
37
"Usage: $app_name [OPTIONS]\n\n".
39
" -a, --all display all sections\n".
40
" -e, --edit edit your todo file\n".
41
" -h, --headers show setion headers\n".
42
" -s, --section=SECTION display this named section\n".
43
" --help display this help and exit\n".
44
" --version output version information and exit\n";
49
49
if( $mode_version ) {
51
"Copyright (C) 2011 Tim Marston.\n".
52
"http://ed.am/software/todo\n";
51
"Copyright (C) 2011 Tim Marston.\n";
71
70
# create the todo directory, as necessary
72
if( ! -d $todo_dir ) {
73
mkdir $todo_dir or die "couldn't create todo directory";
74
`bzr init --no-aliases -q "$todo_dir"`;
75
$? == 0 or die "couldn't init bzr repo";
78
# create a default todo file, as necessary
79
if( ! -f "$todo_dir/todo" ) {
80
open FILE, ">$todo_dir/todo" or die "couldn't create default todo file";
81
my $content = <<"EOT";
82
<!-- This file uses Markdown syntax. For more info about Markdown
83
syntax, see http://daringfireball.net/projects/markdown/syntax.
85
There should be a main H1 header called "TODO" for the main todo
86
list section (one has been added for you below). You can also add
87
as many more sections as you like for other lists. And feel free
88
to delete this comment! -->
93
* make a list of things to do
96
print FILE $content or die "couldn't write default todo file";
98
`bzr add --no-aliases -q "$todo_dir/todo"`;
99
$? == 0 or die "couldn't add todo file to bzr repo";
71
if( ! -d $todo_dir ) {
72
mkdir $todo_dir or die "couldn't create todo directory";
73
`bzr init --no-aliases -q "$todo_dir"`;
74
$? == 0 or die "couldn't init bzr repo";
76
$? == 0 or die "couldn't create initial todo file";
77
`bzr add --no-aliases -q "$todo_dir/todo"`;
78
$? == 0 or die "couldn't add todo file to bzr repo";
102
81
# determine editor from environment, default to "emacs -nw"
103
82
my $editor = $ENV{ 'EDITOR' };
105
84
my @exec_array = split( / +/, $editor );
106
85
push( @exec_array, "$todo_dir/todo" );
108
# detect emacs and try to use markdown-mode
109
$exec_array[ 0 ] eq "emacs" and
110
push( @exec_array, '--funcall=markdown-mode' );
87
# detect emacs and try to use markdown-mode
88
$exec_array[ 0 ] eq "emacs" and push( @exec_array, '--funcall=markdown-mode' );
113
91
system( @exec_array );
115
die "can't start editor, check EDITOR envionment variable";
117
# check for changes and commit it
118
$output = `bzr status --no-aliases "$todo_dir/todo"`;
119
$? == 0 or die "couldn't check bzr rerpo status";
121
if( $output ne "" ) {
122
`bzr commit --no-aliases -q -m - "$todo_dir/todo"`;
123
$? == 0 or die "couldn't commit to bzr repo";
126
# after editing, exit
92
$? == 0 or die "unable to exec editor";
94
# check for changes and commit it
95
$output = `bzr status --no-aliases "$todo_dir/todo"`;
96
$? == 0 or die "couldn't check bzr rerpo status";
99
`bzr commit --no-aliases -q -m - "$todo_dir/todo"`;
100
$? == 0 or die "couldn't commit to bzr repo";
130
107
# scan through file
138
115
# detect the line after section headings, and thus sections
139
116
if( /^[-=]{2,}/ && $next_section ne '' ) {
140
$section = $next_section;
117
$section = $next_section;
143
120
# detect section headings
144
elsif( /^[-_\.A-Za-z0-9 ]+$/ ) {
146
chomp( $next_section );
121
elsif( /^[A-Z]+$/ ) {
123
chomp( $next_section );
148
125
# we have neither a section heading nor the line after
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
130
if( $section eq $display_section ||
133
# detect section change
134
if( $section ne $old_section ) {
135
$old_section = $section;
137
# display section heading
138
if( $display_headers ||
141
my $heading = 'TODO';
142
$heading .= ' ('.lc( $section ).')' if $section ne "IMMEDIATE";
144
( "=" x length( $heading ) )."\n";
148
# replace tabs with 4 spaces