1
0
mirror of https://github.com/jesseduffield/lazygit.git synced 2025-11-25 22:32:13 +02:00

Show context-specific labels for the global <esc> binding

WHen several modes are active at the same time, it isn't totally obvious which
one will be cancelled first, so show this in the status bar.
This commit is contained in:
Stefan Haller
2025-08-12 17:10:34 +02:00
parent d8ea83704f
commit a8e44dcea6
4 changed files with 81 additions and 4 deletions

View File

@@ -119,6 +119,7 @@ func (self *GlobalController) GetKeybindings(opts types.KeybindingsOpts) []*type
Modifier: gocui.ModNone,
Handler: self.escape,
Description: self.c.Tr.Cancel,
DescriptionFunc: self.escapeDescription,
GetDisabledReason: self.escapeEnabled,
DisplayOnScreen: true,
},
@@ -191,6 +192,10 @@ func (self *GlobalController) escape() error {
return (&QuitActions{c: self.c}).Escape()
}
func (self *GlobalController) escapeDescription() string {
return (&QuitActions{c: self.c}).EscapeDescription()
}
func (self *GlobalController) escapeEnabled() *types.DisabledReason {
if (&QuitActions{c: self.c}).EscapeEnabled() {
return nil

View File

@@ -39,9 +39,10 @@ func NewModeHelper(
}
type ModeStatus struct {
IsActive func() bool
InfoLabel func() string
Reset func() error
IsActive func() bool
InfoLabel func() string
CancelLabel func() string
Reset func() error
}
func (self *ModeHelper) Statuses() []ModeStatus {
@@ -58,6 +59,9 @@ func (self *ModeHelper) Statuses() []ModeStatus {
style.FgMagenta,
)
},
CancelLabel: func() string {
return self.c.Tr.CancelDiffingMode
},
Reset: self.diffHelper.ExitDiffMode,
},
{
@@ -65,6 +69,9 @@ func (self *ModeHelper) Statuses() []ModeStatus {
InfoLabel: func() string {
return self.withResetButton(self.c.Tr.BuildingPatch, style.FgYellow.SetBold())
},
CancelLabel: func() string {
return self.c.Tr.ExitCustomPatchBuilder
},
Reset: self.patchBuildingHelper.Reset,
},
{
@@ -80,6 +87,9 @@ func (self *ModeHelper) Statuses() []ModeStatus {
style.FgRed,
)
},
CancelLabel: func() string {
return self.c.Tr.ExitFilterMode
},
Reset: self.ExitFilterMode,
},
{
@@ -90,6 +100,9 @@ func (self *ModeHelper) Statuses() []ModeStatus {
style.FgCyan,
)
},
CancelLabel: func() string {
return self.c.Tr.CancelMarkedBaseCommit
},
Reset: self.mergeAndRebaseHelper.ResetMarkedBaseCommit,
},
{
@@ -110,6 +123,9 @@ func (self *ModeHelper) Statuses() []ModeStatus {
style.FgCyan,
)
},
CancelLabel: func() string {
return self.c.Tr.ResetCherryPickShort
},
Reset: self.cherryPickHelper.Reset,
},
{
@@ -122,6 +138,9 @@ func (self *ModeHelper) Statuses() []ModeStatus {
workingTreeState.Title(self.c.Tr), style.FgYellow,
)
},
CancelLabel: func() string {
return fmt.Sprintf(self.c.Tr.AbortTitle, self.c.Git().Status.WorkingTreeState().CommandName())
},
Reset: self.mergeAndRebaseHelper.AbortMergeOrRebaseWithConfirm,
},
{
@@ -131,6 +150,9 @@ func (self *ModeHelper) Statuses() []ModeStatus {
InfoLabel: func() string {
return self.withResetButton(self.c.Tr.Bisect.Bisecting, style.FgGreen)
},
CancelLabel: func() string {
return self.c.Tr.Actions.ResetBisect
},
Reset: self.bisectHelper.Reset,
},
}

View File

@@ -48,7 +48,7 @@ func (self *QuitActions) confirmQuitDuringUpdate() error {
}
func (self *QuitActions) Escape() error {
// If you make changes to this function, be sure to update EscapeEnabled accordingly.
// If you make changes to this function, be sure to update EscapeEnabled and EscapeDescription accordingly.
currentContext := self.c.Context().Current()
@@ -130,3 +130,41 @@ func (self *QuitActions) EscapeEnabled() bool {
return false
}
func (self *QuitActions) EscapeDescription() string {
currentContext := self.c.Context().Current()
if listContext, ok := currentContext.(types.IListContext); ok {
if listContext.GetList().IsSelectingRange() {
return self.c.Tr.DismissRangeSelect
}
}
if ctx, ok := currentContext.(types.IFilterableContext); ok {
if ctx.IsFiltering() {
return self.c.Tr.ExitFilterMode
}
}
parentContext := currentContext.GetParentContext()
if parentContext != nil {
return self.c.Tr.ExitSubview
}
for _, mode := range self.c.Helpers().Mode.Statuses() {
if mode.IsActive() {
return mode.CancelLabel()
}
}
repoPathStack := self.c.State().GetRepoPathStack()
if !repoPathStack.IsEmpty() {
return self.c.Tr.BackToParentRepo
}
if self.c.UserConfig().QuitOnTopLevelReturn {
return self.c.Tr.Quit
}
return self.c.Tr.Cancel
}