diff options
Diffstat (limited to 'completions/op')
-rw-r--r-- | completions/op | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/completions/op b/completions/op new file mode 100644 index 00000000..b99bd2de --- /dev/null +++ b/completions/op @@ -0,0 +1,56 @@ +# op (1Password CLI) completion -*- shell-script -*- + +_op_commands() +{ + "$@" --help | + awk "/^(Available |Sub)commands/{flag=1;next}/^ /&&flag{print \$1}" +} + +_op_command_options() +{ + case $cur in + -*) + for i in "${!words[@]}"; do + [[ ${words[i]} == -* || $i -eq 0 ]] && unset words[i] + done + COMPREPLY=( $(compgen -W \ + '$(_parse_usage "$1" "${words[*]} --help") --help' -- "$cur") ) + [[ $COMPREPLY == *= ]] && compopt -o nospace + return 0 + ;; + esac + return 1 +} + +_op() +{ + local cur prev words cword split + _init_completion -s || return + + local command i + for (( i=1; i < cword; i++ )); do + case ${words[i]} in + --help|--version) return ;; + -*) ;; + *) command=${words[i]}; break ;; + esac + done + + if [[ -z $command && $cur == -* ]]; then + COMPREPLY=( $(compgen -W '$(_parse_usage "$1" --help)' -- "$cur") ) + [[ $COMPREPLY == *= ]] && compopt -o nospace + return + fi + + [[ $command ]] && _op_command_options "$1" && return + + if [[ -z $command || $command == $prev ]]; then + COMPREPLY=( $(compgen -W '$(_op_commands "$1" $command)' -- "$cur") ) + [[ $COMPREPLY ]] && return + fi + + # TODO specific command and subcommand completions +} && +complete -F _op op + +# ex: filetype=sh |