summaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
authorMohammed Al Sahaf <msaa1990@gmail.com>2022-08-31 02:24:05 +0300
committerGitHub <noreply@github.com>2022-08-30 23:24:05 +0000
commitd605ebe75a2043199ba53022adaa20be680cf051 (patch)
tree7cfde8d7733be9972e1babd1da61f652427e79d7 /cmd
parent258bc82b69ccb0f514fc62ec8ecd7273458ab2e4 (diff)
cmd: add completion command (#4994)
* cmd: add completion command * error check
Diffstat (limited to 'cmd')
-rw-r--r--cmd/commands.go63
1 files changed, 63 insertions, 0 deletions
diff --git a/cmd/commands.go b/cmd/commands.go
index 2085dfc..e71923c 100644
--- a/cmd/commands.go
+++ b/cmd/commands.go
@@ -22,6 +22,7 @@ import (
"strings"
"github.com/caddyserver/caddy/v2"
+ "github.com/spf13/cobra"
"github.com/spf13/cobra/doc"
)
@@ -379,6 +380,68 @@ The manual pages are sorted into the section specified by the argument of --sect
return fs
}(),
})
+
+ // source: https://github.com/spf13/cobra/blob/main/shell_completions.md
+ rootCmd.AddCommand(&cobra.Command{
+ Use: "completion [bash|zsh|fish|powershell]",
+ Short: "Generate completion script",
+ Long: fmt.Sprintf(`To load completions:
+
+ Bash:
+
+ $ source <(%[1]s completion bash)
+
+ # To load completions for each session, execute once:
+ # Linux:
+ $ %[1]s completion bash > /etc/bash_completion.d/%[1]s
+ # macOS:
+ $ %[1]s completion bash > $(brew --prefix)/etc/bash_completion.d/%[1]s
+
+ Zsh:
+
+ # If shell completion is not already enabled in your environment,
+ # you will need to enable it. You can execute the following once:
+
+ $ echo "autoload -U compinit; compinit" >> ~/.zshrc
+
+ # To load completions for each session, execute once:
+ $ %[1]s completion zsh > "${fpath[1]}/_%[1]s"
+
+ # You will need to start a new shell for this setup to take effect.
+
+ fish:
+
+ $ %[1]s completion fish | source
+
+ # To load completions for each session, execute once:
+ $ %[1]s completion fish > ~/.config/fish/completions/%[1]s.fish
+
+ PowerShell:
+
+ PS> %[1]s completion powershell | Out-String | Invoke-Expression
+
+ # To load completions for every new session, run:
+ PS> %[1]s completion powershell > %[1]s.ps1
+ # and source this file from your PowerShell profile.
+ `, rootCmd.Root().Name()),
+ DisableFlagsInUseLine: true,
+ ValidArgs: []string{"bash", "zsh", "fish", "powershell"},
+ Args: cobra.ExactValidArgs(1),
+ RunE: func(cmd *cobra.Command, args []string) error {
+ switch args[0] {
+ case "bash":
+ return cmd.Root().GenBashCompletion(os.Stdout)
+ case "zsh":
+ return cmd.Root().GenZshCompletion(os.Stdout)
+ case "fish":
+ return cmd.Root().GenFishCompletion(os.Stdout, true)
+ case "powershell":
+ return cmd.Root().GenPowerShellCompletionWithDesc(os.Stdout)
+ default:
+ return fmt.Errorf("unrecognized shell: %s", args[0])
+ }
+ },
+ })
}
// RegisterCommand registers the command cmd.