Merge pull request #1350 from urfave/applying-pr1218
Another approach for zsh completion (#1218)
This commit is contained in:
commit
f528cf0a1e
@ -228,6 +228,7 @@ func ExampleApp_Run_subcommandNoAction() {
|
||||
}
|
||||
|
||||
func ExampleApp_Run_bashComplete_withShortFlag() {
|
||||
os.Setenv("SHELL", "bash")
|
||||
os.Args = []string{"greet", "-", "--generate-bash-completion"}
|
||||
|
||||
app := NewApp()
|
||||
@ -255,6 +256,7 @@ func ExampleApp_Run_bashComplete_withShortFlag() {
|
||||
}
|
||||
|
||||
func ExampleApp_Run_bashComplete_withLongFlag() {
|
||||
os.Setenv("SHELL", "bash")
|
||||
os.Args = []string{"greet", "--s", "--generate-bash-completion"}
|
||||
|
||||
app := NewApp()
|
||||
@ -283,6 +285,7 @@ func ExampleApp_Run_bashComplete_withLongFlag() {
|
||||
// --similar-flag
|
||||
}
|
||||
func ExampleApp_Run_bashComplete_withMultipleLongFlag() {
|
||||
os.Setenv("SHELL", "bash")
|
||||
os.Args = []string{"greet", "--st", "--generate-bash-completion"}
|
||||
|
||||
app := NewApp()
|
||||
@ -315,7 +318,7 @@ func ExampleApp_Run_bashComplete_withMultipleLongFlag() {
|
||||
}
|
||||
|
||||
func ExampleApp_Run_bashComplete() {
|
||||
// set args for examples sake
|
||||
os.Setenv("SHELL", "bash")
|
||||
os.Args = []string{"greet", "--generate-bash-completion"}
|
||||
|
||||
app := &App{
|
||||
@ -355,7 +358,7 @@ func ExampleApp_Run_bashComplete() {
|
||||
func ExampleApp_Run_zshComplete() {
|
||||
// set args for examples sake
|
||||
os.Args = []string{"greet", "--generate-bash-completion"}
|
||||
_ = os.Setenv("_CLI_ZSH_AUTOCOMPLETE_HACK", "1")
|
||||
_ = os.Setenv("SHELL", "/usr/bin/zsh")
|
||||
|
||||
app := NewApp()
|
||||
app.Name = "greet"
|
||||
|
@ -1,14 +1,13 @@
|
||||
#compdef $PROG
|
||||
|
||||
_cli_zsh_autocomplete() {
|
||||
|
||||
local -a opts
|
||||
local cur
|
||||
cur=${words[-1]}
|
||||
if [[ "$cur" == "-"* ]]; then
|
||||
opts=("${(@f)$(_CLI_ZSH_AUTOCOMPLETE_HACK=1 ${words[@]:0:#words[@]-1} ${cur} --generate-bash-completion)}")
|
||||
opts=("${(@f)$(${words[@]:0:#words[@]-1} ${cur} --generate-bash-completion)}")
|
||||
else
|
||||
opts=("${(@f)$(_CLI_ZSH_AUTOCOMPLETE_HACK=1 ${words[@]:0:#words[@]-1} --generate-bash-completion)}")
|
||||
opts=("${(@f)$(${words[@]:0:#words[@]-1} --generate-bash-completion)}")
|
||||
fi
|
||||
|
||||
if [[ "${opts[1]}" != "" ]]; then
|
||||
@ -16,8 +15,6 @@ _cli_zsh_autocomplete() {
|
||||
else
|
||||
_files
|
||||
fi
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
compdef _cli_zsh_autocomplete $PROG
|
||||
|
@ -1165,15 +1165,14 @@ func main() {
|
||||
```
|
||||
|
||||
#### ZSH Support
|
||||
Auto-completion for ZSH is also supported using the `autocomplete/zsh_autocomplete`
|
||||
file included in this repo. Two environment variables are used, `PROG` and `_CLI_ZSH_AUTOCOMPLETE_HACK`.
|
||||
Set `PROG` to the program name as before, set `_CLI_ZSH_AUTOCOMPLETE_HACK` to `1`, and
|
||||
then `source path/to/autocomplete/zsh_autocomplete`. Adding the following lines to your ZSH
|
||||
configuration file (usually `.zshrc`) will allow the auto-completion to persist across new shells:
|
||||
Auto-completion for ZSH is also supported using the `autocomplete/zsh_autocomplete`
|
||||
file included in this repo. One environment variable is used, `PROG`. Set
|
||||
`PROG` to the program name as before, and then `source path/to/autocomplete/zsh_autocomplete`.
|
||||
Adding the following lines to your ZSH configuration file (usually `.zshrc`)
|
||||
will allow the auto-completion to persist across new shells:
|
||||
|
||||
```
|
||||
PROG=<myprogram>
|
||||
_CLI_ZSH_AUTOCOMPLETE_HACK=1
|
||||
source path/to/autocomplete/zsh_autocomplete
|
||||
```
|
||||
#### ZSH default auto-complete example
|
||||
|
2
help.go
2
help.go
@ -107,7 +107,7 @@ func printCommandSuggestions(commands []*Command, writer io.Writer) {
|
||||
if command.Hidden {
|
||||
continue
|
||||
}
|
||||
if os.Getenv("_CLI_ZSH_AUTOCOMPLETE_HACK") == "1" {
|
||||
if strings.HasSuffix(os.Getenv("SHELL"), "zsh") {
|
||||
for _, name := range command.Names() {
|
||||
_, _ = fmt.Fprintf(writer, "%s:%s\n", name, command.Usage)
|
||||
}
|
||||
|
@ -1040,12 +1040,16 @@ func TestHideHelpCommand_WithSubcommands(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestDefaultCompleteWithFlags(t *testing.T) {
|
||||
origEnv := os.Environ()
|
||||
origArgv := os.Args
|
||||
|
||||
t.Cleanup(func() {
|
||||
os.Args = origArgv
|
||||
resetEnv(origEnv)
|
||||
})
|
||||
|
||||
os.Setenv("SHELL", "bash")
|
||||
|
||||
for _, tc := range []struct {
|
||||
name string
|
||||
c *Context
|
||||
|
Loading…
Reference in New Issue
Block a user