diff --git a/pkg/gui/controllers/global_controller.go b/pkg/gui/controllers/global_controller.go index bf9923182..f1bd7faef 100644 --- a/pkg/gui/controllers/global_controller.go +++ b/pkg/gui/controllers/global_controller.go @@ -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 diff --git a/pkg/gui/controllers/helpers/mode_helper.go b/pkg/gui/controllers/helpers/mode_helper.go index 5bef7d43a..e44d7b01b 100644 --- a/pkg/gui/controllers/helpers/mode_helper.go +++ b/pkg/gui/controllers/helpers/mode_helper.go @@ -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, }, } diff --git a/pkg/gui/controllers/quit_actions.go b/pkg/gui/controllers/quit_actions.go index f9b047357..4713a6e23 100644 --- a/pkg/gui/controllers/quit_actions.go +++ b/pkg/gui/controllers/quit_actions.go @@ -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 +} diff --git a/pkg/i18n/english.go b/pkg/i18n/english.go index 39227d25d..faedeb6e5 100644 --- a/pkg/i18n/english.go +++ b/pkg/i18n/english.go @@ -601,6 +601,7 @@ type TranslationSet struct { RenameBranchWarning string OpenKeybindingsMenu string ResetCherryPick string + ResetCherryPickShort string NextTab string PrevTab string CantUndoWhileRebasing string @@ -634,6 +635,7 @@ type TranslationSet struct { SwapDiff string ViewDiffingOptions string ViewDiffingOptionsTooltip string + CancelDiffingMode string OpenCommandLogMenu string OpenCommandLogMenuTooltip string ShowingGitDiff string @@ -671,6 +673,7 @@ type TranslationSet struct { SubmoduleStashAndReset string AndResetSubmodules string EnterSubmoduleTooltip string + BackToParentRepo string Enter string CopySubmoduleNameToClipboard string RemoveSubmodule string @@ -699,6 +702,7 @@ type TranslationSet struct { BulkSubmoduleOptions string RunningCommand string SubCommitsTitle string + ExitSubview string SubmodulesTitle string NavigationTitle string SuggestionsCheatsheetTitle string @@ -861,6 +865,7 @@ type TranslationSet struct { MarkedBaseCommitStatus string MarkAsBaseCommit string MarkAsBaseCommitTooltip string + CancelMarkedBaseCommit string MarkedCommitMarker string FailedToOpenURL string InvalidLazygitEditURL string @@ -870,6 +875,7 @@ type TranslationSet struct { QuickStartInteractiveRebaseTooltip string CannotQuickStartInteractiveRebase string ToggleRangeSelect string + DismissRangeSelect string RangeSelectUp string RangeSelectDown string RangeSelectNotSupported string @@ -1349,6 +1355,7 @@ func EnglishTranslationSet() *TranslationSet { DiscardSelection: `Discard`, DiscardSelectionTooltip: "When unstaged change is selected, discard the change using `git reset`. When staged change is selected, unstage the change.", ToggleRangeSelect: "Toggle range select", + DismissRangeSelect: "Dismiss range select", ToggleSelectHunk: "Toggle hunk selection", SelectHunk: "Select hunks", SelectLineByLine: "Select line-by-line", @@ -1667,6 +1674,7 @@ func EnglishTranslationSet() *TranslationSet { RenameBranchWarning: "This branch is tracking a remote. This action will only rename the local branch name, not the name of the remote branch. Continue?", OpenKeybindingsMenu: "Open keybindings menu", ResetCherryPick: "Reset copied (cherry-picked) commits selection", + ResetCherryPickShort: "Reset copied commits", NextTab: "Next tab", PrevTab: "Previous tab", CantUndoWhileRebasing: "Can't undo while rebasing", @@ -1700,6 +1708,7 @@ func EnglishTranslationSet() *TranslationSet { SwapDiff: "Reverse diff direction", ViewDiffingOptions: "View diffing options", ViewDiffingOptionsTooltip: "View options relating to diffing two refs e.g. diffing against selected ref, entering ref to diff against, and reversing the diff direction.", + CancelDiffingMode: "Cancel diffing mode", // the actual view is the extras view which I intend to give more tabs in future but for now we'll only mention the command log part OpenCommandLogMenu: "View command log options", OpenCommandLogMenuTooltip: "View options for the command log e.g. show/hide the command log and focus the command log.", @@ -1739,6 +1748,7 @@ func EnglishTranslationSet() *TranslationSet { AndResetSubmodules: "And reset submodules", Enter: "Enter", EnterSubmoduleTooltip: "Enter submodule. After entering the submodule, you can press `{{.escape}}` to escape back to the parent repo.", + BackToParentRepo: "Back to parent repo", CopySubmoduleNameToClipboard: "Copy submodule name to clipboard", RemoveSubmodule: "Remove submodule", RemoveSubmodulePrompt: "Are you sure you want to remove submodule '%s' and its corresponding directory? This is irreversible.", @@ -1766,6 +1776,7 @@ func EnglishTranslationSet() *TranslationSet { BulkSubmoduleOptions: "Bulk submodule options", RunningCommand: "Running command", SubCommitsTitle: "Sub-commits", + ExitSubview: "Exit subview", SubmodulesTitle: "Submodules", NavigationTitle: "List panel navigation", SuggestionsCheatsheetTitle: "Suggestions", @@ -1925,6 +1936,7 @@ func EnglishTranslationSet() *TranslationSet { MarkedBaseCommitStatus: "Marked a base commit for rebase", MarkAsBaseCommit: "Mark as base commit for rebase", MarkAsBaseCommitTooltip: "Select a base commit for the next rebase. When you rebase onto a branch, only commits above the base commit will be brought across. This uses the `git rebase --onto` command.", + CancelMarkedBaseCommit: "Cancel marked base commit", MarkedCommitMarker: "↑↑↑ Will rebase from here ↑↑↑", FailedToOpenURL: "Failed to open URL %s\n\nError: %v", InvalidLazygitEditURL: "Invalid lazygit-edit URL format: %s",