summaryrefslogtreecommitdiffstats
path: root/pkg/gui/services
diff options
context:
space:
mode:
authorJesse Duffield <jessedduffield@gmail.com>2023-05-29 14:24:49 +1000
committerJesse Duffield <jessedduffield@gmail.com>2023-05-29 14:24:49 +1000
commit16fa22a36ef24e433e49426052e4156cb49064e0 (patch)
tree86935a929fc63ab02eea4e587e8b2eef185c6729 /pkg/gui/services
parent8e6967c70273f838e4e200a61bdb631015d46bdc (diff)
Add suggestionsPreset to custom commands system
Diffstat (limited to 'pkg/gui/services')
-rw-r--r--pkg/gui/services/custom_commands/client.go2
-rw-r--r--pkg/gui/services/custom_commands/handler_creator.go35
-rw-r--r--pkg/gui/services/custom_commands/resolver.go5
3 files changed, 39 insertions, 3 deletions
diff --git a/pkg/gui/services/custom_commands/client.go b/pkg/gui/services/custom_commands/client.go
index 4cacba385..5e456ff6e 100644
--- a/pkg/gui/services/custom_commands/client.go
+++ b/pkg/gui/services/custom_commands/client.go
@@ -19,7 +19,7 @@ func NewClient(
helpers *helpers.Helpers,
) *Client {
sessionStateLoader := NewSessionStateLoader(c, helpers.Refs)
- handlerCreator := NewHandlerCreator(c, sessionStateLoader)
+ handlerCreator := NewHandlerCreator(c, sessionStateLoader, helpers.Suggestions)
keybindingCreator := NewKeybindingCreator(c)
customCommands := c.UserConfig.CustomCommands
diff --git a/pkg/gui/services/custom_commands/handler_creator.go b/pkg/gui/services/custom_commands/handler_creator.go
index da1c449fd..2d13a6f55 100644
--- a/pkg/gui/services/custom_commands/handler_creator.go
+++ b/pkg/gui/services/custom_commands/handler_creator.go
@@ -1,6 +1,7 @@
package custom_commands
import (
+ "fmt"
"strings"
"text/template"
@@ -18,11 +19,13 @@ type HandlerCreator struct {
sessionStateLoader *SessionStateLoader
resolver *Resolver
menuGenerator *MenuGenerator
+ suggestionsHelper *helpers.SuggestionsHelper
}
func NewHandlerCreator(
c *helpers.HelperCommon,
sessionStateLoader *SessionStateLoader,
+ suggestionsHelper *helpers.SuggestionsHelper,
) *HandlerCreator {
resolver := NewResolver(c.Common)
menuGenerator := NewMenuGenerator(c.Common)
@@ -32,6 +35,7 @@ func NewHandlerCreator(
sessionStateLoader: sessionStateLoader,
resolver: resolver,
menuGenerator: menuGenerator,
+ suggestionsHelper: suggestionsHelper,
}
}
@@ -104,15 +108,42 @@ func (self *HandlerCreator) call(customCommand config.CustomCommand) func() erro
}
func (self *HandlerCreator) inputPrompt(prompt *config.CustomCommandPrompt, wrappedF func(string) error) error {
+ var findSuggestionsFn func(string) []*types.Suggestion
+ if prompt.SuggestionsPreset != "" {
+ var err error
+ findSuggestionsFn, err = self.getPresetSuggestionsFn(prompt.SuggestionsPreset)
+ if err != nil {
+ return err
+ }
+ }
+
return self.c.Prompt(types.PromptOpts{
- Title: prompt.Title,
- InitialContent: prompt.InitialValue,
+ Title: prompt.Title,
+ InitialContent: prompt.InitialValue,
+ FindSuggestionsFunc: findSuggestionsFn,
HandleConfirm: func(str string) error {
return wrappedF(str)
},
})
}
+func (self *HandlerCreator) getPresetSuggestionsFn(preset string) (func(string) []*types.Suggestion, error) {
+ switch preset {
+ case "files":
+ return self.suggestionsHelper.GetFilePathSuggestionsFunc(), nil
+ case "branches":
+ return self.suggestionsHelper.GetBranchNameSuggestionsFunc(), nil
+ case "remotes":
+ return self.suggestionsHelper.GetRemoteSuggestionsFunc(), nil
+ case "remoteBranches":
+ return self.suggestionsHelper.GetRemoteBranchesSuggestionsFunc("/"), nil
+ case "refs":
+ return self.suggestionsHelper.GetRefsSuggestionsFunc(), nil
+ default:
+ return nil, fmt.Errorf("Unknown value for suggestionsPreset in custom command: %s. Valid values: files, branches, remotes, remoteBranches, refs", preset)
+ }
+}
+
func (self *HandlerCreator) menuPrompt(prompt *config.CustomCommandPrompt, wrappedF func(string) error) error {
menuItems := slices.Map(prompt.Options, func(option config.CustomCommandMenuOption) *types.MenuItem {
return &types.MenuItem{
diff --git a/pkg/gui/services/custom_commands/resolver.go b/pkg/gui/services/custom_commands/resolver.go
index 4c32a51ca..119581bfc 100644
--- a/pkg/gui/services/custom_commands/resolver.go
+++ b/pkg/gui/services/custom_commands/resolver.go
@@ -34,6 +34,11 @@ func (self *Resolver) resolvePrompt(
return nil, err
}
+ result.SuggestionsPreset, err = resolveTemplate(prompt.SuggestionsPreset)
+ if err != nil {
+ return nil, err
+ }
+
result.Body, err = resolveTemplate(prompt.Body)
if err != nil {
return nil, err