Compare commits

..

9 Commits

Author SHA1 Message Date
Ingo Karkat
707ebf1522 ENH: Better completion for custom add-ons via new listaddons command.
The todo_completion had the problem that it didn't consider the todo.cfg itself for the location of TODO_ACTIONS_DIR, it just tried the default location or a globally exported config value. With the injection of custom configuration now in place, we can actually delegate the listing to todo.sh itself.
The added built-in "listaddons" command is used for that; it may also be helpful for troubleshooting or to find out about available add-ons. (But the help / shorthelp commands offer more information.)

Additionally, completion is now more precise; only executable actions and no subdirs are listed now; this is also covered by the enhanced test.

The last bonus: The custom add-on actions are now only determined when there's actually completion of commands.
2012-02-28 15:12:42 +01:00
Ingo Karkat
f4145348d0 Add test for custom add-on action completion. 2012-02-28 10:27:28 +01:00
Ingo Karkat
c9a158338b Add test for todo file completion. 2012-02-28 10:26:59 +01:00
Ingo Karkat
6132bdeb47 Add more test cases for arguments and options completion. 2012-02-28 09:50:00 +01:00
Ingo Karkat
213f6afa38 Add test for task number completion. 2012-02-28 09:43:51 +01:00
Ingo Karkat
7db3a2de13 test-lib: Allow completions containing whitespace.
This is necessary to test the completion of task text.
2012-02-28 09:38:57 +01:00
Ingo Karkat
4f504b26c9 test-lib: Also document test_expect_code. 2012-02-28 09:16:19 +01:00
Ingo Karkat
6c950429f6 ENH: completion can use different todo.sh locations and configurations.
This was previously not supported; todo_completion always used plain todo.sh from the PATH. Now it's possible to override the used executable (and configuration used through _todo_sh, set from a completion function wrapper.

Cp. http://tech.groups.yahoo.com/group/todotxt/message/4003
2012-02-27 14:19:11 +01:00
Ingo Karkat
9fb52d04e6 test-lib: Add test_todo_custom_completion variant.
This extension of test_todo_completion additionally takes the completion function to use, so that customized completions for todo.sh aliases can be tested.
2012-02-27 13:38:58 +01:00
4 changed files with 13 additions and 35 deletions

3
.gitignore vendored
View File

@@ -1,6 +1,3 @@
VERSION-FILE
tests/test-results
tests/trash\ directory.*
done.txt
report.txt
todo.txt

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

33
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]
@@ -860,17 +858,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 +1133,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" )

View File

@@ -58,7 +58,7 @@ _todo()
# a safety check of the ls action output.
local todo=$( \
eval TODOTXT_VERBOSE=0 $_todo_sh '-@ -+ -p -x command ls "^ *${cur} "' | \
sed -e 's/^ *[0-9]\{1,\} //' -e 's/\((.) \)[0-9]\{2,4\}-[0-9]\{2\}-[0-9]\{2\} /\1/' \
sed -e 's/^ *[0-9]\+ //' -e 's/\((.) \)[0-9]\{2,4\}-[0-9]\{2\}-[0-9]\{2\} /\1/' \
-e 's/\([xX] \)\([0-9]\{2,4\}-[0-9]\{2\}-[0-9]\{2\} \)\{1,2\}/\1/' \
-e 's/[[:space:]]*$//' \
-e '1q' \