diff --git a/.bash_completion.d/gcloud b/.bash_completion.d/gcloud new file mode 100644 index 0000000000000000000000000000000000000000..bdf232a9cbbea59ea87c2af3932c9a7b54e7d43c --- /dev/null +++ b/.bash_completion.d/gcloud @@ -0,0 +1,82 @@ +_python_argcomplete() { + local IFS='' + local prefix= + typeset -i n + (( lastw=${#COMP_WORDS[@]} -1)) + if [[ ${COMP_WORDS[lastw]} == --*=* ]]; then + # for bash version 3.2 + flag=${COMP_WORDS[lastw]%%=*} + set -- "$1" "$2" '=' + elif [[ $3 == '=' ]]; then + flag=${COMP_WORDS[-3]} + fi + if [[ $3 == ssh && $2 == *@* ]] ;then + # handle ssh user@instance specially + prefix=${2%@*}@ + COMP_LINE=${COMP_LINE%$2}"${2#*@}" + elif [[ $3 == '=' ]] ; then + # handle --flag=value + prefix=$flag=$2 + line=${COMP_LINE%$prefix}; + COMP_LINE=$line${prefix/=/ }; + prefix= + fi + if [[ $2 == *,* ]]; then + # handle , separated list + prefix=${2%,*}, + set -- "$1" "${2#$prefix}" "$3" + COMP_LINE==${COMP_LINE%$prefix*}$2 + fi + # Treat --flag=<TAB> as --flag <TAB> to work around bash 4.x bug + if [[ ${COMP_LINE} == *= && ${COMP_WORDS[-2]} == --* ]]; then + COMP_LINE=${COMP_LINE%=}' ' + fi + 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 [[ $prefix != '' ]]; then + for ((n=0; n < ${#COMPREPLY[@]}; n++)); do + COMPREPLY[$n]=$prefix${COMPREPLY[$n]} + done + fi + for ((n=0; n < ${#COMPREPLY[@]}; n++)); do + match=${COMPREPLY[$n]%' '} + if [[ $match != '' ]]; then + COMPREPLY[$n]=${match//? /' '}' ' + fi + done + # if flags argument has a single completion and ends in '= ', delete ' ' + if [[ ${#COMPREPLY[@]} == 1 && ${COMPREPLY[0]} == -* && + ${COMPREPLY[0]} == *'= ' ]]; then + COMPREPLY[0]=${COMPREPLY[0]%' '} + fi +} +complete -o nospace -F _python_argcomplete "gcloud" + +_completer() { + command=$1 + name=$2 + eval '[[ "$'"${name}"'_COMMANDS" ]] || '"${name}"'_COMMANDS="$('"${command}"')"' + set -- $COMP_LINE + shift + while [[ $1 == -* ]]; do + shift + done + [[ $2 ]] && return + grep -q "${name}\s*$" <<< $COMP_LINE && + eval 'COMPREPLY=($'"${name}"'_COMMANDS)' && + return + [[ "$COMP_LINE" == *" " ]] && return + [[ $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 -F _bq_completer bq +complete -o nospace -F _python_argcomplete gsutil