diff options
author | Ben Mezger <me@benmezger.nl> | 2021-01-06 10:19:11 -0300 |
---|---|---|
committer | Anthony Fok <foka@debian.org> | 2021-02-04 15:32:51 -0700 |
commit | 216b00f358dbfa36b34ff515d7f4f88387156db8 (patch) | |
tree | e17adb5b2bc92fb1dd0f80bc7b08a3e0e71f3b03 /commands/genautocomplete.go | |
parent | 144943798c2a199ed256ae901a14d3c918055eba (diff) |
Feat: Add zsh, fish and powershell completion support
See issue #4296
Diffstat (limited to 'commands/genautocomplete.go')
-rw-r--r-- | commands/genautocomplete.go | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/commands/genautocomplete.go b/commands/genautocomplete.go index e8d9890cf..b72e5a930 100644 --- a/commands/genautocomplete.go +++ b/commands/genautocomplete.go @@ -23,7 +23,7 @@ var _ cmder = (*genautocompleteCmd)(nil) type genautocompleteCmd struct { autocompleteTarget string - // bash for now (zsh and others will come) + // bash or zsh autocompleteType string *baseCmd @@ -37,9 +37,6 @@ func newGenautocompleteCmd() *genautocompleteCmd { Short: "Generate shell autocompletion script for Hugo", Long: `Generates a shell autocompletion script for Hugo. -NOTE: The current version supports Bash only. - This should work for *nix systems with Bash installed. - By default, the file is written directly to /etc/bash_completion.d for convenience, and the command may need superuser rights, e.g.: @@ -48,29 +45,40 @@ for convenience, and the command may need superuser rights, e.g.: Add ` + "`--completionfile=/path/to/file`" + ` flag to set alternative file-path and name. +Add ` + "`--type={bash, zsh, fish or powershell}`" + ` flag to set alternative +shell type. + Logout and in again to reload the completion scripts, or just source them in directly: - $ . /etc/bash_completion`, + $ . /etc/bash_completion or /path/to/file`, RunE: func(cmd *cobra.Command, args []string) error { - if cc.autocompleteType != "bash" { - return newUserError("Only Bash is supported for now") + var err error + switch cc.autocompleteType { + case "zsh": + err = cmd.Root().GenZshCompletionFile(cc.autocompleteTarget) + case "bash": + err = cmd.Root().GenBashCompletionFile(cc.autocompleteTarget) + case "fish": + err = cmd.Root().GenFishCompletionFile(cc.autocompleteTarget, true) + case "powershell": + err = cmd.Root().GenFishCompletionFile(cc.autocompleteTarget, true) + default: + return newUserError("Unsupported completion type") } - err := cmd.Root().GenBashCompletionFile(cc.autocompleteTarget) if err != nil { return err } - jww.FEEDBACK.Println("Bash completion file for Hugo saved to", cc.autocompleteTarget) - + jww.FEEDBACK.Println(cc.autocompleteType+" completion file for Hugo saved to", cc.autocompleteTarget) return nil }, }) cc.cmd.PersistentFlags().StringVarP(&cc.autocompleteTarget, "completionfile", "", "/etc/bash_completion.d/hugo.sh", "autocompletion file") - cc.cmd.PersistentFlags().StringVarP(&cc.autocompleteType, "type", "", "bash", "autocompletion type (currently only bash supported)") + cc.cmd.PersistentFlags().StringVarP(&cc.autocompleteType, "type", "", "bash", "autocompletion type (zsh, bash, fish or powershell)") // For bash-completion cc.cmd.PersistentFlags().SetAnnotation("completionfile", cobra.BashCompFilenameExt, []string{}) |