Please refer to Shell Completions for details.
Cobra 1.1 standardized its zsh completion support to align it with its other shell completions. Although the API was kept backwards-compatible, some small changes in behavior were introduced.
See further below for more details on these deprecations.
cmd.MarkZshCompPositionalArgumentFile(pos, []string{}) is no longer needed. It is therefore deprecated and silently ignored.cmd.MarkZshCompPositionalArgumentFile(pos, glob[]) is deprecated and silently ignored.
ValidArgsFunction with ShellCompDirectiveFilterFileExt.cmd.MarkZshCompPositionalArgumentWords() is deprecated and silently ignored.
ValidArgsFunction.Noun completion
|Old behavior|New behavior|
|---|---|
|No file completion by default (opposite of bash)|File completion by default; use ValidArgsFunction with ShellCompDirectiveNoFileComp to turn off file completion on a per-argument basis|
|Completion of flag names without the - prefix having been typed|Flag names are only completed if the user has typed the first -|
cmd.MarkZshCompPositionalArgumentFile(pos, []string{}) used to turn on file completion on a per-argument position basis|File completion for all arguments by default; cmd.MarkZshCompPositionalArgumentFile() is deprecated and silently ignored|
|cmd.MarkZshCompPositionalArgumentFile(pos, glob[]) used to turn on file completion with glob filtering on a per-argument position basis (zsh-specific)|cmd.MarkZshCompPositionalArgumentFile() is deprecated and silently ignored; use ValidArgsFunction with ShellCompDirectiveFilterFileExt for file extension filtering (not full glob filtering)|
|cmd.MarkZshCompPositionalArgumentWords(pos, words[]) used to provide completion choices on a per-argument position basis (zsh-specific)|cmd.MarkZshCompPositionalArgumentWords() is deprecated and silently ignored; use ValidArgsFunction to achieve the same behavior|
Flag-value completion
| Old behavior | New behavior |
|---|---|
| No file completion by default (opposite of bash) | File completion by default; use RegisterFlagCompletionFunc() with ShellCompDirectiveNoFileComp to turn off file completion |
cmd.MarkFlagFilename(flag, []string{}) and similar used to turn on file completion |
File completion by default; cmd.MarkFlagFilename(flag, []string{}) no longer needed in this context and silently ignored |
cmd.MarkFlagFilename(flag, glob[]) used to turn on file completion with glob filtering (syntax of []string{"*.yaml", "*.yml"} incompatible with bash) |
Will continue to work, however, support for bash syntax is added and should be used instead so as to work for all shells ([]string{"yaml", "yml"}) |
cmd.MarkFlagDirname(flag) only completes directories (zsh-specific) |
Has been added for all shells |
Completion of a flag name does not repeat, unless flag is of type *Array or *Slice (not supported by bash) |
Retained for zsh and added to fish |
Completion of a flag name does not provide the = form (unlike bash) |
Retained for zsh and added to fish |
Improvements
ValidArgsFunction and RegisterFlagCompletionFunc())= form of flags