Issue fix: Multiple do items

Can now do multiple items in one go.
Either comma seperated list or a whitespace seperated list
This commit is contained in:
Paul Mansfield
2009-06-25 00:14:00 +01:00
parent 5df58793a0
commit 91126e38aa
2 changed files with 91 additions and 14 deletions

72
tests/t1500-do.sh Executable file
View File

@@ -0,0 +1,72 @@
#!/bin/sh
test_description='do functionality
'
. ./test-lib.sh
#DATE=`date '+%Y-%m-%d'`
test_todo_session 'do usage' <<EOF
>>> todo.sh do B B
usage: todo.sh do ITEM#
=== 1
EOF
cat > todo.txt <<EOF
smell the uppercase Roses +flowers @outside
notice the sunflowers
stop
remove1
remove2
remove3
remove4
EOF
test_todo_session 'basic do' <<EOF
>>> 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

33
todo.sh
View File

@@ -675,27 +675,32 @@ case $action in
"do" ) "do" )
errmsg="usage: $TODO_SH do ITEM#" errmsg="usage: $TODO_SH do ITEM#"
item=$2 # shift so we get arguments to the do request
[ -z "$item" ] && die "$errmsg" shift;
[[ "$item" = +([0-9]) ]] || die "$errmsg"
todo=$(sed "$item!d" "$TODO_FILE") # Split multiple do's, if comma seperated change to whitespace sepereated
[ -z "$todo" ] && die "$item: No such todo." # Loop the 'do' function for each item
for item in `echo $* | tr ',' ' '`; do
now=`date '+%Y-%m-%d'` [ -z "$item" ] && die "$errmsg"
# remove priority once item is done [[ "$item" = +([0-9]) ]] || die "$errmsg"
sed -i.bak $item"s/^(.) //" "$TODO_FILE"
sed -i.bak $item"s|^|&x $now |" "$TODO_FILE" todo=$(sed "$item!d" "$TODO_FILE")
newtodo=$(sed "$item!d" "$TODO_FILE") [ -z "$todo" ] && die "$item: No such todo."
[ $TODOTXT_VERBOSE -gt 0 ] && echo "$item: $newtodo"
[ $TODOTXT_VERBOSE -gt 0 ] && echo "TODO: $item marked as done."
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 if [ $TODOTXT_AUTO_ARCHIVE = 1 ]; then
archive archive
fi fi
cleanup ;; cleanup ;;
"help" ) "help" )
help help
;; ;;