# vim: set tabstop=2 shiftwidth=2 expandtab: _GO_TASK_COMPLETION_LIST_OPTION='--list-all' function _task() { local cur prev words cword _init_completion -n : || return # Check for `--` within command-line and quit or strip suffix. local i for i in "${!words[@]}"; do if [ "${words[$i]}" == "--" ]; then # Do not complete words following `--` passed to CLI_ARGS. [ $cword -gt $i ] && return # Remove the words following `--` to not put --list in CLI_ARGS. words=( "${words[@]:0:$i}" ) break fi done # Handle special arguments of options. case "$prev" in -d|--dir) _filedir -d return $? ;; -t|--taskfile) _filedir yaml || return $? _filedir yml return $? ;; -o|--output) COMPREPLY=( $( compgen -W "interleaved group prefixed" -- $cur ) ) return 0 ;; esac # Handle normal options. case "$cur" in -*) COMPREPLY=( $( compgen -W "$(_parse_help $1)" -- $cur ) ) return 0 ;; esac # Prepare task name completions. local tasks=( $( "${words[@]}" --silent $_GO_TASK_COMPLETION_LIST_OPTION 2> /dev/null ) ) COMPREPLY=( $( compgen -W "${tasks[*]}" -- "$cur" ) ) # Post-process because task names might contain colons. __ltrim_colon_completions "$cur" } complete -F _task task