diff --git a/src/_gcloud b/src/_gcloud new file mode 100644 index 0000000..34ffda1 --- /dev/null +++ b/src/_gcloud @@ -0,0 +1,64 @@ +autoload -U +X bashcompinit && bashcompinit +zmodload -i zsh/parameter +if ! (( $+functions[compdef] )) ; then + autoload -U +X compinit && compinit +fi + +_python_argcomplete() { + local prefix= + if [[ $COMP_LINE == 'gcloud '* ]]; then + if [[ $3 == ssh && $2 == *@* ]] ;then + # handle ssh user@instance specially + prefix=${2%@*}@ + COMP_LINE=${COMP_LINE%$2}"${2#*@}" + elif [[ $2 == *'='* ]] ; then + # handle --flag=value + prefix=${2%=*}'=' + COMP_LINE=${COMP_LINE%$2}${2/'='/' '} + fi + fi + local IFS=' ' + COMPREPLY=( $(IFS="$IFS" COMP_LINE="$COMP_LINE" COMP_POINT="$COMP_POINT" _ARGCOMPLETE_COMP_WORDBREAKS="$COMP_WORDBREAKS" _ARGCOMPLETE=1 "$1" 8>&1 9>&2 1>/dev/null 2>/dev/null) ) + if [[ $? != 0 ]]; then + unset COMPREPLY + return + fi + # if one completion without a trailing space, add the space + if [[ ${#COMPREPLY[@]} == 1 && $COMPREPLY != *[=' '] ]]; then + COMPREPLY+=' ' + fi + if [[ $prefix != '' ]]; then + typeset -i n + for ((n=0; n < ${#COMPREPLY[@]}; n++));do + COMPREPLY[$n]=$prefix${COMPREPLY[$n]} + done + fi +} +complete -o nospace -o default -F _python_argcomplete "gcloud" + +_completer() { + command=$1 + name=$2 + eval '[[ -n "$'"${name}"'_COMMANDS" ]] || '"${name}"'_COMMANDS="$('"${command}"')"' + set -- $COMP_LINE + shift + while [[ $1 == -* ]]; do + shift + done + [[ -n "$2" ]] && return + grep -q "${name}\s*$" <<< $COMP_LINE && + eval 'COMPREPLY=($'"${name}"'_COMMANDS)' && + return + [[ "$COMP_LINE" == *" " ]] && return + [[ -n "$1" ]] && + eval 'COMPREPLY=($(echo "$'"${name}"'_COMMANDS" | grep ^'"$1"'))' +} + +unset bq_COMMANDS +_bq_completer() { + _completer "CLOUDSDK_COMPONENT_MANAGER_DISABLE_UPDATE_CHECK=1 bq help | grep '^[^ ][^ ]* ' | sed 's/ .*//'" bq +} + +complete -o default -F _bq_completer bq +complete -o nospace -F _python_argcomplete gsutil +