From 0af2e5e8a9107523c287d7c67af874d3837cc39f Mon Sep 17 00:00:00 2001 From: Marek Schwarz <20537480+marekschwarz@users.noreply.github.com> Date: Tue, 9 Jul 2019 02:04:58 +0200 Subject: [PATCH] Added command completion (#49) * Enable command completion (#27) * Added documentation (#27) --- README.md | 17 +++++++++++++++ pkg/commands/commands.go | 1 + pkg/commands/completion.go | 44 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 62 insertions(+) create mode 100644 pkg/commands/completion.go diff --git a/README.md b/README.md index da8a48b2..1a3f78c5 100644 --- a/README.md +++ b/README.md @@ -397,6 +397,23 @@ kubectl logs kodata 2018/07/19 23:38:29 Hello there ``` +## Enable Autocompletion + +To generate an bash completion script, you can run: +``` +ko completion +``` + +To use the completion script, you can copy the script in your bash_completion directory (e.g. /usr/local/etc/bash_completion.d/): +``` +ko completion > /usr/local/etc/bash_completion.d/ko +``` + or source it in your shell by running: +``` +source <(ko completion) +``` + + ## Relevance to Release Management `ko` is also useful for helping manage releases. For example, if your project diff --git a/pkg/commands/commands.go b/pkg/commands/commands.go index 4c3a4a16..2c805ab3 100644 --- a/pkg/commands/commands.go +++ b/pkg/commands/commands.go @@ -29,4 +29,5 @@ func AddKubeCommands(topLevel *cobra.Command) { addResolve(topLevel) addPublish(topLevel) addRun(topLevel) + addCompletion(topLevel) } diff --git a/pkg/commands/completion.go b/pkg/commands/completion.go new file mode 100644 index 00000000..28858fea --- /dev/null +++ b/pkg/commands/completion.go @@ -0,0 +1,44 @@ +// Copyright 2018 Google LLC All Rights Reserved. +// +// 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 commands + +import ( + "os" + + "github.com/spf13/cobra" +) + +type CompletionFlags struct { + Zsh bool +} + +func addCompletion(topLevel *cobra.Command) { + var completionFlags CompletionFlags + + completionCmd := &cobra.Command{ + Use: "completion", + Short: "Output shell completion code (default Bash)", + Run: func(cmd *cobra.Command, args []string) { + if completionFlags.Zsh { + cmd.Root().GenZshCompletion(os.Stdout) + } else { + cmd.Root().GenBashCompletion(os.Stdout) + } + }, + } + + completionCmd.Flags().BoolVar(&completionFlags.Zsh, "zsh", false, "Generates completion code for Zsh shell.") + topLevel.AddCommand(completionCmd) +}