# op (1Password CLI) completion -*- shell-script -*- _op_commands() { "$@" --help 2>/dev/null | 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 [[ ! -v command && $cur == -* ]]; then COMPREPLY=($(compgen -W '$(_parse_usage "$1" --help)' -- "$cur")) [[ ${COMPREPLY-} == *= ]] && compopt -o nospace return fi [[ -v command ]] && _op_command_options "$1" && return if [[ ! -v 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