Compare commits

..

3 Commits

Author SHA1 Message Date
Ingo Karkat
f45bbd1a1d Minor: Move cleaninput call closer to sed command. 2012-04-19 14:19:30 +02:00
Ingo Karkat
e0b93e48fb Refactoring: Extract duplicated regexp for priority and date. 2012-04-19 14:12:35 +02:00
Ingo Karkat
24d0fb003a FIX: Replacement with priority and date doesn't replace existing date. 2012-04-19 14:08:39 +02:00
3 changed files with 27 additions and 37 deletions

View File

@@ -164,4 +164,12 @@ TODO: Replaced task with:
1 (A) 2010-07-04 this also has a new date
EOF
echo '2009-02-13 this is just a new one' > todo.txt
test_todo_session 'replace with prepended priority and date replaces existing date' <<EOF
>>> todo.sh replace 1 '(B) 2010-07-04 this also has a new date'
1 2009-02-13 this is just a new one
TODO: Replaced task with:
1 (B) 2010-07-04 this also has a new date
EOF
test_done

View File

@@ -55,16 +55,6 @@ test_todo_session 'listcon e-mail address test' <<EOF
@con02
EOF
cat > todo.txt <<EOF
(B) smell the uppercase Roses +roses @outside +shared
(C) notice the sunflowers +sunflowers @garden +shared +landscape
stop
EOF
test_todo_session 'listcon with project' <<EOF
>>> todo.sh listcon +landscape
@garden
EOF
cat > todo.txt <<EOF
@con01 -- Some context 1 task
EOF

46
todo.sh
View File

@@ -58,7 +58,7 @@ shorthelp()
list|ls [TERM...]
listall|lsa [TERM...]
listaddons
listcon|lsc [TERM...]
listcon|lsc
listfile|lf [SRC [TERM...]]
listpri|lsp [PRIORITIES] [TERM...]
listproj|lsprj [TERM...]
@@ -223,10 +223,9 @@ help()
listaddons
Lists all added and overridden actions in the actions directory.
listcon [TERM...]
lsc [TERM...]
listcon
lsc
Lists all the task contexts that start with the @ sign in todo.txt.
If TERM specified, considers only tasks that contain TERM(s).
listfile [SRC [TERM...]]
lf [SRC [TERM...]]
@@ -246,11 +245,10 @@ help()
Hides all tasks that contain TERM(s) preceded by a minus sign
(i.e. -TERM).
listproj [TERM...]
lsprj [TERM...]
listproj
lsprj
Lists all the projects (terms that start with a + sign) in
todo.txt.
If TERM specified, considers only tasks that contain TERM(s).
move ITEM# DEST [SRC]
mv ITEM# DEST [SRC]
@@ -391,21 +389,22 @@ replaceOrPrepend()
else
input=$*
fi
cleaninput "for sed"
# Retrieve existing priority and prepended date
priority=$(sed -e "$item!d" -e $item's/^\((.) \)\{0,1\}\([0-9]\{2,4\}-[0-9]\{2\}-[0-9]\{2\} \)\{0,1\}.*/\1/' "$TODO_FILE")
prepdate=$(sed -e "$item!d" -e $item's/^\((.) \)\{0,1\}\([0-9]\{2,4\}-[0-9]\{2\}-[0-9]\{2\} \)\{0,1\}.*/\2/' "$TODO_FILE")
local -r priAndDateExpr='^\((.) \)\{0,1\}\([0-9]\{2,4\}-[0-9]\{2\}-[0-9]\{2\} \)\{0,1\}'
priority=$(sed -e "$item!d" -e "${item}s/${priAndDateExpr}.*/\\1/" "$TODO_FILE")
prepdate=$(sed -e "$item!d" -e "${item}s/${priAndDateExpr}.*/\\2/" "$TODO_FILE")
if [ "$prepdate" -a "$action" = "replace" ] && [ "$(echo "$input"|sed -e 's/^\([0-9]\{2,4\}-[0-9]\{2\}-[0-9]\{2\}\)\{0,1\}.*/\1/')" ]; then
# If the replaced text starts with a date, it will replace the existing
# date, too.
if [ "$prepdate" -a "$action" = "replace" ] && [ "$(echo "$input"|sed -e "s/${priAndDateExpr}.*/\\1\\2/")" ]; then
# If the replaced text starts with a [priority +] date, it will replace
# the existing date, too.
prepdate=
fi
# Temporarily remove any existing priority and prepended date, perform the
# change (replace/prepend) and re-insert the existing priority and prepended
# date again.
cleaninput "for sed"
sed -i.bak -e "$item s/^${priority}${prepdate}//" -e "$item s|^.*|${priority}${prepdate}${input}${backref}|" "$TODO_FILE"
if [ $TODOTXT_VERBOSE -gt 0 ]; then
getNewtodo "$item"
@@ -860,17 +859,7 @@ _format()
fi
}
listWordsWithSigil()
{
sigil=$1
shift
FILE=$TODO_FILE
[ "$TODOTXT_SOURCEVAR" ] && eval "FILE=$TODOTXT_SOURCEVAR"
eval "$(filtercommand 'cat "${FILE[@]}"' '' "$@")" | grep -o "[^ ]*${sigil}[^ ]\\+" | grep "^$sigil" | sort -u
}
export -f cleaninput getPrefix getTodo getNewtodo shellquote filtercommand _list listWordsWithSigil getPadding _format die
export -f cleaninput getPrefix getTodo getNewtodo shellquote filtercommand _list getPadding _format die
# == HANDLE ACTION ==
action=$( printf "%s\n" "$ACTION" | tr 'A-Z' 'a-z' )
@@ -1145,13 +1134,16 @@ case $action in
;;
"listcon" | "lsc" )
shift
listWordsWithSigil '@' "$@"
FILE=$TODO_FILE
[ "$TODOTXT_SOURCEVAR" ] && eval "FILE=$TODOTXT_SOURCEVAR"
grep -ho '[^ ]*@[^ ]\+' "${FILE[@]}" | grep '^@' | sort -u
;;
"listproj" | "lsprj" )
FILE=$TODO_FILE
[ "$TODOTXT_SOURCEVAR" ] && eval "FILE=$TODOTXT_SOURCEVAR"
shift
listWordsWithSigil '+' "$@"
eval "$(filtercommand 'cat "${FILE[@]}"' '' "$@")" | grep -o '[^ ]*+[^ ]\+' | grep '^+' | sort -u
;;
"listpri" | "lsp" )