diff --git a/tests/t1100-replace.sh b/tests/t1100-replace.sh index d3e32d3..ecec0db 100755 --- a/tests/t1100-replace.sh +++ b/tests/t1100-replace.sh @@ -62,6 +62,17 @@ replaced with 4: collect the eggs EOF +test_todo_session 'replace with priority' <>> todo.sh pri 4 a +4: (A) collect the eggs +TODO: 4 prioritized (A). + +>>> todo.sh replace 4 "collect the bread" +4: (A) collect the eggs +replaced with +4: (A) collect the bread +EOF + test_todo_session 'replace error' << EOF >>> todo.sh replace 10 "hej!" === 1 diff --git a/tests/t1400-prepend.sh b/tests/t1400-prepend.sh new file mode 100755 index 0000000..50610df --- /dev/null +++ b/tests/t1400-prepend.sh @@ -0,0 +1,55 @@ +#!/bin/sh + +test_description='basic prepend functionality +' +. ./test-lib.sh + +test_todo_session 'prepend usage' <>> todo.sh prepend B B +usage: todo.sh prepend ITEM# "TEXT TO PREPEND" +=== 1 +EOF + +cat > todo.txt <>> todo.sh list +1 (B) smell the uppercase Roses +flowers @outside +2 notice the sunflowers +3 stop +-- +TODO: 3 of 3 tasks shown from $HOME/todo.txt + +>>> todo.sh -p list +1 (B) smell the uppercase Roses +flowers @outside +2 notice the sunflowers +3 stop +-- +TODO: 3 of 3 tasks shown from $HOME/todo.txt + +>>> todo.sh prepend 2 test +2: test notice the sunflowers + +>>> todo.sh -p list +1 (B) smell the uppercase Roses +flowers @outside +3 stop +2 test notice the sunflowers +-- +TODO: 3 of 3 tasks shown from $HOME/todo.txt + +>>> todo.sh prepend 1 test +1: (B) test smell the uppercase Roses +flowers @outside + +>>> todo.sh -p list +1 (B) test smell the uppercase Roses +flowers @outside +3 stop +2 test notice the sunflowers +-- +TODO: 3 of 3 tasks shown from $HOME/todo.txt + +EOF + +test_done diff --git a/tests/t1500-do.sh b/tests/t1500-do.sh new file mode 100755 index 0000000..c9b9a76 --- /dev/null +++ b/tests/t1500-do.sh @@ -0,0 +1,72 @@ +#!/bin/sh + +test_description='do functionality +' +. ./test-lib.sh + +#DATE=`date '+%Y-%m-%d'` + +test_todo_session 'do usage' <>> todo.sh do B B +usage: todo.sh do ITEM# +=== 1 +EOF + +cat > todo.txt <>> todo.sh list +2 notice the sunflowers +4 remove1 +5 remove2 +6 remove3 +7 remove4 +1 smell the uppercase Roses +flowers @outside +3 stop +-- +TODO: 7 of 7 tasks shown from $HOME/todo.txt + +>>> todo.sh do 7,6 +7: x 2009-02-13 remove4 +TODO: 7 marked as done. +6: x 2009-02-13 remove3 +TODO: 6 marked as done. +x 2009-02-13 remove3 +x 2009-02-13 remove4 +TODO: $HOME/todo.txt archived. + +>>> todo.sh -p list +2 notice the sunflowers +4 remove1 +5 remove2 +1 smell the uppercase Roses +flowers @outside +3 stop +-- +TODO: 5 of 5 tasks shown from $HOME/todo.txt + +>>> todo.sh do 5 4 +5: x 2009-02-13 remove2 +TODO: 5 marked as done. +4: x 2009-02-13 remove1 +TODO: 4 marked as done. +x 2009-02-13 remove1 +x 2009-02-13 remove2 +TODO: $HOME/todo.txt archived. + +>>> todo.sh -p list +2 notice the sunflowers +1 smell the uppercase Roses +flowers @outside +3 stop +-- +TODO: 3 of 3 tasks shown from $HOME/todo.txt +EOF + +test_done diff --git a/todo.sh b/todo.sh index 553c95b..060e185 100755 --- a/todo.sh +++ b/todo.sh @@ -675,21 +675,27 @@ case $action in "do" ) errmsg="usage: $TODO_SH do ITEM#" - item=$2 - [ -z "$item" ] && die "$errmsg" - [[ "$item" = +([0-9]) ]] || die "$errmsg" + # shift so we get arguments to the do request + shift; - todo=$(sed "$item!d" "$TODO_FILE") - [ -z "$todo" ] && die "$item: No such todo." - - now=`date '+%Y-%m-%d'` - # remove priority once item is done - sed -i.bak $item"s/^(.) //" "$TODO_FILE" - sed -i.bak $item"s|^|&x $now |" "$TODO_FILE" - newtodo=$(sed "$item!d" "$TODO_FILE") - [ $TODOTXT_VERBOSE -gt 0 ] && echo "$item: $newtodo" - [ $TODOTXT_VERBOSE -gt 0 ] && echo "TODO: $item marked as done." + # Split multiple do's, if comma seperated change to whitespace sepereated + # Loop the 'do' function for each item + for item in `echo $* | tr ',' ' '`; do + [ -z "$item" ] && die "$errmsg" + [[ "$item" = +([0-9]) ]] || die "$errmsg" + + todo=$(sed "$item!d" "$TODO_FILE") + [ -z "$todo" ] && die "$item: No such todo." + now=`date '+%Y-%m-%d'` + # remove priority once item is done + sed -i.bak $item"s/^(.) //" "$TODO_FILE" + sed -i.bak $item"s|^|&x $now |" "$TODO_FILE" + newtodo=$(sed "$item!d" "$TODO_FILE") + [ $TODOTXT_VERBOSE -gt 0 ] && echo "$item: $newtodo" + [ $TODOTXT_VERBOSE -gt 0 ] && echo "TODO: $item marked as done." + done + if [ $TODOTXT_AUTO_ARCHIVE = 1 ]; then archive fi @@ -818,13 +824,29 @@ case $action in else input=$* fi + + # Test for then set priority + if [ `sed "$item!d" "$TODO_FILE"|grep -c "^(\\w)"` -eq 1 ]; then + priority=$(sed "$item!d" "$TODO_FILE" | awk -F '\\(|\\)' '{print $2}') + fi - if sed -i.bak $item" s|^.*|$input &|" "$TODO_FILE"; then - newtodo=$(sed "$item!d" "$TODO_FILE") + # If priority isn't set prepend + if [ -z $priority ]; then + if sed -i.bak $item" s|^.*|$input &|" "$TODO_FILE"; then + newtodo=$(sed "$item!d" "$TODO_FILE") [ $TODOTXT_VERBOSE -gt 0 ] && echo "$item: $newtodo" - else - echo "TODO: Error prepending task $item." - fi + else + echo "TODO: Error prepending task $item." + fi + # If priority is set, remove priority, prepend and add back priority + else + if sed -i.bak -e "$item s/^(.) //" -e "$item s|^.*|\($priority\) $1 &|" "$TODO_FILE"; then + newtodo=$(sed "$item!d" "$TODO_FILE") + [ $TODOTXT_VERBOSE -gt 0 ] && echo "$item: $newtodo" + else + echo "TODO: Error prepending task $item." + fi + fi cleanup;; "pri" | "p" ) @@ -861,6 +883,11 @@ note: PRIORITY must be anywhere from A to Z." todo=$(sed "$item!d" "$TODO_FILE") [ -z "$todo" ] && die "$item: No such todo." + # Test for then set priority + if [ `sed "$item!d" "$TODO_FILE"|grep -c "^(\\w)"` -eq 1 ]; then + priority=$(sed "$item!d" "$TODO_FILE" | awk -F '\\(|\\)' '{print $2}') + fi + if [[ -z "$1" && $TODOTXT_FORCE = 0 ]]; then echo -n "Replacement: " read input @@ -868,7 +895,12 @@ note: PRIORITY must be anywhere from A to Z." input=$* fi - sed -i.bak $item" s|^.*|$input|" "$TODO_FILE" + # If priority isn't set replace, if it is remove priority, replace then add priority again + if [ -z $priority ]; then + sed -i.bak $item" s|^.*|$input|" "$TODO_FILE" + else + sed -i.bak -e "$item s/^(.) //" -e "$item s|^.*|\($priority\) $1|" "$TODO_FILE" + fi [ $TODOTXT_VERBOSE -gt 0 ] && NEWTODO=$(head -$item "$TODO_FILE" | tail -1) [ $TODOTXT_VERBOSE -gt 0 ] && echo "$item: $todo" [ $TODOTXT_VERBOSE -gt 0 ] && echo "replaced with"