Skip to content

Instantly share code, notes, and snippets.

@devenes
Created March 28, 2023 12:52
Show Gist options
  • Save devenes/838e0fb7ad410d9482dbb9cecfcc56f8 to your computer and use it in GitHub Desktop.
Save devenes/838e0fb7ad410d9482dbb9cecfcc56f8 to your computer and use it in GitHub Desktop.
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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment