From 216b00f358dbfa36b34ff515d7f4f88387156db8 Mon Sep 17 00:00:00 2001 From: Ben Mezger Date: Wed, 6 Jan 2021 10:19:11 -0300 Subject: [PATCH] Feat: Add zsh, fish and powershell completion support See issue #4296 --- commands/genautocomplete.go | 30 ++++++++++++------- .../en/commands/hugo_gen_autocomplete.md | 14 ++++----- 2 files changed, 26 insertions(+), 18 deletions(-) diff --git a/commands/genautocomplete.go b/commands/genautocomplete.go index e8d9890cfbc..b72e5a93054 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{}) diff --git a/docs/content/en/commands/hugo_gen_autocomplete.md b/docs/content/en/commands/hugo_gen_autocomplete.md index 377a5f203a3..fe391630962 100644 --- a/docs/content/en/commands/hugo_gen_autocomplete.md +++ b/docs/content/en/commands/hugo_gen_autocomplete.md @@ -1,5 +1,5 @@ --- -date: 2020-09-13 +date: 2021-01-06 title: "hugo gen autocomplete" slug: hugo_gen_autocomplete url: /commands/hugo_gen_autocomplete/ @@ -12,9 +12,6 @@ Generate shell autocompletion script for Hugo 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.: @@ -23,10 +20,13 @@ 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 ``` hugo gen autocomplete [flags] @@ -37,7 +37,7 @@ hugo gen autocomplete [flags] ``` --completionfile string autocompletion file (default "/etc/bash_completion.d/hugo.sh") -h, --help help for autocomplete - --type string autocompletion type (currently only bash supported) (default "bash") + --type string autocompletion type (zsh, bash, fish or powershell) (default "bash") ``` ### Options inherited from parent commands @@ -62,4 +62,4 @@ hugo gen autocomplete [flags] * [hugo gen](/commands/hugo_gen/) - A collection of several useful generators. -###### Auto generated by spf13/cobra on 13-Sep-2020 +###### Auto generated by spf13/cobra on 6-Jan-2021