Compare commits

...

16 Commits

Author SHA1 Message Date
Jared Cordasco
77327f190f Added .gitattributes to allow for git archive use on releases. 2010-04-23 21:00:00 -05:00
Jared Cordasco
654c0c6d79 Merged done_functionality into git_integration. 2010-04-14 14:50:43 -05:00
Jared Cordasco
d3c14201a5 Initial version of done functionality w/ basic test. 2010-04-13 23:09:57 -05:00
Jared Cordasco
5a5f3bd24d Tab fixes. 2010-04-13 10:36:31 -05:00
Gina Trapani
e395ac78d8 Fix line endings 2010-03-26 12:55:55 -07:00
Paul Mansfield
6fc2d81919 Bugfix: Old versions of bash do not have =~
Versions of bash before 3.0 do not have =~ syntax to match on a regex.
Changed to using a simple grep -c test instead.
Fixes issues with osx and Solaris 9 and before.
2010-02-23 23:05:03 +00:00
Jared Cordasco
868dad6d5c First stab at git integration. 2010-01-14 01:57:18 -05:00
Jared Cordasco
b6467eaa64 Updated _list() output to match updated addto. Adjusted tests to match.
- _list() now shows the capitalized filename in place of 'TODO:'.
  For example, listing garden.txt produces a output prefixed by 'GARDEN:'
  This eliminates the ' from $FILE' part of the _list() output. All tests
  were adjusted to match this new output.
2010-01-12 14:42:02 -05:00
Jared Cordasco
2d3820394a Refactored various add functionality to one function. Added tests.
- 'add' and 'addm' now 'addto' with $TODO_FILE instead of user supplied file

- 'addto' now shows the capitalized filename in place of 'TODO:'.
  For example, adding to garden.txt produces a output prefixed by 'GARDEN:'
  (Probably the most controversial part of this commit and up for
  discussion. If kept, the 'listfile' output should be made to match.
  Note that this convention would then minimize standard output by
  dropping the file name.)

- All existing add/addm/add-date tests pass. Two new test sequences were
  added to test 'addto' and 'listfile' functionality.

- A space/tab nuissance was cleared up in the tests/README file.
2010-01-10 01:16:11 -05:00
Jared Cordasco
394c4c748a Correctly fixed regexp quoting issue for bash v3.1.x and v3.2.x.
See: http://stackoverflow.com/questions/218156/bash-regex-with-quotes
2010-01-06 21:05:22 -05:00
Jared Cordasco
4c76f04a82 Merge branch 'master' into personal_opts (w/ spacing corrections) 2010-01-05 23:26:08 -06:00
Jared Cordasco
2bb14eb9bc Consolidated TODOTXT_VERBOSE tests. 2010-01-05 15:45:36 -05:00
Jared Cordasco
99511169c3 Fixed erroneous hide/show comments. 2010-01-05 15:38:24 -05:00
Jared Cordasco
acc881f0dd Faster here document outputs. (Help/Usage messages) 2010-01-05 15:33:34 -05:00
Jared Cordasco
d337933fd9 Changed odd tabs to spaces. 2010-01-05 15:33:34 -05:00
Jared Cordasco
0a7e6337b2 Quoting regexp to parse properly. 2010-01-04 17:01:29 -05:00
17 changed files with 656 additions and 326 deletions

6
.gitattributes vendored Normal file
View File

@@ -0,0 +1,6 @@
.git[ia]* export-ignore
GEN-VERSION-FILE export-ignore
Makefile export-ignore
README.textile export-ignore
VERSION-FILE export-ignore
tests export-ignore

View File

@@ -12,7 +12,7 @@ when there are no todos.
# #
cat > expect <<EOF cat > expect <<EOF
-- --
TODO: 0 of 0 tasks shown from $HOME/todo.txt TODO: 0 of 0 tasks shown
EOF EOF
test_expect_success 'null ls' ' test_expect_success 'null ls' '
@@ -44,7 +44,7 @@ test_expect_success 'null listpri a' '
# #
cat > expect <<EOF cat > expect <<EOF
-- --
TODO: 0 of 0 tasks shown from $HOME/todo.tmp TODO: 0 of 0 tasks shown
EOF EOF
test_expect_success 'null lsa' ' test_expect_success 'null lsa' '

View File

@@ -17,7 +17,7 @@ TODO: 'notice the daisies' added on line 1.
>>> todo.sh list >>> todo.sh list
1 notice the daisies 1 notice the daisies
-- --
TODO: 1 of 1 tasks shown from $HOME/todo.txt TODO: 1 of 1 tasks shown
>>> todo.sh add smell the roses >>> todo.sh add smell the roses
TODO: 'smell the roses' added on line 2. TODO: 'smell the roses' added on line 2.
@@ -26,7 +26,7 @@ TODO: 'smell the roses' added on line 2.
1 notice the daisies 1 notice the daisies
2 smell the roses 2 smell the roses
-- --
TODO: 2 of 2 tasks shown from $HOME/todo.txt TODO: 2 of 2 tasks shown
EOF EOF
# #
@@ -36,12 +36,12 @@ test_todo_session 'basic list filtering' <<EOF
>>> todo.sh list daisies >>> todo.sh list daisies
1 notice the daisies 1 notice the daisies
-- --
TODO: 1 of 2 tasks shown from $HOME/todo.txt TODO: 1 of 2 tasks shown
>>> todo.sh list smell >>> todo.sh list smell
2 smell the roses 2 smell the roses
-- --
TODO: 1 of 2 tasks shown from $HOME/todo.txt TODO: 1 of 2 tasks shown
EOF EOF
test_todo_session 'case-insensitive filtering' <<EOF test_todo_session 'case-insensitive filtering' <<EOF
@@ -52,7 +52,7 @@ TODO: 'smell the uppercase Roses' added on line 3.
2 smell the roses 2 smell the roses
3 smell the uppercase Roses 3 smell the uppercase Roses
-- --
TODO: 2 of 3 tasks shown from $HOME/todo.txt TODO: 2 of 3 tasks shown
EOF EOF
test_todo_session 'add with &' <<EOF test_todo_session 'add with &' <<EOF
@@ -65,7 +65,7 @@ TODO: 'dig the garden & water the flowers' added on line 4.
2 smell the roses 2 smell the roses
3 smell the uppercase Roses 3 smell the uppercase Roses
-- --
TODO: 4 of 4 tasks shown from $HOME/todo.txt TODO: 4 of 4 tasks shown
EOF EOF

View File

@@ -17,7 +17,7 @@ TODO: '2009-02-13 notice the daisies' added on line 1.
>>> todo.sh list >>> todo.sh list
1 2009-02-13 notice the daisies 1 2009-02-13 notice the daisies
-- --
TODO: 1 of 1 tasks shown from $HOME/todo.txt TODO: 1 of 1 tasks shown
EOF EOF
test_tick test_tick
@@ -30,7 +30,7 @@ TODO: '2009-02-14 smell the roses' added on line 2.
1 2009-02-13 notice the daisies 1 2009-02-13 notice the daisies
2 2009-02-14 smell the roses 2 2009-02-14 smell the roses
-- --
TODO: 2 of 2 tasks shown from $HOME/todo.txt TODO: 2 of 2 tasks shown
EOF EOF
test_tick test_tick
@@ -44,7 +44,7 @@ TODO: '2009-02-15 mow the lawn' added on line 3.
2 2009-02-14 smell the roses 2 2009-02-14 smell the roses
3 2009-02-15 mow the lawn 3 2009-02-15 mow the lawn
-- --
TODO: 3 of 3 tasks shown from $HOME/todo.txt TODO: 3 of 3 tasks shown
EOF EOF
# Switch to config file # Switch to config file
@@ -63,7 +63,7 @@ TODO: '2009-02-15 take out the trash' added on line 4.
3 2009-02-15 mow the lawn 3 2009-02-15 mow the lawn
4 2009-02-15 take out the trash 4 2009-02-15 take out the trash
-- --
TODO: 4 of 4 tasks shown from $HOME/todo.txt TODO: 4 of 4 tasks shown
EOF EOF
test_done test_done

