diff options
author | Jesse Duffield <jessedduffield@gmail.com> | 2023-05-29 14:24:49 +1000 |
---|---|---|
committer | Jesse Duffield <jessedduffield@gmail.com> | 2023-05-29 14:24:49 +1000 |
commit | 16fa22a36ef24e433e49426052e4156cb49064e0 (patch) | |
tree | 86935a929fc63ab02eea4e587e8b2eef185c6729 /pkg/gui/services | |
parent | 8e6967c70273f838e4e200a61bdb631015d46bdc (diff) |
Add suggestionsPreset to custom commands system
Diffstat (limited to 'pkg/gui/services')
-rw-r--r-- | pkg/gui/services/custom_commands/client.go | 2 | ||||
-rw-r--r-- | pkg/gui/services/custom_commands/handler_creator.go | 35 | ||||
-rw-r--r-- | pkg/gui/services/custom_commands/resolver.go | 5 |
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 |