On Wed, Mar 20, 2024 at 09:51:06PM +0000, Peter Flood wrote:
> Hi all,
> 
> Does anyone know a way to get gcloud (& gsutil etc etc) completions working
> in fish? There are bash and zsh completions, any way to convert them?

Ideally these commands provide native fish completions, (if they're
use a framework like Cobra, that should be given) but you can also
reuse bash completions like below.

Would be nice to be able to use something like this as general fallback
but I don't know yet if this is robust enough.
Also fish probably still wants to know whether to include file
completions or not (as indicated by the `-f` option)

        for cmd in gcloud gsutil
                complete $cmd -f -a '(
                    bash -c \'
                        get_completions() {
                            local completion COMP_CWORD COMP_LINE COMP_POINT 
COMP_WORDS COMPREPLY=()
                            # load bash-completion if necessary
                            declare -F _completion_loader &>/dev/null || {
                                source 
/usr/share/bash-completion/bash_completion
                            }
                            COMP_LINE=$*
                            COMP_POINT=${#COMP_LINE}
                            COMP_WORDS=("$@")
                            [[ ${COMP_LINE[@]: -1} = " " ]] && COMP_WORDS+=("")
                            COMP_CWORD=$(( ${#COMP_WORDS[@]} - 1 ))
                            completion=$(complete -p "$1" 2>/dev/null | awk 
"{print \\$(NF-1)}")
                            [[ -n $completion ]] || {
                                _completion_loader "$1"
                                completion=$(complete -p "$1" 2>/dev/null | awk 
"{print \\$(NF-1)}")
                            }
                            [[ -n $completion ]] || return 1
                            "$completion"
                            printf "%s\\n" "${COMPREPLY[@]}" | sed "s/ $//"
                        }
                        get_completions "$@"
                    \' -- (commandline -xpc 2>/dev/null || commandline -opc) 
"$(commandline -t)"
                )'
        end


_______________________________________________
Fish-users mailing list
Fish-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/fish-users

Reply via email to