78
tests/t1020-addtolistfile.sh Executable file
View File

@@ -0,0 +1,78 @@
#!/bin/sh
test_description='basic addto and list functionality
This test just makes sure the basic addto and listfile
commands work, including support for filtering.
'
. ./test-lib.sh
#
# Addto and listfile
#
test_todo_session 'nonexistant file' <<EOF
>>> todo.sh addto garden.txt notice the daisies
TODO: Destination file $HOME/garden.txt does not exist.
EOF
touch "$HOME/garden.txt"
test_todo_session 'basic addto/listfile' <<EOF
>>> todo.sh addto garden.txt notice the daisies
GARDEN: 'notice the daisies' added on line 1.
>>> todo.sh listfile garden.txt
1 notice the daisies
--
GARDEN: 1 of 1 tasks shown
>>> todo.sh addto garden.txt smell the roses
GARDEN: 'smell the roses' added on line 2.
>>> todo.sh listfile garden.txt
1 notice the daisies
2 smell the roses
--
GARDEN: 2 of 2 tasks shown
EOF
#
# Filter
#
test_todo_session 'basic listfile filtering' <<EOF
>>> todo.sh listfile garden.txt daisies
1 notice the daisies
--
GARDEN: 1 of 2 tasks shown
>>> todo.sh listfile garden.txt smell
2 smell the roses
--
GARDEN: 1 of 2 tasks shown
EOF
test_todo_session 'case-insensitive filtering' <<EOF
>>> todo.sh addto garden.txt smell the uppercase Roses
GARDEN: 'smell the uppercase Roses' added on line 3.
>>> todo.sh listfile garden.txt roses
2 smell the roses
3 smell the uppercase Roses
--
GARDEN: 2 of 3 tasks shown
EOF
test_todo_session 'addto with &' <<EOF
>>> todo.sh addto garden.txt "dig the garden & water the flowers"
GARDEN: 'dig the garden & water the flowers' added on line 4.
>>> todo.sh listfile garden.txt
4 dig the garden & water the flowers
1 notice the daisies
2 smell the roses
3 smell the uppercase Roses
--
GARDEN: 4 of 4 tasks shown
EOF
test_done

71
tests/t1030-addto-date.sh Executable file
View File

@@ -0,0 +1,71 @@
#!/bin/sh
test_description='test the date on addto feature
Tests paths by which we might automatically add
a date to each item.
'
. ./test-lib.sh
touch "$HOME/garden.txt"
#
# Add and list
#
test_todo_session 'cmd line first day' <<EOF
>>> todo.sh -t addto garden.txt notice the daisies
GARDEN: '2009-02-13 notice the daisies' added on line 1.
>>> todo.sh listfile garden.txt
1 2009-02-13 notice the daisies
--
GARDEN: 1 of 1 tasks shown
EOF
test_tick
test_todo_session 'cmd line second day' <<EOF
>>> todo.sh -t addto garden.txt smell the roses
GARDEN: '2009-02-14 smell the roses' added on line 2.
>>> todo.sh listfile garden.txt
1 2009-02-13 notice the daisies
2 2009-02-14 smell the roses
--
GARDEN: 2 of 2 tasks shown
EOF
test_tick
test_todo_session 'cmd line third day' <<EOF
>>> todo.sh -t addto garden.txt mow the lawn
GARDEN: '2009-02-15 mow the lawn' added on line 3.
>>> todo.sh listfile garden.txt
1 2009-02-13 notice the daisies
2 2009-02-14 smell the roses
3 2009-02-15 mow the lawn
--
GARDEN: 3 of 3 tasks shown
EOF
# Switch to config file
echo "export TODOTXT_DATE_ON_ADD=1" >> todo.cfg
# Bump the clock, for good measure.
test_tick 3600
test_todo_session 'config file third day' <<EOF
>>> todo.sh addto garden.txt take out the trash
GARDEN: '2009-02-15 take out the trash' added on line 4.
>>> todo.sh listfile garden.txt
1 2009-02-13 notice the daisies
2 2009-02-14 smell the roses
3 2009-02-15 mow the lawn
4 2009-02-15 take out the trash
--
GARDEN: 4 of 4 tasks shown
EOF
test_done

View File

@@ -26,7 +26,7 @@ replaced with
>>> todo.sh list >>> todo.sh list
1 smell the cows 1 smell the cows
-- --
TODO: 1 of 1 tasks shown from $HOME/todo.txt TODO: 1 of 1 tasks shown
>>> todo.sh replace 1 smell the roses >>> todo.sh replace 1 smell the roses
1: smell the cows 1: smell the cows
@@ -36,7 +36,7 @@ replaced with
>>> todo.sh list >>> todo.sh list
1 smell the roses 1 smell the roses
-- --
TODO: 1 of 1 tasks shown from $HOME/todo.txt TODO: 1 of 1 tasks shown
EOF EOF
cat > todo.txt <<EOF cat > todo.txt <<EOF

View File

@@ -22,7 +22,7 @@ test_todo_session 'basic priority' <<EOF
1 smell the uppercase Roses +flowers @outside 1 smell the uppercase Roses +flowers @outside
3 stop 3 stop
-- --
TODO: 3 of 3 tasks shown from $HOME/todo.txt TODO: 3 of 3 tasks shown
>>> todo.sh pri 1 B >>> todo.sh pri 1 B
1: (B) smell the uppercase Roses +flowers @outside 1: (B) smell the uppercase Roses +flowers @outside
@@ -33,14 +33,14 @@ TODO: 1 prioritized (B).
2 notice the sunflowers 2 notice the sunflowers
3 stop 3 stop
-- --
TODO: 3 of 3 tasks shown from $HOME/todo.txt TODO: 3 of 3 tasks shown
>>> todo.sh -p list >>> todo.sh -p list
1 (B) smell the uppercase Roses +flowers @outside 1 (B) smell the uppercase Roses +flowers @outside
2 notice the sunflowers 2 notice the sunflowers
3 stop 3 stop
-- --
TODO: 3 of 3 tasks shown from $HOME/todo.txt TODO: 3 of 3 tasks shown
>>> todo.sh pri 2 C >>> todo.sh pri 2 C
2: (C) notice the sunflowers 2: (C) notice the sunflowers
@@ -51,7 +51,7 @@ TODO: 2 prioritized (C).
2 (C) notice the sunflowers 2 (C) notice the sunflowers
3 stop 3 stop
-- --
TODO: 3 of 3 tasks shown from $HOME/todo.txt TODO: 3 of 3 tasks shown
>>> todo.sh pri 2 A >>> todo.sh pri 2 A
2: (A) notice the sunflowers 2: (A) notice the sunflowers
@@ -62,7 +62,7 @@ TODO: 2 prioritized (A).
1 (B) smell the uppercase Roses +flowers @outside 1 (B) smell the uppercase Roses +flowers @outside
3 stop 3 stop
-- --
TODO: 3 of 3 tasks shown from $HOME/todo.txt TODO: 3 of 3 tasks shown
>>> todo.sh pri 2 a >>> todo.sh pri 2 a
2: (A) notice the sunflowers 2: (A) notice the sunflowers
@@ -72,7 +72,7 @@ TODO: 2 prioritized (A).
2 (A) notice the sunflowers 2 (A) notice the sunflowers
1 (B) smell the uppercase Roses +flowers @outside 1 (B) smell the uppercase Roses +flowers @outside
-- --
TODO: 2 of 3 tasks shown from $HOME/todo.txt TODO: 2 of 3 tasks shown
>>> todo.sh add "smell the coffee +wakeup" >>> todo.sh add "smell the coffee +wakeup"
TODO: 'smell the coffee +wakeup' added on line 4. TODO: 'smell the coffee +wakeup' added on line 4.
@@ -83,7 +83,7 @@ TODO: 'smell the coffee +wakeup' added on line 4.
4 smell the coffee +wakeup 4 smell the coffee +wakeup
3 stop 3 stop
-- --
TODO: 4 of 4 tasks shown from $HOME/todo.txt TODO: 4 of 4 tasks shown
EOF EOF
test_done test_done

