github.com/clusterize-io/tusk@v0.6.3-0.20211001020217-cfe8a8cd0d4a/appcli/completion/_tusk (about) 1 #compdef tusk 2 3 local meta end 4 local -a _words _options 5 6 let end=$CURRENT-1 7 IFS=$'\n' _words=( $(${words[@]:0:$end} --generate-bash-completion) ) 8 9 # Split words into completion type and options 10 meta="${_words[1]}" 11 _options=( "${_words[@]:1}" ) 12 13 __tusk_tasks() { 14 local -a tasks 15 for option in "${_options[@]}"; do 16 if [[ ! "${option}" = --* ]]; then 17 tasks+=("${option}") 18 fi 19 done 20 _describe -t tasks 'tasks' tasks 21 } 22 23 __tusk_task_args() { 24 local -a args 25 for option in "${_options[@]}"; do 26 if [[ "${option}" != --* ]]; then 27 args+=("${option}") 28 fi 29 done 30 if [[ ${#args} == 0 ]]; then 31 _files 32 else 33 _describe -t task-args 'task arguments' args 34 fi 35 } 36 37 __tusk_task_flags() { 38 local -a flags 39 for option in "${_options[@]}"; do 40 if [[ "${option}" = --* ]]; then 41 flags+=("${option}") 42 fi 43 done 44 _describe -t task-flags 'task options' flags 45 } 46 47 __tusk_global_flags() { 48 local -a flags 49 for option in "${_options[@]}"; do 50 if [[ "${option}" = --* ]]; then 51 flags+=("${option}") 52 fi 53 done 54 _describe -t global-flags 'global options' flags 55 } 56 57 __tusk_values() { 58 local -a values 59 for option in "${_options[@]}"; do 60 if [[ ! "${option}" = --* ]]; then 61 values+=("${option}") 62 fi 63 done 64 _describe -t values 'values' values 65 } 66 67 case "${meta}" in 68 "normal") 69 _alternative \ 70 'tasks:task:__tusk_tasks' \ 71 'global-flags:flag:__tusk_global_flags' 72 ;; 73 "task-args") 74 _alternative \ 75 'task-args:arg:__tusk_task_args' \ 76 'task-flags:flag:__tusk_task_flags' 77 ;; 78 "task-no-args") 79 _alternative \ 80 'task-flags:flag:__tusk_task_flags' 81 ;; 82 "value") 83 _alternative \ 84 'values:value:__tusk_values' 85 ;; 86 "file") 87 _files 88 ;; 89 esac