diff --git a/cmd/micro/autocomplete.go b/cmd/micro/autocomplete.go index d0ee3e17..52055dc2 100644 --- a/cmd/micro/autocomplete.go +++ b/cmd/micro/autocomplete.go @@ -149,3 +149,29 @@ func PluginComplete(complete Completion, input string) (chosen string, suggestio } return } + +func PluginCmdComplete(input string) (chosen string, suggestions []string) { + for _, cmd := range []string{"install", "remove", "search", "update"} { + if strings.HasPrefix(cmd, input) { + suggestions = append(suggestions, cmd) + } + } + + if len(suggestions) == 1 { + chosen = suggestions[0] + } + return chosen, suggestions +} + +func PluginNameComplete(input string) (chosen string, suggestions []string) { + for _, pp := range GetAllPluginPackages() { + if strings.HasPrefix(pp.Name, input) { + suggestions = append(suggestions, pp.Name) + } + } + + if len(suggestions) == 1 { + chosen = suggestions[0] + } + return chosen, suggestions +} diff --git a/cmd/micro/command.go b/cmd/micro/command.go index 588586bf..b978e132 100644 --- a/cmd/micro/command.go +++ b/cmd/micro/command.go @@ -87,7 +87,7 @@ func DefaultCommands() map[string]StrCommand { "help": {"Help", []Completion{HelpCompletion, NoCompletion}}, "eval": {"Eval", []Completion{NoCompletion}}, "log": {"ToggleLog", []Completion{NoCompletion}}, - "plugin": {"Plugin", []Completion{NoCompletion}}, + "plugin": {"Plugin", []Completion{PluginCmdCompletion, PluginNameCompletion}}, } } @@ -117,7 +117,7 @@ func PluginCmd(args []string) { } } case "update": - UpdatePlugins() + UpdatePlugins(args[1:]) case "search": searchText := strings.Join(args[1:], " ") plugins := SearchPlugin(searchText) diff --git a/cmd/micro/messenger.go b/cmd/micro/messenger.go index a9535b35..36e46889 100644 --- a/cmd/micro/messenger.go +++ b/cmd/micro/messenger.go @@ -192,6 +192,8 @@ const ( CommandCompletion HelpCompletion OptionCompletion + PluginCmdCompletion + PluginNameCompletion ) // Prompt sends the user a message and waits for a response to be typed in @@ -255,6 +257,10 @@ func (m *Messenger) Prompt(prompt, historyType string, completionTypes ...Comple chosen, suggestions = HelpComplete(currentArg) } else if completionType == OptionCompletion { chosen, suggestions = OptionComplete(currentArg) + } else if completionType == PluginCmdCompletion { + chosen, suggestions = PluginCmdComplete(currentArg) + } else if completionType == PluginNameCompletion { + chosen, suggestions = PluginNameComplete(currentArg) } else if completionType < NoCompletion { chosen, suggestions = PluginComplete(completionType, currentArg) } diff --git a/cmd/micro/pluginmanager.go b/cmd/micro/pluginmanager.go index 0c4fbef2..32e8aba9 100644 --- a/cmd/micro/pluginmanager.go +++ b/cmd/micro/pluginmanager.go @@ -501,14 +501,19 @@ func (pl PluginPackage) Install() { selected.install() } -func UpdatePlugins() { +func UpdatePlugins(plugins []string) { + // if no plugins are specified, update all installed plugins. + if len(plugins) == 0 { + plugins = loadedPlugins + } + messenger.AddLog("Checking for plugin updates") microVersion := PluginVersions{ newStaticPluginVersion(CorePluginName, Version), } var updates = make(PluginDependencies, 0) - for _, name := range loadedPlugins { + for _, name := range plugins { pv := GetInstalledPluginVersion(name) r, err := semver.ParseRange(">=" + pv) // Try to get newer versions. if err == nil {