View File

@@ -28,14 +28,14 @@ test_todo_session 'checking TODOTXT_SORT_COMMAND' <<EOF
3 bbb yyy this line should be second. 3 bbb yyy this line should be second.
1 ccc xxx this line should be third. 1 ccc xxx this line should be third.
-- --
TODO: 3 of 3 tasks shown from $HOME/todo.txt TODO: 3 of 3 tasks shown
>>> todo.sh -d "$TEST_TODO1_" ls >>> todo.sh -d "$TEST_TODO1_" ls
1 ccc xxx this line should be third. 1 ccc xxx this line should be third.
3 bbb yyy this line should be second. 3 bbb yyy this line should be second.
2 aaa zzz this line should be first. 2 aaa zzz this line should be first.
-- --
TODO: 3 of 3 tasks shown from $HOME/todo.txt TODO: 3 of 3 tasks shown
EOF EOF
# #
@@ -50,7 +50,7 @@ test_todo_session 'checking TODOTXT_FINAL_FILTER' <<EOF
3 bbb yyy this line s... 3 bbb yyy this line s...
1 ccc xxx this line s... 1 ccc xxx this line s...
-- --
TODO: 3 of 3 tasks shown from $HOME/todo.txt TODO: 3 of 3 tasks shown
EOF EOF
# #
@@ -70,14 +70,14 @@ test_todo_session 'final filter suppression' <<EOF
3 baz 3 baz
1 foo 1 foo
-- --
TODO: 2 of 3 tasks shown from $HOME/todo.txt TODO: 2 of 3 tasks shown
>>> todo.sh -d "$TEST_TODO3_" -x ls >>> todo.sh -d "$TEST_TODO3_" -x ls
2 bar xxx 2 bar xxx
3 baz 3 baz
1 foo 1 foo
-- --
TODO: 3 of 3 tasks shown from $HOME/todo.txt TODO: 3 of 3 tasks shown
EOF EOF
# #
@@ -128,7 +128,7 @@ test_todo_session 'plain mode option' <<EOF
19 @con02 +prj03 -- Some project 03 task, no priorty 19 @con02 +prj03 -- Some project 03 task, no priorty
20 @con02 +prj04 -- Some project 04 task, no priority 20 @con02 +prj04 -- Some project 04 task, no priority
-- --
TODO: 20 of 20 tasks shown from $HOME/todo.txt TODO: 20 of 20 tasks shown
>>> todo.sh -p ls >>> todo.sh -p ls
01 (A) @con01 +prj01 -- Some project 01 task, pri A 01 (A) @con01 +prj01 -- Some project 01 task, pri A
@@ -152,7 +152,7 @@ TODO: 20 of 20 tasks shown from $HOME/todo.txt
19 @con02 +prj03 -- Some project 03 task, no priorty 19 @con02 +prj03 -- Some project 03 task, no priorty
20 @con02 +prj04 -- Some project 04 task, no priority 20 @con02 +prj04 -- Some project 04 task, no priority
-- --
TODO: 20 of 20 tasks shown from $HOME/todo.txt TODO: 20 of 20 tasks shown
EOF EOF
# #
@@ -203,7 +203,7 @@ test_todo_session 'context, project, and priority suppression' <<EOF
19 @con02 +prj03 -- Some project 03 task, no priorty 19 @con02 +prj03 -- Some project 03 task, no priorty
20 @con02 +prj04 -- Some project 04 task, no priority 20 @con02 +prj04 -- Some project 04 task, no priority
-- --
TODO: 20 of 20 tasks shown from $HOME/todo.txt TODO: 20 of 20 tasks shown
>>> todo.sh ls @con01 >>> todo.sh ls @con01
01 (A) @con01 +prj01 -- Some project 01 task, pri A 01 (A) @con01 +prj01 -- Some project 01 task, pri A
@@ -217,7 +217,7 @@ TODO: 20 of 20 tasks shown from $HOME/todo.txt
17 @con01 +prj01 -- Some project 01 task, no priority 17 @con01 +prj01 -- Some project 01 task, no priority
18 @con01 +prj02 -- Some project 02 task, no priority 18 @con01 +prj02 -- Some project 02 task, no priority
-- --
TODO: 10 of 20 tasks shown from $HOME/todo.txt TODO: 10 of 20 tasks shown
>>> todo.sh -P ls @con01 >>> todo.sh -P ls @con01
01 @con01 +prj01 -- Some project 01 task, pri A 01 @con01 +prj01 -- Some project 01 task, pri A
@@ -231,7 +231,7 @@ TODO: 10 of 20 tasks shown from $HOME/todo.txt
17 @con01 +prj01 -- Some project 01 task, no priority 17 @con01 +prj01 -- Some project 01 task, no priority
18 @con01 +prj02 -- Some project 02 task, no priority 18 @con01 +prj02 -- Some project 02 task, no priority
-- --
TODO: 10 of 20 tasks shown from $HOME/todo.txt TODO: 10 of 20 tasks shown
>>> todo.sh -+ ls @con01 >>> todo.sh -+ ls @con01
01 (A) @con01 -- Some project 01 task, pri A 01 (A) @con01 -- Some project 01 task, pri A
@@ -245,7 +245,7 @@ TODO: 10 of 20 tasks shown from $HOME/todo.txt
17 @con01 -- Some project 01 task, no priority 17 @con01 -- Some project 01 task, no priority
18 @con01 -- Some project 02 task, no priority 18 @con01 -- Some project 02 task, no priority
-- --
TODO: 10 of 20 tasks shown from $HOME/todo.txt TODO: 10 of 20 tasks shown
>>> todo.sh -@ ls @con01 >>> todo.sh -@ ls @con01
01 (A) +prj01 -- Some project 01 task, pri A 01 (A) +prj01 -- Some project 01 task, pri A
@@ -259,7 +259,7 @@ TODO: 10 of 20 tasks shown from $HOME/todo.txt
17 +prj01 -- Some project 01 task, no priority 17 +prj01 -- Some project 01 task, no priority
18 +prj02 -- Some project 02 task, no priority 18 +prj02 -- Some project 02 task, no priority
-- --
TODO: 10 of 20 tasks shown from $HOME/todo.txt TODO: 10 of 20 tasks shown
>>> todo.sh -P -@ ls @con01 >>> todo.sh -P -@ ls @con01
01 +prj01 -- Some project 01 task, pri A 01 +prj01 -- Some project 01 task, pri A
@@ -273,7 +273,7 @@ TODO: 10 of 20 tasks shown from $HOME/todo.txt
17 +prj01 -- Some project 01 task, no priority 17 +prj01 -- Some project 01 task, no priority
18 +prj02 -- Some project 02 task, no priority 18 +prj02 -- Some project 02 task, no priority
-- --
TODO: 10 of 20 tasks shown from $HOME/todo.txt TODO: 10 of 20 tasks shown
>>> todo.sh -P -@ -+ -P -@ -+ ls @con01 >>> todo.sh -P -@ -+ -P -@ -+ ls @con01
01 (A) @con01 +prj01 -- Some project 01 task, pri A 01 (A) @con01 +prj01 -- Some project 01 task, pri A
@@ -287,7 +287,7 @@ TODO: 10 of 20 tasks shown from $HOME/todo.txt
17 @con01 +prj01 -- Some project 01 task, no priority 17 @con01 +prj01 -- Some project 01 task, no priority
18 @con01 +prj02 -- Some project 02 task, no priority 18 @con01 +prj02 -- Some project 02 task, no priority
-- --
TODO: 10 of 20 tasks shown from $HOME/todo.txt TODO: 10 of 20 tasks shown
>>> todo.sh -P -@ -+ -P -@ -+ -P -@ -+ ls @con01 >>> todo.sh -P -@ -+ -P -@ -+ -P -@ -+ ls @con01
01 -- Some project 01 task, pri A 01 -- Some project 01 task, pri A
@@ -301,7 +301,7 @@ TODO: 10 of 20 tasks shown from $HOME/todo.txt
17 -- Some project 01 task, no priority 17 -- Some project 01 task, no priority
18 -- Some project 02 task, no priority 18 -- Some project 02 task, no priority
-- --
TODO: 10 of 20 tasks shown from $HOME/todo.txt TODO: 10 of 20 tasks shown
EOF EOF
# #
@@ -536,7 +536,7 @@ test_todo_session 'check line number padding, out to 3 digits' <<EOF
111 hex6E this is another line 111 hex6E this is another line
112 hex6F this is another line 112 hex6F this is another line
-- --
TODO: 112 of 112 tasks shown from $HOME/todo.txt TODO: 112 of 112 tasks shown
EOF EOF
# #
@@ -564,7 +564,7 @@ test_todo_session 'check that blank lines are ignored for less than 10 items' <<
7 hex06 this is another line 7 hex06 this is another line
8 hex07 this is another line 8 hex07 this is another line
-- --
TODO: 7 of 7 tasks shown from $HOME/todo.txt TODO: 7 of 7 tasks shown
EOF EOF
# More than 10 # More than 10
@@ -592,7 +592,7 @@ test_todo_session 'check that blank lines are ignored for blank lines whose ID b
09 hex08 this is another line 09 hex08 this is another line
10 hex09 this is another line 10 hex09 this is another line
-- --
TODO: 9 of 9 tasks shown from $HOME/todo.txt TODO: 9 of 9 tasks shown
EOF EOF
cat > todo.txt <<EOF cat > todo.txt <<EOF
hex00 this is one line hex00 this is one line
@@ -617,7 +617,7 @@ test_todo_session 'check that blank lines are ignored for blank lines whose ID b
09 hex08 this is another line 09 hex08 this is another line
10 hex09 this is another line 10 hex09 this is another line
-- --
TODO: 8 of 8 tasks shown from $HOME/todo.txt TODO: 8 of 8 tasks shown
EOF EOF
test_done test_done

