Add a hack so that zsh completion only runs for zsh

This commit is contained in:
Dan Buch 2016-07-24 17:29:13 -04:00
parent 1cbb9a7f30
commit 363d9c9a31
No known key found for this signature in database
GPG Key ID: FAEF12936DD3E3EC
3 changed files with 47 additions and 3 deletions

View File

@ -160,6 +160,44 @@ func ExampleApp_Run_bashComplete() {
// h
}
func ExampleApp_Run_zshComplete() {
// set args for examples sake
os.Args = []string{"greet", "--generate-bash-completion"}
os.Setenv("_CLI_ZSH_AUTOCOMPLETE_HACK", "1")
app := NewApp()
app.Name = "greet"
app.EnableBashCompletion = true
app.Commands = []Command{
{
Name: "describeit",
Aliases: []string{"d"},
Usage: "use it to see a description",
Description: "This is how we describe describeit the function",
Action: func(c *Context) error {
fmt.Printf("i like to describe things")
return nil
},
}, {
Name: "next",
Usage: "next example",
Description: "more stuff to see when generating bash completion",
Action: func(c *Context) error {
fmt.Printf("the next example")
return nil
},
},
}
app.Run(os.Args)
// Output:
// describeit:use it to see a description
// d:use it to see a description
// next:next example
// help:Shows a list of commands or help for one command
// h:Shows a list of commands or help for one command
}
func TestApp_Run(t *testing.T) {
s := ""

View File

@ -1,7 +1,7 @@
_cli_zsh_autocomplete() {
local -a opts
opts=("${(@f)$(${words[@]:0:#words[@]-1} --generate-bash-completion)}")
opts=("${(@f)$(_CLI_ZSH_AUTOCOMPLETE_HACK=1 ${words[@]:0:#words[@]-1} --generate-bash-completion)}")
_describe 'values' opts

10
help.go
View File

@ -128,8 +128,14 @@ func DefaultAppComplete(c *Context) {
if command.Hidden {
continue
}
for _, name := range command.Names() {
fmt.Fprintf(c.App.Writer, "%s:%s\n", name, command.Usage)
if os.Getenv("_CLI_ZSH_AUTOCOMPLETE_HACK") == "1" {
for _, name := range command.Names() {
fmt.Fprintf(c.App.Writer, "%s:%s\n", name, command.Usage)
}
} else {
for _, name := range command.Names() {
fmt.Fprintf(c.App.Writer, "%s\n", name)
}
}
}
}