diff --git a/internal/cmd/completion_scripts.go b/internal/cmd/completion_scripts.go index 31426e3c..ba341a86 100644 --- a/internal/cmd/completion_scripts.go +++ b/internal/cmd/completion_scripts.go @@ -37,9 +37,24 @@ complete -F _gog_complete gog func zshCompletionScript() string { return `#compdef gog -autoload -Uz bashcompinit -bashcompinit -` + bashCompletionScript() +_gog() { + local -a args completions + + args=("${(@)words[1,CURRENT]}") + if (( CURRENT > ${#words} )); then + args+=("") + fi + + completions=("${(@f)$(gog __complete --cword "$((${#args[@]} - 1))" -- "${args[@]}" 2>/dev/null)}") + if (( ${#completions[@]} == 0 )); then + return 1 + fi + + compadd -Q -S '' -- "${completions[@]}" +} + +compdef _gog gog +` } func fishCompletionScript() string { diff --git a/internal/cmd/completion_test.go b/internal/cmd/completion_test.go index 97447e45..9df54364 100644 --- a/internal/cmd/completion_test.go +++ b/internal/cmd/completion_test.go @@ -9,7 +9,7 @@ import ( func TestCompletionCmd(t *testing.T) { cases := map[string]string{ "bash": "complete -F _gog_complete gog", - "zsh": "bashcompinit", + "zsh": "compdef _gog gog", "fish": "complete -c gog", "powershell": "Register-ArgumentCompleter", }