View File

@@ -21,14 +21,14 @@ test_todo_session 'basic prepend' <<EOF
2 notice the sunflowers 2 notice the sunflowers
3 stop 3 stop
-- --
TODO: 3 of 3 tasks shown from $HOME/todo.txt TODO: 3 of 3 tasks shown
>>> todo.sh -p list >>> todo.sh -p list
1 (B) smell the uppercase Roses +flowers @outside 1 (B) smell the uppercase Roses +flowers @outside
2 notice the sunflowers 2 notice the sunflowers
3 stop 3 stop
-- --
TODO: 3 of 3 tasks shown from $HOME/todo.txt TODO: 3 of 3 tasks shown
>>> todo.sh prepend 2 test >>> todo.sh prepend 2 test
2: test notice the sunflowers 2: test notice the sunflowers
@@ -38,7 +38,7 @@ TODO: 3 of 3 tasks shown from $HOME/todo.txt
3 stop 3 stop
2 test notice the sunflowers 2 test notice the sunflowers
-- --
TODO: 3 of 3 tasks shown from $HOME/todo.txt TODO: 3 of 3 tasks shown
>>> todo.sh prepend 1 test >>> todo.sh prepend 1 test
1: (B) test smell the uppercase Roses +flowers @outside 1: (B) test smell the uppercase Roses +flowers @outside
@@ -48,7 +48,7 @@ TODO: 3 of 3 tasks shown from $HOME/todo.txt
3 stop 3 stop
2 test notice the sunflowers 2 test notice the sunflowers
-- --
TODO: 3 of 3 tasks shown from $HOME/todo.txt TODO: 3 of 3 tasks shown
EOF EOF

View File

@@ -32,7 +32,7 @@ test_todo_session 'basic do' <<EOF
1 smell the uppercase Roses +flowers @outside 1 smell the uppercase Roses +flowers @outside
3 stop 3 stop
-- --
TODO: 7 of 7 tasks shown from $HOME/todo.txt TODO: 7 of 7 tasks shown
>>> todo.sh do 7,6 >>> todo.sh do 7,6
7: x 2009-02-13 remove4 7: x 2009-02-13 remove4
@@ -50,7 +50,7 @@ TODO: $HOME/todo.txt archived.
1 smell the uppercase Roses +flowers @outside 1 smell the uppercase Roses +flowers @outside
3 stop 3 stop
-- --
TODO: 5 of 5 tasks shown from $HOME/todo.txt TODO: 5 of 5 tasks shown
>>> todo.sh do 5 4 >>> todo.sh do 5 4
5: x 2009-02-13 remove2 5: x 2009-02-13 remove2
@@ -66,7 +66,7 @@ TODO: $HOME/todo.txt archived.
1 smell the uppercase Roses +flowers @outside 1 smell the uppercase Roses +flowers @outside
3 stop 3 stop
-- --
TODO: 3 of 3 tasks shown from $HOME/todo.txt TODO: 3 of 3 tasks shown
EOF EOF
test_todo_session 'fail multiple do attempts' <<EOF test_todo_session 'fail multiple do attempts' <<EOF

52
tests/t1550-done.sh Executable file
View File

@@ -0,0 +1,52 @@
#!/bin/sh
test_description='done functionality
'
. ./test-lib.sh
#DATE=`date '+%Y-%m-%d'`
test_todo_session 'done usage' <<EOF
>>> export TODOTXT_FORCE=1
>>> todo.sh done
usage: todo.sh done "TODO ITEM"
=== 1
EOF
cat > todo.txt <<EOF
stop
remove1
remove2
remove3
remove4
EOF
test_todo_session 'basic done' <<EOF
>>> todo.sh lsa
2 remove1
3 remove2
4 remove3
5 remove4
1 stop
--
TODO: 5 of 5 tasks shown
>>> todo.sh done smell the uppercase Roses
TODO: 'smell the uppercase Roses' marked as done.
>>> todo.sh done notice the sunflowers
TODO: 'notice the sunflowers' marked as done.
>>> todo.sh lsa
2 remove1
3 remove2
4 remove3
5 remove4
1 stop
7 x 2009-02-13 notice the sunflowers
6 x 2009-02-13 smell the uppercase Roses
--
TODO: 7 of 7 tasks shown
EOF
test_done

View File

@@ -24,7 +24,7 @@ test_todo_session 'basic append' <<EOF
>>> todo.sh list >>> todo.sh list
1 notice the daisies smell the roses 1 notice the daisies smell the roses
-- --
TODO: 1 of 1 tasks shown from $HOME/todo.txt TODO: 1 of 1 tasks shown
EOF EOF
test_todo_session 'basic append with &' <<EOF test_todo_session 'basic append with &' <<EOF
@@ -34,7 +34,7 @@ test_todo_session 'basic append with &' <<EOF
>>> todo.sh list >>> todo.sh list
1 notice the daisies smell the roses see the wasps & bees 1 notice the daisies smell the roses see the wasps & bees
-- --
TODO: 1 of 1 tasks shown from $HOME/todo.txt TODO: 1 of 1 tasks shown
EOF EOF

View File

