diff --git a/Readme.md b/Readme.md new file mode 100644 index 0000000..f9cba53 --- /dev/null +++ b/Readme.md @@ -0,0 +1,15 @@ +# SSH-HUB - portable command hub + +## Autocompletion +In order to create autocompletion you have to: +- Download executable or clone project and write go install +- Then consult with ssh-hub completion. There you can select needed script for your terminal +- After that source it to have autocompletion and you are ready to go + + +Example in Mac OS with ZSH: +- go build +- go install +- ssh-hub completion zsh > ssh-hub-completion.zsh +- source ssh-hub-completion.zsh +- Now you should have it! Try using a ssh-hub exec [TAB] [TAB] it will help to find needed command diff --git a/cmd/exec/exec.go b/cmd/exec/exec.go index 0a91561..52c7b5e 100644 --- a/cmd/exec/exec.go +++ b/cmd/exec/exec.go @@ -3,6 +3,7 @@ package exec import ( "errors" "fmt" + "git.denysoft.de/CubeBit/ssh-hub/util" "github.com/creack/pty" "github.com/spf13/cobra" "github.com/spf13/viper" @@ -16,6 +17,10 @@ import ( var execCmd = &cobra.Command{ Use: "exec", Short: "Execute command of specific alias", + ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { + data := viper.GetStringMapString("data") + return util.AutocompleteConfig(&data, toComplete), cobra.ShellCompDirectiveNoFileComp + }, Args: func(cmd *cobra.Command, args []string) error { if err := cobra.ExactArgs(1)(cmd, args); err != nil { return err diff --git a/cmd/replace/replace.go b/cmd/replace/replace.go index fc3de90..b0096ac 100644 --- a/cmd/replace/replace.go +++ b/cmd/replace/replace.go @@ -11,7 +11,7 @@ import ( var replaceCmd = &cobra.Command{ Use: "replace", - Short: "Replace in string to new string in all commands", + Short: "Replace string with new string in all commands", Args: func(cmd *cobra.Command, args []string) error { if err := cobra.ExactArgs(2)(cmd, args); err != nil { return err diff --git a/cmd/root.go b/cmd/root.go index 465e190..1de9657 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -14,15 +14,15 @@ import ( "os" ) +var validArgs = []string{"list", "replace", "add", "delete", "exec"} + var rootCmd = &cobra.Command{ Use: "ssh-hub", Short: "ssh-hub is a simple SSH manager. Storing all your ssh commands and managing them", Long: "ssh-hub was created in order to automatically manage ssh commands and different Groups.\n " + "\tCreate groups based on projects, environments etc and add there your ssh commands.\n " + "\tWe will carefully manage all known sessions and groups.", - Run: func(cmd *cobra.Command, args []string) { - fmt.Println("Welcome to ssh-hub!") - }, + ValidArgs: validArgs, } func Execute() { @@ -72,13 +72,8 @@ ssh-hub ├── ssh - Execute an SSH command (with autocomplete) ├── add - Add a new command or group │ ├── command - Save an SSH command -│ └── group - Create a group of commands ├── exec - Execute a saved command or group -├── remove - Remove a command or group -├── groups - Manage groups -│ ├── add - Add a command to a group -│ ├── remove - Remove a command from a group -│ └── list - List commands in a group +├── delete - Remove a command or group ├── autocomplete - Enable or generate shell autocompletion └── help - Display help information for commands */ diff --git a/util/util.go b/util/util.go index 5250ab9..4457159 100644 --- a/util/util.go +++ b/util/util.go @@ -4,6 +4,7 @@ import ( "encoding/json" "github.com/spf13/cobra" "os" + "strings" ) func SaveConfig(data *map[string]string) error { @@ -19,3 +20,13 @@ func SaveConfig(data *map[string]string) error { return nil } + +func AutocompleteConfig(conf *map[string]string, partialInput string) []string { + var result []string + for key := range *conf { + if strings.Contains(key, partialInput) { + result = append(result, key) + } + } + return result +}