diff options
Diffstat (limited to '')
-rw-r--r-- | completions/secret-tool | 30 |
1 files changed, 15 insertions, 15 deletions
diff --git a/completions/secret-tool b/completions/secret-tool index 5462fc0..e8aafd8 100644 --- a/completions/secret-tool +++ b/completions/secret-tool @@ -1,50 +1,50 @@ # bash completion for secret-tool(1) -*- shell-script -*- -_secret_tool() +_comp_cmd_secret_tool() { - local cur prev words cword split - _init_completion -s || return + local cur prev words cword was_split comp_args + _comp_initialize -s -- "$@" || return - $split && return + [[ $was_split ]] && return local -i i - local mode word + local mode="" has_mode="" word for i in ${!words[*]}; do if [[ $i -gt 0 && ${words[i]} != -* ]]; then - ((i != cword)) && mode=${words[i]} + ((i != cword)) && mode=${words[i]} has_mode=set break fi done - if [[ ! -v mode ]]; then - local -a modes - modes=($("$1" nonexistent-mode 2>&1 | + if [[ ! $has_mode ]]; then + # generate modes + _comp_compgen_split -- "$("$1" nonexistent-mode 2>&1 | while read -r first second third rest; do if [[ $first == "${1##*/}" ]]; then printf "%s\n" "$second" elif [[ $first == usage: && $second == "${1##*/}" ]]; then printf "%s\n" "$third" fi - done)) - COMPREPLY=($(compgen -W '${modes[@]}' -- "$cur")) + done)" return fi case $mode in store) if [[ ${words[*]} != *\ --label[\ =]* ]]; then - COMPREPLY=($(compgen -W "--label=" -- "$cur")) + _comp_compgen -- -W "--label=" [[ ${COMPREPLY-} == *= ]] && compopt -o nospace fi ;; search) local -A opts=([--all]="" [--unlock]="") for word in "${words[@]:2}"; do - [[ $word ]] && unset opts["$word"] + [[ $word ]] && unset -v 'opts[$word]' done - COMPREPLY=($(compgen -W '${opts[@]}' -- "$cur")) + ((${#opts[@]})) && + _comp_compgen -- -W '"${!opts[@]}"' ;; esac } && - complete -F _secret_tool secret-tool + complete -F _comp_cmd_secret_tool secret-tool # ex: filetype=sh |