From 03873431080f52917bd88659f180f3dc3c72fb41 Mon Sep 17 00:00:00 2001 From: MunifTanjim Date: Sun, 9 Oct 2016 04:12:24 +0600 Subject: [PATCH] update completion for todo to latest version --- completion/available/todo.completion.bash | 68 +++++++++++++++++------ 1 file changed, 52 insertions(+), 16 deletions(-) diff --git a/completion/available/todo.completion.bash b/completion/available/todo.completion.bash index da365ea6..6e38c6f5 100644 --- a/completion/available/todo.completion.bash +++ b/completion/available/todo.completion.bash @@ -1,3 +1,5 @@ +# link: https://github.com/ginatrapani/todo.txt-cli/blob/master/todo_completion + _todo() { local cur prev opts @@ -5,23 +7,59 @@ _todo() cur="${COMP_WORDS[COMP_CWORD]}" prev="${COMP_WORDS[COMP_CWORD-1]}" - COMMANDS="add a addto addm append app archive command del \ - rm depri dp do help list ls listall lsa listcon \ - lsc listfile lf listpri lsp listproj lsproj move \ - mv prepend prep pri p replace report" - - # Add custom commands from add-ons, if installed. - COMMANDS="$COMMANDS $('ls' ${TODO_ACTIONS_DIR:-"$HOME/.todo.actions.d"}/ 2>/dev/null)" - - OPTS="-@ -@@ -+ -++ -d -f -h -p -P -PP -a -n -t -v -vv -V -x" + local -r OPTS="-@ -@@ -+ -++ -d -f -h -p -P -PP -a -n -t -v -vv -V -x" + local -r COMMANDS="\ + add a addto addm append app archive command del \ + rm depri dp do help list ls listaddons listall lsa listcon \ + lsc listfile lf listpri lsp listproj lsprj move \ + mv prepend prep pri p replace report shorthelp" + local -r MOVE_COMMAND_PATTERN='^(move|mv)$' + local _todo_sh=${_todo_sh:-todo.sh} + local completions 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 - case "${prev}" in - -*) completions="$COMMANDS $OPTS";; - *) return 0;; - esac + case "$prev" in + command) + 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 fi COMPREPLY=( $( compgen -W "$completions" -- $cur )) @@ -29,6 +67,4 @@ _todo() } 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