mirror of
https://github.com/jesseduffield/lazygit.git
synced 2024-11-30 09:16:47 +02:00
b61ca21a84
We have a use-case to rebind 'm' to the merge action in the branches panel. There's three ways to handle this: 1) For all global keybindings, define a per-panel key that invokes it 2) Give a name to all controller actions and allow them to be invoked in custom commands 3) Allow checking for merge conflicts after running a custom command so that users can add their own 'git merge' custom command that matches the in-built action Option 1 is hairy, Option 2 though good for users introduces new backwards compatibility issues that I don't want to do right now, and option 3 is trivially easy to implement so that's what I'm doing. I've put this under an 'after' key so that we can add more things later. I'm imagining other things like being able to move the cursor to a newly added item etc. I considered always running this hook by default but I'd rather not: it's matching on the output text and I'd rather something like that be explicitly opted-into to avoid cases where we erroneously believe that there are conflicts.
51 lines
1.4 KiB
Go
51 lines
1.4 KiB
Go
package custom_commands
|
|
|
|
import (
|
|
"github.com/jesseduffield/lazygit/pkg/config"
|
|
"github.com/jesseduffield/lazygit/pkg/gui/controllers/helpers"
|
|
"github.com/jesseduffield/lazygit/pkg/gui/types"
|
|
)
|
|
|
|
// Client is the entry point to this package. It returns a list of keybindings based on the config's user-defined custom commands.
|
|
// See https://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md for more info.
|
|
type Client struct {
|
|
customCommands []config.CustomCommand
|
|
handlerCreator *HandlerCreator
|
|
keybindingCreator *KeybindingCreator
|
|
}
|
|
|
|
func NewClient(
|
|
c *helpers.HelperCommon,
|
|
helpers *helpers.Helpers,
|
|
) *Client {
|
|
sessionStateLoader := NewSessionStateLoader(c, helpers.Refs)
|
|
handlerCreator := NewHandlerCreator(
|
|
c,
|
|
sessionStateLoader,
|
|
helpers.Suggestions,
|
|
helpers.MergeAndRebase,
|
|
)
|
|
keybindingCreator := NewKeybindingCreator(c)
|
|
customCommands := c.UserConfig.CustomCommands
|
|
|
|
return &Client{
|
|
customCommands: customCommands,
|
|
keybindingCreator: keybindingCreator,
|
|
handlerCreator: handlerCreator,
|
|
}
|
|
}
|
|
|
|
func (self *Client) GetCustomCommandKeybindings() ([]*types.Binding, error) {
|
|
bindings := []*types.Binding{}
|
|
for _, customCommand := range self.customCommands {
|
|
handler := self.handlerCreator.call(customCommand)
|
|
binding, err := self.keybindingCreator.call(customCommand, handler)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
bindings = append(bindings, binding)
|
|
}
|
|
|
|
return bindings, nil
|
|
}
|