Merge pull request #799 from MunifTanjim/improve_todo_completion
update completion for todo to latest versionpull/800/head
commit
d1f672599d
|
|
@ -1,3 +1,5 @@
|
||||||
|
# link: https://github.com/ginatrapani/todo.txt-cli/blob/master/todo_completion
|
||||||
|
|
||||||
_todo()
|
_todo()
|
||||||
{
|
{
|
||||||
local cur prev opts
|
local cur prev opts
|
||||||
|
|
@ -5,22 +7,58 @@ _todo()
|
||||||
cur="${COMP_WORDS[COMP_CWORD]}"
|
cur="${COMP_WORDS[COMP_CWORD]}"
|
||||||
prev="${COMP_WORDS[COMP_CWORD-1]}"
|
prev="${COMP_WORDS[COMP_CWORD-1]}"
|
||||||
|
|
||||||
COMMANDS="add a addto addm append app archive command del \
|
local -r OPTS="-@ -@@ -+ -++ -d -f -h -p -P -PP -a -n -t -v -vv -V -x"
|
||||||
rm depri dp do help list ls listall lsa listcon \
|
local -r COMMANDS="\
|
||||||
lsc listfile lf listpri lsp listproj lsproj move \
|
add a addto addm append app archive command del \
|
||||||
mv prepend prep pri p replace report"
|
rm depri dp do help list ls listaddons listall lsa listcon \
|
||||||
|
lsc listfile lf listpri lsp listproj lsprj move \
|
||||||
# Add custom commands from add-ons, if installed.
|
mv prepend prep pri p replace report shorthelp"
|
||||||
COMMANDS="$COMMANDS $('ls' ${TODO_ACTIONS_DIR:-"$HOME/.todo.actions.d"}/ 2>/dev/null)"
|
local -r MOVE_COMMAND_PATTERN='^(move|mv)$'
|
||||||
|
|
||||||
OPTS="-@ -@@ -+ -++ -d -f -h -p -P -PP -a -n -t -v -vv -V -x"
|
|
||||||
|
|
||||||
|
local _todo_sh=${_todo_sh:-todo.sh}
|
||||||
|
local completions
|
||||||
if [ $COMP_CWORD -eq 1 ]; then
|
if [ $COMP_CWORD -eq 1 ]; then
|
||||||
completions="$COMMANDS $OPTS"
|
completions="$COMMANDS $(eval TODOTXT_VERBOSE=0 $_todo_sh command listaddons) $OPTS"
|
||||||
|
elif [[ $COMP_CWORD -gt 2 && ( \
|
||||||
|
"${COMP_WORDS[COMP_CWORD-2]}" =~ $MOVE_COMMAND_PATTERN || \
|
||||||
|
"${COMP_WORDS[COMP_CWORD-3]}" =~ $MOVE_COMMAND_PATTERN ) ]]; then
|
||||||
|
completions=$(eval TODOTXT_VERBOSE=0 $_todo_sh command listfile)
|
||||||
else
|
else
|
||||||
case "${prev}" in
|
case "$prev" in
|
||||||
-*) completions="$COMMANDS $OPTS";;
|
command)
|
||||||
*) return 0;;
|
completions=$COMMANDS;;
|
||||||
|
help)
|
||||||
|
completions="$COMMANDS $(eval TODOTXT_VERBOSE=0 $_todo_sh command listaddons)";;
|
||||||
|
addto|listfile|lf)
|
||||||
|
completions=$(eval TODOTXT_VERBOSE=0 $_todo_sh command listfile);;
|
||||||
|
-*) completions="$COMMANDS $(eval TODOTXT_VERBOSE=0 $_todo_sh command listaddons) $OPTS";;
|
||||||
|
*) case "$cur" in
|
||||||
|
+*) completions=$(eval TODOTXT_VERBOSE=0 $_todo_sh command listproj)
|
||||||
|
COMPREPLY=( $( compgen -W "$completions" -- $cur ))
|
||||||
|
[ ${#COMPREPLY[@]} -gt 0 ] && return 0
|
||||||
|
completions=$(eval 'TODOTXT_VERBOSE=0 TODOTXT_SOURCEVAR=\$DONE_FILE' $_todo_sh command listproj)
|
||||||
|
;;
|
||||||
|
@*) completions=$(eval TODOTXT_VERBOSE=0 $_todo_sh command listcon)
|
||||||
|
COMPREPLY=( $( compgen -W "$completions" -- $cur ))
|
||||||
|
[ ${#COMPREPLY[@]} -gt 0 ] && return 0
|
||||||
|
completions=$(eval 'TODOTXT_VERBOSE=0 TODOTXT_SOURCEVAR=\$DONE_FILE' $_todo_sh command listcon)
|
||||||
|
;;
|
||||||
|
*) if [[ "$cur" =~ ^[0-9]+$ ]]; then
|
||||||
|
local todo=$( \
|
||||||
|
eval TODOTXT_VERBOSE=0 $_todo_sh '-@ -+ -p -x command ls "^ *${cur} "' | \
|
||||||
|
sed -e 's/^ *[0-9]\{1,\} //' -e 's/^\((.) \)\{0,1\}[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' \
|
||||||
|
)
|
||||||
|
[ "$todo" ] && COMPREPLY[0]="$cur # $todo"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
@ -29,6 +67,4 @@ _todo()
|
||||||
}
|
}
|
||||||
|
|
||||||
complete -F _todo todo.sh
|
complete -F _todo todo.sh
|
||||||
# If you define an alias (e.g. "t") to todo.sh, you need to explicitly enable
|
|
||||||
# completion for it, too:
|
|
||||||
complete -F _todo t
|
complete -F _todo t
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue