Compare commits

..

1 Commits

Author SHA1 Message Date
Ingo Karkat
99dc4dce9f Simplified check for done task.
Use simple comparison with slice of string (already used e.g. in _list()) instead of grep -c pipeline.
2011-05-12 14:17:05 +02:00
5 changed files with 37 additions and 159 deletions

View File

@@ -77,37 +77,4 @@ TODO: 5 added.
TODO: 5 of 5 tasks shown
EOF
#
# Advanced add
#
cat /dev/null > todo.txt
test_todo_session 'add with spaces' <<EOF
>>> todo.sh add "notice the three spaces"
1 notice the three spaces
TODO: 1 added.
>>> todo.sh add notice how the spaces get lost
2 notice how the spaces get lost
TODO: 2 added.
>>> todo.sh list
2 notice how the spaces get lost
1 notice the three spaces
--
TODO: 2 of 2 tasks shown
EOF
cat /dev/null > todo.txt
test_todo_session 'add with CR' <<EOF
>>> todo.sh add "smell the
Carriage Return"
1 smell the Carriage Return
TODO: 1 added.
>>> todo.sh list
1 smell the Carriage Return
--
TODO: 1 of 1 tasks shown
EOF
test_done

View File

@@ -45,12 +45,6 @@ grow some corn
thrash some hay
chase the chickens
EOF
test_todo_session 'replace error' << EOF
>>> todo.sh replace 10 "hej!"
=== 1
TODO: No task 10.
EOF
test_todo_session 'replace in multi-item file' <<EOF
>>> todo.sh replace 1 smell the cheese
1 smell the cows
@@ -68,59 +62,33 @@ TODO: Replaced task with:
4 collect the eggs
EOF
echo '(A) collect the eggs' > todo.txt
test_todo_session 'replace with priority' <<EOF
>>> todo.sh replace 1 "collect the bread"
1 (A) collect the eggs
TODO: Replaced task with:
1 (A) collect the bread
>>> todo.sh pri 4 a
4 (A) collect the eggs
TODO: 4 prioritized (A).
>>> todo.sh replace 1 collect the eggs
1 (A) collect the bread
>>> todo.sh replace 4 "collect the bread"
4 (A) collect the eggs
TODO: Replaced task with:
1 (A) collect the eggs
4 (A) collect the bread
>>> todo.sh replace 4 collect the eggs
4 (A) collect the bread
TODO: Replaced task with:
4 (A) collect the eggs
EOF
echo 'jump on hay' > todo.txt
test_todo_session 'replace with &' << EOF
>>> todo.sh replace 1 "thrash the hay & thrash the wheat"
1 jump on hay
>>> todo.sh replace 3 "thrash the hay & thresh the wheat"
3 jump on hay
TODO: Replaced task with:
1 thrash the hay & thrash the wheat
3 thrash the hay & thresh the wheat
EOF
echo 'jump on hay' > todo.txt
test_todo_session 'replace with spaces' <<EOF
>>> todo.sh replace 1 "notice the three spaces"
1 jump on hay
TODO: Replaced task with:
1 notice the three spaces
EOF
cat > todo.txt <<EOF
smell the cows
grow some corn
thrash some hay
chase the chickens
EOF
test_todo_session 'replace with symbols' <<EOF
>>> todo.sh replace 1 "~@#$%^&*()-_=+[{]}|;:',<.>/?"
1 smell the cows
TODO: Replaced task with:
1 ~@#$%^&*()-_=+[{]}|;:',<.>/?
>>> todo.sh replace 2 '\`!\\"'
2 grow some corn
TODO: Replaced task with:
2 \`!\\"
>>> todo.sh list
4 chase the chickens
3 thrash some hay
2 \`!\\"
1 ~@#$%^&*()-_=+[{]}|;:',<.>/?
--
TODO: 4 of 4 tasks shown
test_todo_session 'replace error' << EOF
>>> todo.sh replace 10 "hej!"
=== 1
TODO: No task 10.
EOF
cat /dev/null > todo.txt
@@ -156,7 +124,6 @@ TODO: Replaced task with:
1 (A) 2009-02-13 this is just a new one
EOF
echo '(A) 2009-02-13 this is just a new one' > todo.txt
test_todo_session 'replace with prepended date replaces existing date' <<EOF
>>> todo.sh replace 1 2010-07-04 this also has a new date
1 (A) 2009-02-13 this is just a new one

View File

@@ -57,34 +57,6 @@ test_todo_session 'prepend with &' <<EOF
3 no running & jumping now stop
EOF
echo 'jump on hay' > todo.txt
test_todo_session 'prepend with spaces' <<EOF
>>> todo.sh prepend 1 "notice the three spaces and"
1 notice the three spaces and jump on hay
EOF
cat > todo.txt <<EOF
smell the cows
grow some corn
thrash some hay
chase the chickens
EOF
test_todo_session 'prepend with symbols' <<EOF
>>> todo.sh prepend 1 "~@#$%^&*()-_=+[{]}|;:',<.>/?"
1 ~@#$%^&*()-_=+[{]}|;:',<.>/? smell the cows
>>> todo.sh prepend 2 '\`!\\"'
2 \`!\\" grow some corn
>>> todo.sh list
4 chase the chickens
3 thrash some hay
2 \`!\\" grow some corn
1 ~@#$%^&*()-_=+[{]}|;:',<.>/? smell the cows
--
TODO: 4 of 4 tasks shown
EOF
cat /dev/null > todo.txt
test_todo_session 'prepend handling prepended date on add' <<EOF
>>> todo.sh -t add "new task"

View File

@@ -17,12 +17,6 @@ test_todo_session 'append usage' <<EOF
usage: todo.sh append ITEM# "TEXT TO APPEND"
EOF
test_todo_session 'append error' << EOF
>>> todo.sh append 10 "hej!"
=== 1
TODO: No task 10.
EOF
test_todo_session 'basic append' <<EOF
>>> todo.sh append 1 "smell the roses"
1 notice the daisies smell the roses
@@ -43,32 +37,11 @@ test_todo_session 'basic append with &' <<EOF
TODO: 1 of 1 tasks shown
EOF
echo 'jump on hay' > todo.txt
test_todo_session 'append with spaces' <<EOF
>>> todo.sh append 1 "and notice the three spaces"
1 jump on hay and notice the three spaces
EOF
cat > todo.txt <<EOF
smell the cows
grow some corn
thrash some hay
chase the chickens
EOF
test_todo_session 'append with symbols' <<EOF
>>> todo.sh append 1 "~@#$%^&*()-_=+[{]}|;:',<.>/?"
1 smell the cows ~@#$%^&*()-_=+[{]}|;:',<.>/?
>>> todo.sh append 2 '\`!\\"'
2 grow some corn \`!\\"
>>> todo.sh list
4 chase the chickens
2 grow some corn \`!\\"
1 smell the cows ~@#$%^&*()-_=+[{]}|;:',<.>/?
3 thrash some hay
--
TODO: 4 of 4 tasks shown
test_todo_session 'append error' << EOF
>>> todo.sh append 10 "hej!"
=== 1
TODO: No task 10.
EOF
cat > todo.txt <<EOF

31
todo.sh
View File

@@ -1,7 +1,7 @@
#! /bin/bash
# === HEAVY LIFTING ===
shopt -s extglob extquote
shopt -s extglob
# NOTE: Todo.sh requires the .todo/config configuration file to run.
# Place the .todo/config file in your home directory or use the -d option for a custom location.
@@ -267,17 +267,16 @@ cleanup()
cleaninput()
{
# Replace CR and LF with space; tasks always comprise a single line.
input=${input//$'\r'/ }
input=${input//$'\n'/ }
# Cleanup the input
# Replace newlines with spaces Always
input=`echo $input | tr -d '\r\n'`
if [ "$1" = "for sed" ]; then
# This action uses sed with "|" as the substitution separator, and & as
# the matched string; these must be escaped.
# Backslashes must be escaped, too, and before the other stuff.
input=${input//\\/\\\\}
input=${input//|/\\|}
input=${input//&/\\&}
action_regexp="^\(append\|app\|prepend\|prep\|replace\)$"
# Check which action we are being used in as this affects what cleaning we do
if [ `echo $action | grep -c $action_regexp` -eq 1 ]; then
# These actions use sed and & as the matched string so escape it
input=`echo $input | sed 's/\&/\\\&/g'`
fi
}
@@ -322,7 +321,7 @@ replaceOrPrepend()
else
input=$*
fi
cleaninput "for sed"
cleaninput $input
# Retrieve existing priority and prepended date
priority=$(sed -e "$item!d" -e $item's/^\(([A-Z]) \)\{0,1\}\([0-9]\{2,4\}-[0-9]\{2\}-[0-9]\{2\} \)\{0,1\}.*/\1/' "$TODO_FILE")
@@ -616,7 +615,7 @@ fi
_addto() {
file="$1"
input="$2"
cleaninput
cleaninput $input
if [[ $TODOTXT_DATE_ON_ADD = 1 ]]; then
now=`date '+%Y-%m-%d'`
@@ -751,7 +750,7 @@ _list() {
fi
}
export -f cleaninput _list die
export -f _list die
# == HANDLE ACTION ==
action=$( printf "%s\n" "$ACTION" | tr 'A-Z' 'a-z' )
@@ -843,7 +842,7 @@ case $action in
[$SENTENCE_DELIMITERS]*) appendspace=;;
*) appendspace=" ";;
esac
cleaninput "for sed"
cleaninput $input
if sed -i.bak $item" s|^.*|&${appendspace}${input}|" "$TODO_FILE"; then
if [ $TODOTXT_VERBOSE -gt 0 ]; then
@@ -954,7 +953,7 @@ case $action in
[ -z "$todo" ] && die "TODO: No task $item."
# Check if this item has already been done
if [ `echo $todo | grep -c "^x "` -eq 0 ] ; then
if [ "${todo:0:2}" != "x " ]; then
now=`date '+%Y-%m-%d'`
# remove priority once item is done
sed -i.bak $item"s/^(.) //" "$TODO_FILE"