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";
51
"Copyright (C) 2011 Tim Marston.\n".
52
"http://ed.am/software/todo\n";
70
71
# create the todo directory, as necessary
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";
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";
81
102
# determine editor from environment, default to "emacs -nw"
82
103
my $editor = $ENV{ 'EDITOR' };
84
105
my @exec_array = split( / +/, $editor );
85
106
push( @exec_array, "$todo_dir/todo" );
87
# detect emacs and try to use markdown-mode
88
$exec_array[ 0 ] eq "emacs" and push( @exec_array, '--funcall=markdown-mode' );
108
# detect emacs and try to use markdown-mode
109
$exec_array[ 0 ] eq "emacs" and
110
push( @exec_array, '--funcall=markdown-mode' );
91
113
system( @exec_array );
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";
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
107
130
# scan through file
115
138
# detect the line after section headings, and thus sections
116
139
if( /^[-=]{2,}/ && $next_section ne '' ) {
117
$section = $next_section;
140
$section = $next_section;
120
143
# detect section headings
121
elsif( /^[A-Z]+$/ ) {
123
chomp( $next_section );
144
elsif( /^[-_\.A-Za-z0-9 ]+$/ ) {
146
chomp( $next_section );
125
148
# we have neither a section heading nor the line after
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
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