diff --git a/.goreleaser.yml b/.goreleaser.yml index f855dbb..d8e1ff8 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -56,3 +56,12 @@ brews: - name: git - name: go-jsonnet - name: jsonnet-bundler + + install: | + bin.install "kable" + output = Utils.popen_read("#{bin}/kable completion bash") + (bash_completion/"kable").write output + output = Utils.popen_read("#{bin}/kable completion zsh") + (zsh_completion/"_kable").write output + output = Utils.popen_read("#{bin}/kable completion fish") + (fish_completion/"kable.fish").write output diff --git a/cmd/completion.go b/cmd/completion.go new file mode 100644 index 0000000..c0ea88c --- /dev/null +++ b/cmd/completion.go @@ -0,0 +1,75 @@ +/* +Copyright © 2020 NAME HERE + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +package cmd + +import ( + "os" + + "github.com/spf13/cobra" +) + +var completionCmd = &cobra.Command{ + Use: "completion [bash|zsh|fish|powershell]", + Short: "Generate completion scripts", + Long: `To load completions: + +Bash: + +$ source <(kable completion bash) + +# To load completions for each session, execute once: +Linux: + $ kable completion bash > /etc/bash_completion.d/kable +MacOS: + $ kable completion bash > /usr/local/etc/bash_completion.d/kable + +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: +$ kable completion zsh > "${fpath[1]}/_kable" + +# You will need to start a new shell for this setup to take effect. + +Fish: + +$ kable completion fish | source + +# To load completions for each session, execute once: +$ kable completion fish > ~/.config/fish/completions/kable.fish +`, + DisableFlagsInUseLine: true, + ValidArgs: []string{"bash", "zsh", "fish"}, + Args: cobra.ExactValidArgs(1), + Run: func(cmd *cobra.Command, args []string) { + switch args[0] { + case "bash": + cmd.Root().GenBashCompletion(os.Stdout) + case "zsh": + cmd.Root().GenZshCompletion(os.Stdout) + case "fish": + cmd.Root().GenFishCompletion(os.Stdout, true) + } + }, +} + +func init() { + rootCmd.AddCommand(completionCmd) +}