_todo() { local cur prev opts COMPREPLY=() 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" if [ $COMP_CWORD -eq 1 ]; then completions="$COMMANDS $OPTS" else case "${prev}" in -*) completions="$COMMANDS $OPTS";; *) return 0;; esac fi COMPREPLY=( $( compgen -W "$completions" -- $cur )) return 0 } 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