@@ -17,23 +17,23 @@ test_todo_session 'basic tests' <<EOF
4 smell the coffee +wakeup 4 smell the coffee +wakeup
3 stop 3 stop
-- --
TODO: 4 of 4 tasks shown from $HOME/todo.txt TODO: 4 of 4 tasks shown
>>> todo.sh -p list +flowers >>> todo.sh -p list +flowers
1 (B) smell the uppercase Roses +flowers @outside 1 (B) smell the uppercase Roses +flowers @outside
-- --
TODO: 1 of 4 tasks shown from $HOME/todo.txt TODO: 1 of 4 tasks shown
>>> todo.sh -p list flowers >>> todo.sh -p list flowers
2 (A) notice the sunflowers 2 (A) notice the sunflowers
1 (B) smell the uppercase Roses +flowers @outside 1 (B) smell the uppercase Roses +flowers @outside
-- --
TODO: 2 of 4 tasks shown from $HOME/todo.txt TODO: 2 of 4 tasks shown
>>> todo.sh -p list flowers out >>> todo.sh -p list flowers out
1 (B) smell the uppercase Roses +flowers @outside 1 (B) smell the uppercase Roses +flowers @outside
-- --
TODO: 1 of 4 tasks shown from $HOME/todo.txt TODO: 1 of 4 tasks shown
>>> todo.sh -a do 2 >>> todo.sh -a do 2
2: x 2009-02-13 notice the sunflowers 2: x 2009-02-13 notice the sunflowers
@@ -45,7 +45,7 @@ TODO: 2 marked as done.
3 stop 3 stop
2 x 2009-02-13 notice the sunflowers 2 x 2009-02-13 notice the sunflowers
-- --
TODO: 4 of 4 tasks shown from $HOME/todo.txt TODO: 4 of 4 tasks shown
>>> todo.sh add "make the coffee +wakeup" >>> todo.sh add "make the coffee +wakeup"
TODO: 'make the coffee +wakeup' added on line 5. TODO: 'make the coffee +wakeup' added on line 5.
@@ -54,7 +54,7 @@ TODO: 'make the coffee +wakeup' added on line 5.
5 make the coffee +wakeup 5 make the coffee +wakeup
4 smell the coffee +wakeup 4 smell the coffee +wakeup
-- --
TODO: 2 of 5 tasks shown from $HOME/todo.txt TODO: 2 of 5 tasks shown
>>> todo.sh add "visit http://example.com" >>> todo.sh add "visit http://example.com"
TODO: 'visit http://example.com' added on line 6. TODO: 'visit http://example.com' added on line 6.
@@ -67,7 +67,7 @@ TODO: 'visit http://example.com' added on line 6.
6 visit http://example.com 6 visit http://example.com
2 x 2009-02-13 notice the sunflowers 2 x 2009-02-13 notice the sunflowers
-- --
TODO: 6 of 6 tasks shown from $HOME/todo.txt TODO: 6 of 6 tasks shown
>>> todo.sh archive >>> todo.sh archive
x 2009-02-13 notice the sunflowers x 2009-02-13 notice the sunflowers
@@ -80,7 +80,7 @@ TODO: $HOME/todo.txt archived.
2 stop 2 stop
5 visit http://example.com 5 visit http://example.com
-- --
TODO: 5 of 5 tasks shown from $HOME/todo.txt TODO: 5 of 5 tasks shown
>>> todo.sh report >>> todo.sh report
TODO: Report file updated. TODO: Report file updated.
@@ -105,7 +105,7 @@ usage: todo.sh append ITEM# "TEXT TO APPEND"
2 stop and think 2 stop and think
5 visit http://example.com 5 visit http://example.com
-- --
TODO: 5 of 5 tasks shown from $HOME/todo.txt TODO: 5 of 5 tasks shown
>>> todo.sh append 10 "hej!" >>> todo.sh append 10 "hej!"
10: No such todo. 10: No such todo.
@@ -118,7 +118,7 @@ TODO: 5 of 5 tasks shown from $HOME/todo.txt
2 stop and think 2 stop and think
5 visit http://example.com 5 visit http://example.com
-- --
TODO: 5 of 5 tasks shown from $HOME/todo.txt TODO: 5 of 5 tasks shown
>>> todo.sh do 10 >>> todo.sh do 10
10: No such todo. 10: No such todo.
@@ -131,7 +131,7 @@ TODO: 5 of 5 tasks shown from $HOME/todo.txt
2 stop and think 2 stop and think
5 visit http://example.com 5 visit http://example.com
-- --
TODO: 5 of 5 tasks shown from $HOME/todo.txt TODO: 5 of 5 tasks shown
>>> todo.sh add "the coffee +wakeup" >>> todo.sh add "the coffee +wakeup"
TODO: 'the coffee +wakeup' added on line 6. TODO: 'the coffee +wakeup' added on line 6.
@@ -144,7 +144,7 @@ TODO: 'the coffee +wakeup' added on line 6.
6 the coffee +wakeup 6 the coffee +wakeup
5 visit http://example.com 5 visit http://example.com
-- --
TODO: 6 of 6 tasks shown from $HOME/todo.txt TODO: 6 of 6 tasks shown
>>> todo.sh prepend 6 "make" >>> todo.sh prepend 6 "make"
6: make the coffee +wakeup 6: make the coffee +wakeup
@@ -157,7 +157,7 @@ TODO: 6 of 6 tasks shown from $HOME/todo.txt
2 stop and think 2 stop and think
5 visit http://example.com 5 visit http://example.com
-- --
TODO: 6 of 6 tasks shown from $HOME/todo.txt TODO: 6 of 6 tasks shown
>>> todo.sh remdup >>> todo.sh remdup
Usage: todo.sh [-fhpantvV] [-d todo_config] action [task_number] [task_description] Usage: todo.sh [-fhpantvV] [-d todo_config] action [task_number] [task_description]

215
todo.sh
View File

