mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-10-08 22:52:12 +02:00
So far, confirmations and prompts were handled by the same view, context, and controller, with a bunch of conditional code based on whether the view is editable. This was more or less ok so far, since it does save a little bit of code duplication; however, now we need separate views, because we don't have dynamic keybindings, but we want to map "confirm" to different keys in confirmations (the "universal.confirm" user config) and prompts (hard-coded to enter, because it doesn't make sense to customize it there). It also allows us to get rid of the conditional code, which is a nice benefit; and the code duplication is actually not *that* bad.
73 lines
1.9 KiB
Go
73 lines
1.9 KiB
Go
package controllers
|
|
|
|
import (
|
|
"github.com/jesseduffield/lazygit/pkg/gui/context"
|
|
"github.com/jesseduffield/lazygit/pkg/gui/types"
|
|
)
|
|
|
|
type ConfirmationController struct {
|
|
baseController
|
|
c *ControllerCommon
|
|
}
|
|
|
|
var _ types.IController = &ConfirmationController{}
|
|
|
|
func NewConfirmationController(
|
|
c *ControllerCommon,
|
|
) *ConfirmationController {
|
|
return &ConfirmationController{
|
|
baseController: baseController{},
|
|
c: c,
|
|
}
|
|
}
|
|
|
|
func (self *ConfirmationController) GetKeybindings(opts types.KeybindingsOpts) []*types.Binding {
|
|
bindings := []*types.Binding{
|
|
{
|
|
Key: opts.GetKey(opts.Config.Universal.Confirm),
|
|
Handler: func() error { return self.context().State.OnConfirm() },
|
|
Description: self.c.Tr.Confirm,
|
|
DisplayOnScreen: true,
|
|
},
|
|
{
|
|
Key: opts.GetKey(opts.Config.Universal.Return),
|
|
Handler: func() error { return self.context().State.OnClose() },
|
|
Description: self.c.Tr.CloseCancel,
|
|
DisplayOnScreen: true,
|
|
},
|
|
{
|
|
Key: opts.GetKey(opts.Config.Universal.CopyToClipboard),
|
|
Handler: self.handleCopyToClipboard,
|
|
Description: self.c.Tr.CopyToClipboardMenu,
|
|
DisplayOnScreen: true,
|
|
},
|
|
}
|
|
|
|
return bindings
|
|
}
|
|
|
|
func (self *ConfirmationController) GetOnFocusLost() func(types.OnFocusLostOpts) {
|
|
return func(types.OnFocusLostOpts) {
|
|
self.c.Helpers().Confirmation.DeactivateConfirmation()
|
|
}
|
|
}
|
|
|
|
func (self *ConfirmationController) Context() types.Context {
|
|
return self.context()
|
|
}
|
|
|
|
func (self *ConfirmationController) context() *context.ConfirmationContext {
|
|
return self.c.Contexts().Confirmation
|
|
}
|
|
|
|
func (self *ConfirmationController) handleCopyToClipboard() error {
|
|
confirmationView := self.c.Views().Confirmation
|
|
text := confirmationView.Buffer()
|
|
if err := self.c.OS().CopyToClipboard(text); err != nil {
|
|
return err
|
|
}
|
|
|
|
self.c.Toast(self.c.Tr.MessageCopiedToClipboard)
|
|
return nil
|
|
}
|