@@ -4,7 +4,8 @@
# Place the .todo/config file in your home directory or use the -d option for a custom location. # Place the .todo/config file in your home directory or use the -d option for a custom location.
[ -f VERSION-FILE ] && . VERSION-FILE || VERSION="@DEV_VERSION@" [ -f VERSION-FILE ] && . VERSION-FILE || VERSION="@DEV_VERSION@"
version() { sed -e 's/^ //' <<EndVersion version() {
cat <<-EndVersion
TODO.TXT Command Line Interface v$VERSION TODO.TXT Command Line Interface v$VERSION
First release: 5/11/2006 First release: 5/11/2006
@@ -13,7 +14,7 @@ version() { sed -e 's/^ //' <<EndVersion
License: GPL, http://www.gnu.org/copyleft/gpl.html License: GPL, http://www.gnu.org/copyleft/gpl.html
More information and mailing list at http://todotxt.com More information and mailing list at http://todotxt.com
Code repository: http://github.com/ginatrapani/todo.txt-cli/tree/master Code repository: http://github.com/ginatrapani/todo.txt-cli/tree/master
EndVersion EndVersion
exit 1 exit 1
} }
@@ -26,16 +27,16 @@ oneline_usage="$TODO_SH [-fhpantvV] [-d todo_config] action [task_number] [task_
usage() usage()
{ {
sed -e 's/^ //' <<EndUsage cat <<-EndUsage
Usage: $oneline_usage Usage: $oneline_usage
Try '$TODO_SH -h' for more information. Try '$TODO_SH -h' for more information.
EndUsage EndUsage
exit 1 exit 1
} }
shorthelp() shorthelp()
{ {
sed -e 's/^ //' <<EndHelp cat <<-EndHelp
Usage: $oneline_usage Usage: $oneline_usage
Actions: Actions:
@@ -63,13 +64,13 @@ shorthelp()
report report
See "help" for more details. See "help" for more details.
EndHelp EndHelp
exit 0 exit 0
} }
help() help()
{ {
sed -e 's/^ //' <<EndHelp cat <<-EndHelp
Usage: $oneline_usage Usage: $oneline_usage
Actions: Actions:
@@ -221,7 +222,7 @@ help()
TODOTXT_DEFAULT_ACTION="" run this when called with no arguments TODOTXT_DEFAULT_ACTION="" run this when called with no arguments
TODOTXT_SORT_COMMAND="sort ..." customize list output TODOTXT_SORT_COMMAND="sort ..." customize list output
TODOTXT_FINAL_FILTER="sed ..." customize list after color, P@+ hiding TODOTXT_FINAL_FILTER="sed ..." customize list after color, P@+ hiding
EndHelp EndHelp
if [ -d "$TODO_ACTIONS_DIR" ] if [ -d "$TODO_ACTIONS_DIR" ]
then then
@@ -258,8 +259,10 @@ cleaninput()
# Replace newlines with spaces Always # Replace newlines with spaces Always
input=`echo $input | tr -d '\r|\n'` input=`echo $input | tr -d '\r|\n'`
action_regexp="^\(append\|app\|prepend\|prep\|replace\)$"
# Check which action we are being used in as this affects what cleaning we do # Check which action we are being used in as this affects what cleaning we do
if [[ $action =~ ^(append|app|prepend|prep|replace)$ ]]; then if [ `echo $action | grep -c $action_regexp` -eq 1 ]; then
# These actions use sed and & as the matched string so escape it # These actions use sed and & as the matched string so escape it
input=`echo $input | sed 's/\&/\\\&/g'` input=`echo $input | sed 's/\&/\\\&/g'`
fi fi
@@ -276,6 +279,8 @@ archive()
sed -n 'G; s/\n/&&/; /^\([ ~-]*\n\).*\n\1/d; s/\n//; h; P' "$TMP_FILE" > "$TODO_FILE" sed -n 'G; s/\n/&&/; /^\([ ~-]*\n\).*\n\1/d; s/\n//; h; P' "$TMP_FILE" > "$TODO_FILE"
#[[ $TODOTXT_VERBOSE -gt 0 ]] && echo "TODO: Duplicate tasks have been removed." #[[ $TODOTXT_VERBOSE -gt 0 ]] && echo "TODO: Duplicate tasks have been removed."
[ $TODOTXT_VERBOSE -gt 0 ] && echo "TODO: $TODO_FILE archived." [ $TODOTXT_VERBOSE -gt 0 ] && echo "TODO: $TODO_FILE archived."
[ $TODOTXT_GIT_ENABLED -eq 1 ] && \
_commit "TODO: $TODO_FILE archived." $TODO_FILE $DONE_FILE
cleanup cleanup
} }
@@ -288,7 +293,7 @@ do
## HIDE_CONTEXT_NAMES starts at zero (false); increment it to one ## HIDE_CONTEXT_NAMES starts at zero (false); increment it to one
## (true) the first time this flag is seen. Each time the flag ## (true) the first time this flag is seen. Each time the flag
## is seen after that, increment it again so that an even ## is seen after that, increment it again so that an even
## number hides project names and an odd number shows project ## number shows context names and an odd number hides context
## names. ## names.
: $(( HIDE_CONTEXT_NAMES++ )) : $(( HIDE_CONTEXT_NAMES++ ))
if [ $(( $HIDE_CONTEXT_NAMES % 2 )) -eq 0 ] if [ $(( $HIDE_CONTEXT_NAMES % 2 )) -eq 0 ]
@@ -304,7 +309,7 @@ do
## HIDE_PROJECT_NAMES starts at zero (false); increment it to one ## HIDE_PROJECT_NAMES starts at zero (false); increment it to one
## (true) the first time this flag is seen. Each time the flag ## (true) the first time this flag is seen. Each time the flag
## is seen after that, increment it again so that an even ## is seen after that, increment it again so that an even
## number hides project names and an odd number shows project ## number shows project names and an odd number hides project
## names. ## names.
: $(( HIDE_PROJECT_NAMES++ )) : $(( HIDE_PROJECT_NAMES++ ))
if [ $(( $HIDE_PROJECT_NAMES % 2 )) -eq 0 ] if [ $(( $HIDE_PROJECT_NAMES % 2 )) -eq 0 ]
@@ -338,8 +343,8 @@ do
## HIDE_PRIORITY_LABELS starts at zero (false); increment it to one ## HIDE_PRIORITY_LABELS starts at zero (false); increment it to one
## (true) the first time this flag is seen. Each time the flag ## (true) the first time this flag is seen. Each time the flag
## is seen after that, increment it again so that an even ## is seen after that, increment it again so that an even
## number hides project names and an odd number shows project ## number shows priority labels and an odd number hides priority
## names. ## labels.
: $(( HIDE_PRIORITY_LABELS++ )) : $(( HIDE_PRIORITY_LABELS++ ))
if [ $(( $HIDE_PRIORITY_LABELS % 2 )) -eq 0 ] if [ $(( $HIDE_PRIORITY_LABELS % 2 )) -eq 0 ]
then then
@@ -377,6 +382,8 @@ TODOTXT_DATE_ON_ADD=${TODOTXT_DATE_ON_ADD:-0}
TODOTXT_DEFAULT_ACTION=${TODOTXT_DEFAULT_ACTION:-} TODOTXT_DEFAULT_ACTION=${TODOTXT_DEFAULT_ACTION:-}
TODOTXT_SORT_COMMAND=${TODOTXT_SORT_COMMAND:-env LC_COLLATE=C sort -f -k2} TODOTXT_SORT_COMMAND=${TODOTXT_SORT_COMMAND:-env LC_COLLATE=C sort -f -k2}
TODOTXT_FINAL_FILTER=${TODOTXT_FINAL_FILTER:-cat} TODOTXT_FINAL_FILTER=${TODOTXT_FINAL_FILTER:-cat}
TODOTXT_GIT_ENABLED=${TODOTXT_GIT_ENABLED:-1}
TODOTXT_GIT_VERBOSE=${TODOTXT_GIT_VERBOSE:-0}
# Export all TODOTXT_* variables # Export all TODOTXT_* variables
export ${!TODOTXT_@} export ${!TODOTXT_@}
@@ -467,6 +474,60 @@ fi
# === HEAVY LIFTING === # === HEAVY LIFTING ===
shopt -s extglob shopt -s extglob
_addto() {
file="$1"
input="$2"
cleaninput $input
if [[ $TODOTXT_DATE_ON_ADD = 1 ]]; then
now=`date '+%Y-%m-%d'`
input="$now $input"
fi
echo "$input" >> "$file"
( [ $TODOTXT_VERBOSE -gt 0 ] || [ $TODOTXT_GIT_ENABLED -eq 1 ] ) && {
TASKNUM=$(sed -n '$ =' "$file")
BASE=$(basename "$file")
PREFIX=$(echo ${BASE%%.[^.]*} | tr [a-z] [A-Z])
MESG="${PREFIX}: '$input' added on line $TASKNUM."
[ $TODOTXT_VERBOSE -gt 0 ] && \
echo $MESG
[ $TODOTXT_GIT_ENABLED -eq 1 ] && \
_commit "$MESG" $file
}
}
_commit() {
[ -z "$1" ] && die "Fatal Error: No commit message."
[ -z "$2" ] && die "Fatal Error: No commit files."
MESG="$(echo $1 | sed -e 's|\\n|\n|g')"
shift
FILES=$*
if [ $TODOTXT_GIT_VERBOSE -eq 0 ] ; then
( cd $TODO_DIR
for file in $FILES ; do
BASE=$(basename $file)
git add $BASE > /dev/null 2>&1
[ "$?" != 0 ] && die "Fatal Error: Git add $BASE failed."
done
git commit -m "$MESG" > /dev/null 2>&1
[ "$?" != 0 ] && die "Fatal Error: Git commit failed."
)
else
( cd $TODO_DIR
for file in $FILES ; do
BASE=$(basename $file)
git add $BASE
[ "$?" != 0 ] && die "Fatal Error: Git add $BASE failed."
done
git commit -m "$MESG"
[ "$?" != 0 ] && die "Fatal Error: Git commit failed."
)
fi
}
_list() { _list() {
local FILE="$1" local FILE="$1"
## If the file starts with a "/" use absolute path. Otherwise, ## If the file starts with a "/" use absolute path. Otherwise,
@@ -566,11 +627,13 @@ _list() {
echo -ne "$filtered_items${filtered_items:+\n}" echo -ne "$filtered_items${filtered_items:+\n}"
if [ $TODOTXT_VERBOSE -gt 0 ]; then if [ $TODOTXT_VERBOSE -gt 0 ]; then
BASE=$(basename "$FILE")
PREFIX=$(echo ${BASE%%.[^.]*} | tr [a-z] [A-Z])
NUMTASKS=$( echo -ne "$filtered_items" | sed -n '$ =' ) NUMTASKS=$( echo -ne "$filtered_items" | sed -n '$ =' )
TOTALTASKS=$( echo -ne "$items" | sed -n '$ =' ) TOTALTASKS=$( echo -ne "$items" | sed -n '$ =' )
echo "--" echo "--"
echo "TODO: ${NUMTASKS:-0} of ${TOTALTASKS:-0} tasks shown from $FILE" echo "${PREFIX}: ${NUMTASKS:-0} of ${TOTALTASKS:-0} tasks shown"
fi fi
if [ $TODOTXT_VERBOSE -gt 1 ] if [ $TODOTXT_VERBOSE -gt 1 ]
then then
@@ -610,15 +673,7 @@ case $action in
shift shift
input=$* input=$*
fi fi
cleaninput $input _addto "$TODO_FILE" "$input"
if [[ $TODOTXT_DATE_ON_ADD = 1 ]]; then
now=`date '+%Y-%m-%d'`
input="$now $input"
fi
echo "$input" >> "$TODO_FILE"
TASKNUM=$(sed -n '$ =' "$TODO_FILE")
[ $TODOTXT_VERBOSE -gt 0 ] && echo "TODO: '$input' added on line $TASKNUM."
cleanup;; cleanup;;
"addm") "addm")
@@ -638,13 +693,7 @@ case $action in
# Treat each line seperately # Treat each line seperately
for line in $input ; do for line in $input ; do
if [[ $TODOTXT_DATE_ON_ADD = 1 ]]; then _addto "$TODO_FILE" "$line"
now=`date '+%Y-%m-%d'`
line="$now $line"
fi
echo "$line" >> "$TODO_FILE"
TASKNUM=$(sed -n '$ =' "$TODO_FILE")
[ $TODOTXT_VERBOSE -gt 0 ] && echo "TODO: '$line' added on line $TASKNUM."
done done
IFS=$SAVEIFS IFS=$SAVEIFS
cleanup;; cleanup;;
@@ -658,9 +707,7 @@ case $action in
input=$* input=$*
if [ -f "$dest" ]; then if [ -f "$dest" ]; then
echo "$input" >> "$dest" _addto "$dest" "$input"
TASKNUM=$(sed -n '$ =' "$dest")
[ $TODOTXT_VERBOSE -gt 0 ] && echo "TODO: '$input' added to $dest on line $TASKNUM."
else else
echo "TODO: Destination file $dest does not exist." echo "TODO: Destination file $dest does not exist."
fi fi
@@ -683,8 +730,13 @@ case $action in
cleaninput $input cleaninput $input
if sed -i.bak $item" s|^.*|& $input|" "$TODO_FILE"; then if sed -i.bak $item" s|^.*|& $input|" "$TODO_FILE"; then
[ $TODOTXT_VERBOSE -gt 0 ] && {
newtodo=$(sed "$item!d" "$TODO_FILE") newtodo=$(sed "$item!d" "$TODO_FILE")
[ $TODOTXT_VERBOSE -gt 0 ] && echo "$item: $newtodo" echo "$item: $newtodo"
}
[ $TODOTXT_GIT_ENABLED -eq 1 ] && \
_commit "TODO: Appended '$todo' w/ '$input' on line $item." \
$TODO_FILE
else else
echo "TODO: Error appending task $item." echo "TODO: Error appending task $item."
fi fi
@@ -693,6 +745,15 @@ case $action in
"archive" ) "archive" )
archive;; archive;;
"commit" )
[ -z "$2" ] && die "usage: $TODO_SH commit MESSAGE"
shift
MESG=$*
( cd $TODO_DIR
git commit -a -m "$MESG"
);;
"del" | "rm" ) "del" | "rm" )
# replace deleted line with a blank line when TODOTXT_PRESERVE_LINE_NUMBERS is 1 # replace deleted line with a blank line when TODOTXT_PRESERVE_LINE_NUMBERS is 1
errmsg="usage: $TODO_SH del ITEM#" errmsg="usage: $TODO_SH del ITEM#"
@@ -720,6 +781,8 @@ case $action in
sed -i.bak -e $item"s/^.*//" "$TODO_FILE" sed -i.bak -e $item"s/^.*//" "$TODO_FILE"
fi fi
[ $TODOTXT_VERBOSE -gt 0 ] && echo "TODO: '$DELETEME' deleted." [ $TODOTXT_VERBOSE -gt 0 ] && echo "TODO: '$DELETEME' deleted."
[ $TODOTXT_GIT_ENABLED -eq 1 ] && \
_commit "TODO: '$DELETEME' deleted." $TODO_FILE
cleanup cleanup
else else
echo "TODO: No tasks were deleted." echo "TODO: No tasks were deleted."
@@ -730,6 +793,8 @@ case $action in
else else
sed -i.bak -e $item"s/$3/ /g" "$TODO_FILE" sed -i.bak -e $item"s/$3/ /g" "$TODO_FILE"
[ $TODOTXT_VERBOSE -gt 0 ] && echo "TODO: $3 removed from $item." [ $TODOTXT_VERBOSE -gt 0 ] && echo "TODO: $3 removed from $item."
[ $TODOTXT_GIT_ENABLED -eq 1 ] && \
_commit "TODO: $3 removed from $item." $TODO_FILE
fi ;; fi ;;
"depri" | "dp" ) "depri" | "dp" )
@@ -745,9 +810,13 @@ case $action in
if [ "$?" -eq 0 ]; then if [ "$?" -eq 0 ]; then
#it's all good, continue #it's all good, continue
sed -i.bak -e $item"s/^(.) //" "$TODO_FILE" sed -i.bak -e $item"s/^(.) //" "$TODO_FILE"
[ $TODOTXT_VERBOSE -gt 0 ] && {
NEWTODO=$(sed "$item!d" "$TODO_FILE") NEWTODO=$(sed "$item!d" "$TODO_FILE")
[ $TODOTXT_VERBOSE -gt 0 ] && echo "`echo "$item: $NEWTODO"`" echo "`echo "$item: $NEWTODO"`"
[ $TODOTXT_VERBOSE -gt 0 ] && echo "TODO: $item deprioritized." echo "TODO: $item deprioritized."
}
[ $TODOTXT_GIT_ENABLED -eq 1 ] && \
_commit "TODO: '$todo' deprioritized." $TODO_FILE
cleanup cleanup
else else
die "$errmsg" die "$errmsg"
@@ -773,9 +842,13 @@ case $action in
# remove priority once item is done # remove priority once item is done
sed -i.bak $item"s/^(.) //" "$TODO_FILE" sed -i.bak $item"s/^(.) //" "$TODO_FILE"
sed -i.bak $item"s|^|&x $now |" "$TODO_FILE" sed -i.bak $item"s|^|&x $now |" "$TODO_FILE"
[ $TODOTXT_VERBOSE -gt 0 ] && {
newtodo=$(sed "$item!d" "$TODO_FILE") newtodo=$(sed "$item!d" "$TODO_FILE")
[ $TODOTXT_VERBOSE -gt 0 ] && echo "$item: $newtodo" echo "$item: $newtodo"
[ $TODOTXT_VERBOSE -gt 0 ] && echo "TODO: $item marked as done." echo "TODO: $item marked as done."
}
[ $TODOTXT_GIT_ENABLED -eq 1 ] && \
_commit "TODO: '$todo' marked as done." $TODO_FILE
else else
echo "$item is already marked done" echo "$item is already marked done"
fi fi
@@ -786,6 +859,28 @@ case $action in
fi fi
cleanup ;; cleanup ;;
"done" )
if [[ -z "$2" && $TODOTXT_FORCE = 0 ]]; then
echo -n "Done: "
read input
else
[ -z "$2" ] && die "usage: $TODO_SH done \"TODO ITEM\""
shift
input=$*
fi
now=`date '+%Y-%m-%d'`
# remove priority once item is done
newtodo=$(sed -e "s/^(.) // ; s|^|&x $now |" <<<${input})
echo "$newtodo" >> "$DONE_FILE"
[ $TODOTXT_VERBOSE -gt 0 ] && {
echo "TODO: '$input' marked as done."
}
[ $TODOTXT_GIT_ENABLED -eq 1 ] && \
_commit "TODO: '$input' marked as done." $DONE_FILE
cleanup;;
"help" ) "help" )
if [ -t 1 ] ; then # STDOUT is a TTY if [ -t 1 ] ; then # STDOUT is a TTY
if (exec which ${PAGER:-less} 2>/dev/null >/dev/null); then if (exec which ${PAGER:-less} 2>/dev/null >/dev/null); then
@@ -850,6 +945,11 @@ case $action in
_list "$TODO_FILE" "$pri" _list "$TODO_FILE" "$pri"
;; ;;
"log" | "pull" | "push" )
( cd $TODO_DIR
git $action
);;
"move" | "mv" ) "move" | "mv" )
# replace moved line with a blank line when TODOTXT_PRESERVE_LINE_NUMBERS is 1 # replace moved line with a blank line when TODOTXT_PRESERVE_LINE_NUMBERS is 1
errmsg="usage: $TODO_SH mv ITEM# DEST [SRC]" errmsg="usage: $TODO_SH mv ITEM# DEST [SRC]"
@@ -884,6 +984,9 @@ case $action in
echo "$MOVEME" >> "$dest" echo "$MOVEME" >> "$dest"
[ $TODOTXT_VERBOSE -gt 0 ] && echo "TODO: '$MOVEME' moved from '$src' to '$dest'." [ $TODOTXT_VERBOSE -gt 0 ] && echo "TODO: '$MOVEME' moved from '$src' to '$dest'."
[ $TODOTXT_GIT_ENABLED -eq 1 ] && \
_commit "TODO: '$MOVEME' moved from '$src' to '$dest'." \
$src $dest
cleanup cleanup
else else
echo "TODO: No tasks moved." echo "TODO: No tasks moved."
@@ -925,16 +1028,26 @@ case $action in
# If priority isn't set prepend # If priority isn't set prepend
if [ -z $priority ]; then if [ -z $priority ]; then
if sed -i.bak $item" s|^.*|$input &|" "$TODO_FILE"; then if sed -i.bak $item" s|^.*|$input &|" "$TODO_FILE"; then
[ $TODOTXT_VERBOSE -gt 0 ] && {
newtodo=$(sed "$item!d" "$TODO_FILE") newtodo=$(sed "$item!d" "$TODO_FILE")
[ $TODOTXT_VERBOSE -gt 0 ] && echo "$item: $newtodo" echo "$item: $newtodo"
}
[ $TODOTXT_GIT_ENABLED -eq 1 ] && \
_commit "TODO: Prepended '$todo' w/ '$input' on line $item." \
$TODO_FILE
else else
echo "TODO: Error prepending task $item." echo "TODO: Error prepending task $item."
fi fi
# If priority is set, remove priority, prepend and add back priority # If priority is set, remove priority, prepend and add back priority
else else
if sed -i.bak -e "$item s/^(.) //" -e "$item s|^.*|\($priority\) $1 &|" "$TODO_FILE"; then if sed -i.bak -e "$item s/^(.) //" -e "$item s|^.*|\($priority\) $1 &|" "$TODO_FILE"; then
[ $TODOTXT_VERBOSE -gt 0 ] && {
newtodo=$(sed "$item!d" "$TODO_FILE") newtodo=$(sed "$item!d" "$TODO_FILE")
[ $TODOTXT_VERBOSE -gt 0 ] && echo "$item: $newtodo" echo "$item: $newtodo"
}
[ $TODOTXT_GIT_ENABLED -eq 1 ] && \
_commit "TODO: Prepended '$todo' w/ '$input' on line $item." \
$TODO_FILE
else else
echo "TODO: Error prepending task $item." echo "TODO: Error prepending task $item."
fi fi
@@ -957,9 +1070,13 @@ note: PRIORITY must be anywhere from A to Z."
if [ "$?" -eq 0 ]; then if [ "$?" -eq 0 ]; then
#it's all good, continue #it's all good, continue
sed -i.bak -e $item"s/^(.) //" -e $item"s/^/($newpri) /" "$TODO_FILE" sed -i.bak -e $item"s/^(.) //" -e $item"s/^/($newpri) /" "$TODO_FILE"
[ $TODOTXT_VERBOSE -gt 0 ] && {
NEWTODO=$(sed "$item!d" "$TODO_FILE") NEWTODO=$(sed "$item!d" "$TODO_FILE")
[ $TODOTXT_VERBOSE -gt 0 ] && echo "`echo "$item: $NEWTODO"`" echo "`echo "$item: $NEWTODO"`"
[ $TODOTXT_VERBOSE -gt 0 ] && echo "TODO: $item prioritized ($newpri)." echo "TODO: $item prioritized ($newpri)."
}
[ $TODOTXT_GIT_ENABLED -eq 1 ] && \
_commit "TODO: $item prioritized ($newpri)." $TODO_FILE
cleanup cleanup
else else
die "$errmsg" die "$errmsg"
@@ -994,10 +1111,14 @@ note: PRIORITY must be anywhere from A to Z."
else else
sed -i.bak -e "$item s/^(.) //" -e "$item s|^.*|\($priority\) $1|" "$TODO_FILE" sed -i.bak -e "$item s/^(.) //" -e "$item s|^.*|\($priority\) $1|" "$TODO_FILE"
fi fi
[ $TODOTXT_VERBOSE -gt 0 ] && NEWTODO=$(head -$item "$TODO_FILE" | tail -1) NEWTODO=$(head -$item "$TODO_FILE" | tail -1)
[ $TODOTXT_VERBOSE -gt 0 ] && echo "$item: $todo" [ $TODOTXT_VERBOSE -gt 0 ] && {
[ $TODOTXT_VERBOSE -gt 0 ] && echo "replaced with" echo "$item: $todo"
[ $TODOTXT_VERBOSE -gt 0 ] && echo "$item: $NEWTODO" echo "replaced with"
echo "$item: $NEWTODO"
}
[ $TODOTXT_GIT_ENABLED -eq 1 ] && \
_commit "$item: $todo\nreplaced with\n$item: $NEWTODO" $TODO_FILE
cleanup;; cleanup;;
"report" ) "report" )
@@ -1016,6 +1137,8 @@ note: PRIORITY must be anywhere from A to Z."
echo ${TDONE:-0}) echo ${TDONE:-0})
echo $TECHO >> "$REPORT_FILE" echo $TECHO >> "$REPORT_FILE"
[ $TODOTXT_VERBOSE -gt 0 ] && echo "TODO: Report file updated." [ $TODOTXT_VERBOSE -gt 0 ] && echo "TODO: Report file updated."
[ $TODOTXT_GIT_ENABLED -eq 1 ] && \
_commit "TODO: Report file updated." $REPORT_FILE
cat "$REPORT_FILE" cat "$REPORT_FILE"
cleanup;; cleanup;;