simplify how the context system works

This commit is contained in:
Jesse Duffield 2019-11-10 16:33:31 +11:00
parent e85310c0a9
commit 131113b065
11 changed files with 362 additions and 374 deletions

View file

@ -29,6 +29,7 @@ func (gui *Gui) handleCommitFileSelect(g *gocui.Gui, v *gocui.View) error {
} }
gui.getMainView().Title = "Patch" gui.getMainView().Title = "Patch"
gui.State.Panels.LineByLine = nil
commitFile := gui.getSelectedCommitFile(g) commitFile := gui.getSelectedCommitFile(g)
if commitFile == nil { if commitFile == nil {
@ -207,10 +208,7 @@ func (gui *Gui) enterCommitFile(selectedLineIdx int) error {
} }
} }
if err := gui.changeContext("main", "patch-building"); err != nil { if err := gui.changeContext("patch-building"); err != nil {
return err
}
if err := gui.changeContext("secondary", "patch-building"); err != nil {
return err return err
} }
if err := gui.switchFocus(gui.g, gui.getCommitFilesView(), gui.getMainView()); err != nil { if err := gui.switchFocus(gui.g, gui.getCommitFilesView(), gui.getMainView()); err != nil {

View file

@ -47,6 +47,7 @@ func (gui *Gui) handleCommitSelect(g *gocui.Gui, v *gocui.View) error {
gui.getMainView().Title = "Patch" gui.getMainView().Title = "Patch"
gui.getSecondaryView().Title = "Custom Patch" gui.getSecondaryView().Title = "Custom Patch"
gui.State.Panels.LineByLine = nil
commit := gui.getSelectedCommit(g) commit := gui.getSelectedCommit(g)
if commit == nil { if commit == nil {
@ -97,7 +98,7 @@ func (gui *Gui) refreshCommits(g *gocui.Gui) error {
if g.CurrentView() == v { if g.CurrentView() == v {
gui.handleCommitSelect(g, v) gui.handleCommitSelect(g, v)
} }
if g.CurrentView() == gui.getCommitFilesView() || (g.CurrentView() == gui.getMainView() || gui.State.Contexts["main"] == "patch-building") { if g.CurrentView() == gui.getCommitFilesView() || (g.CurrentView() == gui.getMainView() || gui.State.Context == "patch-building") {
return gui.refreshCommitFilesView() return gui.refreshCommitFilesView()
} }
return nil return nil

View file

@ -1,42 +1,45 @@
package gui package gui
func (gui *Gui) changeContext(viewName, context string) error { func (gui *Gui) changeContext(context string) error {
if gui.State.Contexts[viewName] == context { oldContext := gui.State.Context
if gui.State.Context == context {
return nil return nil
} }
contextMap := gui.GetContextMap() contextMap := gui.GetContextMap()
gui.g.DeleteKeybindings(viewName) oldBindings := contextMap[oldContext]
for _, binding := range oldBindings {
if err := gui.g.DeleteKeybinding(binding.ViewName, binding.Key, binding.Modifier); err != nil {
return err
}
}
bindings := contextMap[viewName][context] bindings := contextMap[context]
for _, binding := range bindings { for _, binding := range bindings {
if err := gui.g.SetKeybinding(binding.ViewName, binding.Key, binding.Modifier, binding.Handler); err != nil { if err := gui.g.SetKeybinding(binding.ViewName, binding.Key, binding.Modifier, binding.Handler); err != nil {
return err return err
} }
} }
gui.State.Contexts[viewName] = context
gui.State.Context = context
return nil return nil
} }
func (gui *Gui) setInitialContexts() error { func (gui *Gui) setInitialContext() error {
contextMap := gui.GetContextMap() contextMap := gui.GetContextMap()
initialContexts := map[string]string{ initialContext := "normal"
"main": "normal",
"secondary": "normal",
}
for viewName, context := range initialContexts { bindings := contextMap[initialContext]
bindings := contextMap[viewName][context] for _, binding := range bindings {
for _, binding := range bindings { if err := gui.g.SetKeybinding(binding.ViewName, binding.Key, binding.Modifier, binding.Handler); err != nil {
if err := gui.g.SetKeybinding(binding.ViewName, binding.Key, binding.Modifier, binding.Handler); err != nil { return err
return err
}
} }
} }
gui.State.Contexts = initialContexts gui.State.Context = initialContext
return nil return nil
} }

View file

@ -207,10 +207,7 @@ func (gui *Gui) enterFile(forceSecondaryFocused bool, selectedLineIdx int) error
if file.HasMergeConflicts { if file.HasMergeConflicts {
return gui.createErrorPanel(gui.g, gui.Tr.SLocalize("FileStagingRequirements")) return gui.createErrorPanel(gui.g, gui.Tr.SLocalize("FileStagingRequirements"))
} }
if err := gui.changeContext("main", "staging"); err != nil { if err := gui.changeContext("staging"); err != nil {
return err
}
if err := gui.changeContext("secondary", "staging"); err != nil {
return err return err
} }
if err := gui.switchFocus(gui.g, gui.getFilesView(), gui.getMainView()); err != nil { if err := gui.switchFocus(gui.g, gui.getFilesView(), gui.getMainView()); err != nil {
@ -466,7 +463,7 @@ func (gui *Gui) handleSwitchToMerge(g *gocui.Gui, v *gocui.View) error {
if !file.HasInlineMergeConflicts { if !file.HasInlineMergeConflicts {
return gui.createErrorPanel(g, gui.Tr.SLocalize("FileNoMergeCons")) return gui.createErrorPanel(g, gui.Tr.SLocalize("FileNoMergeCons"))
} }
if err := gui.changeContext("main", "merging"); err != nil { if err := gui.changeContext("merging"); err != nil {
return err return err
} }
if err := gui.switchFocus(g, v, gui.getMainView()); err != nil { if err := gui.switchFocus(g, v, gui.getMainView()); err != nil {

View file

@ -155,7 +155,7 @@ type guiState struct {
Updating bool Updating bool
Panels *panelStates Panels *panelStates
WorkingTreeState string // one of "merging", "rebasing", "normal" WorkingTreeState string // one of "merging", "rebasing", "normal"
Contexts map[string]string Context string // important not to set this value directly but to use gui.changeContext("new context")
CherryPickedCommits []*commands.Commit CherryPickedCommits []*commands.Commit
SplitMainPanel bool SplitMainPanel bool
} }
@ -281,11 +281,11 @@ func (gui *Gui) onFocusLost(v *gocui.View, newView *gocui.View) error {
} }
case "main": case "main":
// if we have lost focus to a first-class panel, we need to do some cleanup // if we have lost focus to a first-class panel, we need to do some cleanup
if err := gui.changeContext("main", "normal"); err != nil { if err := gui.changeContext("normal"); err != nil {
return err return err
} }
case "commitFiles": case "commitFiles":
if gui.State.Contexts["main"] != "patch-building" { if gui.State.Context != "patch-building" {
if _, err := gui.g.SetViewOnBottom(v.Name()); err != nil { if _, err := gui.g.SetViewOnBottom(v.Name()); err != nil {
return err return err
} }

View file

@ -592,9 +592,8 @@ func (gui *Gui) GetInitialKeybindings() []*Binding {
// GetCurrentKeybindings gets the list of keybindings given the current context // GetCurrentKeybindings gets the list of keybindings given the current context
func (gui *Gui) GetCurrentKeybindings() []*Binding { func (gui *Gui) GetCurrentKeybindings() []*Binding {
bindings := gui.GetInitialKeybindings() bindings := gui.GetInitialKeybindings()
viewName := gui.currentViewName() currentContext := gui.State.Context
currentContext := gui.State.Contexts[viewName] contextBindings := gui.GetContextMap()[currentContext]
contextBindings := gui.GetContextMap()[viewName][currentContext]
return append(bindings, contextBindings...) return append(bindings, contextBindings...)
} }
@ -607,347 +606,339 @@ func (gui *Gui) keybindings(g *gocui.Gui) error {
return err return err
} }
} }
if err := gui.setInitialContexts(); err != nil { if err := gui.setInitialContext(); err != nil {
return err return err
} }
return nil return nil
} }
func (gui *Gui) GetContextMap() map[string]map[string][]*Binding { func (gui *Gui) GetContextMap() map[string][]*Binding {
return map[string]map[string][]*Binding{ return map[string][]*Binding{
"secondary": { "normal": {
"normal": { {
{ ViewName: "secondary",
ViewName: "secondary", Key: gocui.MouseLeft,
Key: gocui.MouseLeft, Modifier: gocui.ModNone,
Modifier: gocui.ModNone, Handler: gui.handleMouseDownSecondary,
Handler: gui.handleMouseDownSecondary,
},
}, },
"staging": { {
{ ViewName: "main",
ViewName: "secondary", Key: gocui.MouseWheelDown,
Key: gocui.MouseLeft, Modifier: gocui.ModNone,
Modifier: gocui.ModNone, Handler: gui.scrollDownMain,
Handler: gui.handleTogglePanelClick, Description: gui.Tr.SLocalize("ScrollDown"),
}, Alternative: "fn+up",
}, {
ViewName: "main",
Key: gocui.MouseWheelUp,
Modifier: gocui.ModNone,
Handler: gui.scrollUpMain,
Description: gui.Tr.SLocalize("ScrollUp"),
Alternative: "fn+down",
}, {
ViewName: "main",
Key: gocui.MouseLeft,
Modifier: gocui.ModNone,
Handler: gui.handleMouseDownMain,
}, },
}, },
"main": { "staging": {
"normal": { {
{ ViewName: "secondary",
ViewName: "main", Key: gocui.MouseLeft,
Key: gocui.MouseWheelDown, Modifier: gocui.ModNone,
Modifier: gocui.ModNone, Handler: gui.handleTogglePanelClick,
Handler: gui.scrollDownMain,
Description: gui.Tr.SLocalize("ScrollDown"),
Alternative: "fn+up",
}, {
ViewName: "main",
Key: gocui.MouseWheelUp,
Modifier: gocui.ModNone,
Handler: gui.scrollUpMain,
Description: gui.Tr.SLocalize("ScrollUp"),
Alternative: "fn+down",
}, {
ViewName: "main",
Key: gocui.MouseLeft,
Modifier: gocui.ModNone,
Handler: gui.handleMouseDownMain,
},
}, },
"staging": { {
{ ViewName: "main",
ViewName: "main", Key: gocui.KeyEsc,
Key: gocui.KeyEsc, Modifier: gocui.ModNone,
Modifier: gocui.ModNone, Handler: gui.handleStagingEscape,
Handler: gui.handleStagingEscape, Description: gui.Tr.SLocalize("ReturnToFilesPanel"),
Description: gui.Tr.SLocalize("ReturnToFilesPanel"), }, {
}, { ViewName: "main",
ViewName: "main", Key: gocui.KeyArrowUp,
Key: gocui.KeyArrowUp, Modifier: gocui.ModNone,
Modifier: gocui.ModNone, Handler: gui.handleSelectPrevLine,
Handler: gui.handleSelectPrevLine, Description: gui.Tr.SLocalize("PrevLine"),
Description: gui.Tr.SLocalize("PrevLine"), }, {
}, { ViewName: "main",
ViewName: "main", Key: gocui.KeyArrowDown,
Key: gocui.KeyArrowDown, Modifier: gocui.ModNone,
Modifier: gocui.ModNone, Handler: gui.handleSelectNextLine,
Handler: gui.handleSelectNextLine, Description: gui.Tr.SLocalize("NextLine"),
Description: gui.Tr.SLocalize("NextLine"), }, {
}, { ViewName: "main",
ViewName: "main", Key: 'k',
Key: 'k', Modifier: gocui.ModNone,
Modifier: gocui.ModNone, Handler: gui.handleSelectPrevLine,
Handler: gui.handleSelectPrevLine, }, {
}, { ViewName: "main",
ViewName: "main", Key: 'j',
Key: 'j', Modifier: gocui.ModNone,
Modifier: gocui.ModNone, Handler: gui.handleSelectNextLine,
Handler: gui.handleSelectNextLine, }, {
}, { ViewName: "main",
ViewName: "main", Key: gocui.KeyArrowLeft,
Key: gocui.KeyArrowLeft, Modifier: gocui.ModNone,
Modifier: gocui.ModNone, Handler: gui.handleSelectPrevHunk,
Handler: gui.handleSelectPrevHunk, Description: gui.Tr.SLocalize("PrevHunk"),
Description: gui.Tr.SLocalize("PrevHunk"), }, {
}, { ViewName: "main",
ViewName: "main", Key: gocui.KeyArrowRight,
Key: gocui.KeyArrowRight, Modifier: gocui.ModNone,
Modifier: gocui.ModNone, Handler: gui.handleSelectNextHunk,
Handler: gui.handleSelectNextHunk, Description: gui.Tr.SLocalize("NextHunk"),
Description: gui.Tr.SLocalize("NextHunk"), }, {
}, { ViewName: "main",
ViewName: "main", Key: 'h',
Key: 'h', Modifier: gocui.ModNone,
Modifier: gocui.ModNone, Handler: gui.handleSelectPrevHunk,
Handler: gui.handleSelectPrevHunk, }, {
}, { ViewName: "main",
ViewName: "main", Key: 'l',
Key: 'l', Modifier: gocui.ModNone,
Modifier: gocui.ModNone, Handler: gui.handleSelectNextHunk,
Handler: gui.handleSelectNextHunk, }, {
}, { ViewName: "main",
ViewName: "main", Key: gocui.KeySpace,
Key: gocui.KeySpace, Modifier: gocui.ModNone,
Modifier: gocui.ModNone, Handler: gui.handleStageSelection,
Handler: gui.handleStageSelection, Description: gui.Tr.SLocalize("StageSelection"),
Description: gui.Tr.SLocalize("StageSelection"), }, {
}, { ViewName: "main",
ViewName: "main", Key: 'd',
Key: 'd', Modifier: gocui.ModNone,
Modifier: gocui.ModNone, Handler: gui.handleResetSelection,
Handler: gui.handleResetSelection, Description: gui.Tr.SLocalize("ResetSelection"),
Description: gui.Tr.SLocalize("ResetSelection"), }, {
}, { ViewName: "main",
ViewName: "main", Key: 'v',
Key: 'v', Modifier: gocui.ModNone,
Modifier: gocui.ModNone, Handler: gui.handleToggleSelectRange,
Handler: gui.handleToggleSelectRange, Description: gui.Tr.SLocalize("ToggleDragSelect"),
Description: gui.Tr.SLocalize("ToggleDragSelect"), }, {
}, { ViewName: "main",
ViewName: "main", Key: 'a',
Key: 'a', Modifier: gocui.ModNone,
Modifier: gocui.ModNone, Handler: gui.handleToggleSelectHunk,
Handler: gui.handleToggleSelectHunk, Description: gui.Tr.SLocalize("ToggleSelectHunk"),
Description: gui.Tr.SLocalize("ToggleSelectHunk"), }, {
}, { ViewName: "main",
ViewName: "main", Key: gocui.KeyTab,
Key: gocui.KeyTab, Modifier: gocui.ModNone,
Modifier: gocui.ModNone, Handler: gui.handleTogglePanel,
Handler: gui.handleTogglePanel, Description: gui.Tr.SLocalize("TogglePanel"),
Description: gui.Tr.SLocalize("TogglePanel"), }, {
}, { ViewName: "main",
ViewName: "main", Key: gocui.MouseLeft,
Key: gocui.MouseLeft, Modifier: gocui.ModNone,
Modifier: gocui.ModNone, Handler: gui.handleMouseDown,
Handler: gui.handleMouseDown, }, {
}, { ViewName: "main",
ViewName: "main", Key: gocui.MouseLeft,
Key: gocui.MouseLeft, Modifier: gocui.ModMotion,
Modifier: gocui.ModMotion, Handler: gui.handleMouseDrag,
Handler: gui.handleMouseDrag, }, {
}, { ViewName: "main",
ViewName: "main", Key: gocui.MouseWheelUp,
Key: gocui.MouseWheelUp, Modifier: gocui.ModNone,
Modifier: gocui.ModNone, Handler: gui.handleMouseScrollUp,
Handler: gui.handleMouseScrollUp, }, {
}, { ViewName: "main",
ViewName: "main", Key: gocui.MouseWheelDown,
Key: gocui.MouseWheelDown, Modifier: gocui.ModNone,
Modifier: gocui.ModNone, Handler: gui.handleMouseScrollDown,
Handler: gui.handleMouseScrollDown,
},
}, },
"patch-building": { },
{ "patch-building": {
ViewName: "main", {
Key: gocui.KeyEsc, ViewName: "main",
Modifier: gocui.ModNone, Key: gocui.KeyEsc,
Handler: gui.handleEscapePatchBuildingPanel, Modifier: gocui.ModNone,
Description: gui.Tr.SLocalize("ExitLineByLineMode"), Handler: gui.handleEscapePatchBuildingPanel,
}, { Description: gui.Tr.SLocalize("ExitLineByLineMode"),
ViewName: "main", }, {
Key: gocui.KeyArrowUp, ViewName: "main",
Modifier: gocui.ModNone, Key: gocui.KeyArrowUp,
Handler: gui.handleSelectPrevLine, Modifier: gocui.ModNone,
Description: gui.Tr.SLocalize("PrevLine"), Handler: gui.handleSelectPrevLine,
}, { Description: gui.Tr.SLocalize("PrevLine"),
ViewName: "main", }, {
Key: gocui.KeyArrowDown, ViewName: "main",
Modifier: gocui.ModNone, Key: gocui.KeyArrowDown,
Handler: gui.handleSelectNextLine, Modifier: gocui.ModNone,
Description: gui.Tr.SLocalize("NextLine"), Handler: gui.handleSelectNextLine,
}, { Description: gui.Tr.SLocalize("NextLine"),
ViewName: "main", }, {
Key: 'k', ViewName: "main",
Modifier: gocui.ModNone, Key: 'k',
Handler: gui.handleSelectPrevLine, Modifier: gocui.ModNone,
}, { Handler: gui.handleSelectPrevLine,
ViewName: "main", }, {
Key: 'j', ViewName: "main",
Modifier: gocui.ModNone, Key: 'j',
Handler: gui.handleSelectNextLine, Modifier: gocui.ModNone,
}, { Handler: gui.handleSelectNextLine,
ViewName: "main", }, {
Key: gocui.MouseWheelUp, ViewName: "main",
Modifier: gocui.ModNone, Key: gocui.MouseWheelUp,
Handler: gui.handleSelectPrevLine, Modifier: gocui.ModNone,
}, { Handler: gui.handleSelectPrevLine,
ViewName: "main", }, {
Key: gocui.MouseWheelDown, ViewName: "main",
Modifier: gocui.ModNone, Key: gocui.MouseWheelDown,
Handler: gui.handleSelectNextLine, Modifier: gocui.ModNone,
}, { Handler: gui.handleSelectNextLine,
ViewName: "main", }, {
Key: gocui.KeyArrowLeft, ViewName: "main",
Modifier: gocui.ModNone, Key: gocui.KeyArrowLeft,
Handler: gui.handleSelectPrevHunk, Modifier: gocui.ModNone,
Description: gui.Tr.SLocalize("PrevHunk"), Handler: gui.handleSelectPrevHunk,
}, { Description: gui.Tr.SLocalize("PrevHunk"),
ViewName: "main", }, {
Key: gocui.KeyArrowRight, ViewName: "main",
Modifier: gocui.ModNone, Key: gocui.KeyArrowRight,
Handler: gui.handleSelectNextHunk, Modifier: gocui.ModNone,
Description: gui.Tr.SLocalize("NextHunk"), Handler: gui.handleSelectNextHunk,
}, { Description: gui.Tr.SLocalize("NextHunk"),
ViewName: "main", }, {
Key: 'h', ViewName: "main",
Modifier: gocui.ModNone, Key: 'h',
Handler: gui.handleSelectPrevHunk, Modifier: gocui.ModNone,
}, { Handler: gui.handleSelectPrevHunk,
ViewName: "main", }, {
Key: 'l', ViewName: "main",
Modifier: gocui.ModNone, Key: 'l',
Handler: gui.handleSelectNextHunk, Modifier: gocui.ModNone,
}, { Handler: gui.handleSelectNextHunk,
ViewName: "main", }, {
Key: gocui.KeySpace, ViewName: "main",
Modifier: gocui.ModNone, Key: gocui.KeySpace,
Handler: gui.handleAddSelectionToPatch, Modifier: gocui.ModNone,
Description: gui.Tr.SLocalize("StageSelection"), Handler: gui.handleAddSelectionToPatch,
}, { Description: gui.Tr.SLocalize("StageSelection"),
ViewName: "main", }, {
Key: 'd', ViewName: "main",
Modifier: gocui.ModNone, Key: 'd',
Handler: gui.handleRemoveSelectionFromPatch, Modifier: gocui.ModNone,
Description: gui.Tr.SLocalize("ResetSelection"), Handler: gui.handleRemoveSelectionFromPatch,
}, { Description: gui.Tr.SLocalize("ResetSelection"),
ViewName: "main", }, {
Key: 'v', ViewName: "main",
Modifier: gocui.ModNone, Key: 'v',
Handler: gui.handleToggleSelectRange, Modifier: gocui.ModNone,
Description: gui.Tr.SLocalize("ToggleDragSelect"), Handler: gui.handleToggleSelectRange,
}, { Description: gui.Tr.SLocalize("ToggleDragSelect"),
ViewName: "main", }, {
Key: 'a', ViewName: "main",
Modifier: gocui.ModNone, Key: 'a',
Handler: gui.handleToggleSelectHunk, Modifier: gocui.ModNone,
Description: gui.Tr.SLocalize("ToggleSelectHunk"), Handler: gui.handleToggleSelectHunk,
}, { Description: gui.Tr.SLocalize("ToggleSelectHunk"),
ViewName: "main", }, {
Key: gocui.MouseLeft, ViewName: "main",
Modifier: gocui.ModNone, Key: gocui.MouseLeft,
Handler: gui.handleMouseDown, Modifier: gocui.ModNone,
}, { Handler: gui.handleMouseDown,
ViewName: "main", }, {
Key: gocui.MouseLeft, ViewName: "main",
Modifier: gocui.ModMotion, Key: gocui.MouseLeft,
Handler: gui.handleMouseDrag, Modifier: gocui.ModMotion,
}, { Handler: gui.handleMouseDrag,
ViewName: "main", }, {
Key: gocui.MouseWheelUp, ViewName: "main",
Modifier: gocui.ModNone, Key: gocui.MouseWheelUp,
Handler: gui.handleMouseScrollUp, Modifier: gocui.ModNone,
}, { Handler: gui.handleMouseScrollUp,
ViewName: "main", }, {
Key: gocui.MouseWheelDown, ViewName: "main",
Modifier: gocui.ModNone, Key: gocui.MouseWheelDown,
Handler: gui.handleMouseScrollDown, Modifier: gocui.ModNone,
}, Handler: gui.handleMouseScrollDown,
}, },
"merging": { },
{ "merging": {
ViewName: "main", {
Key: gocui.KeyEsc, ViewName: "main",
Modifier: gocui.ModNone, Key: gocui.KeyEsc,
Handler: gui.handleEscapeMerge, Modifier: gocui.ModNone,
Description: gui.Tr.SLocalize("ReturnToFilesPanel"), Handler: gui.handleEscapeMerge,
}, { Description: gui.Tr.SLocalize("ReturnToFilesPanel"),
ViewName: "main", }, {
Key: gocui.KeySpace, ViewName: "main",
Modifier: gocui.ModNone, Key: gocui.KeySpace,
Handler: gui.handlePickHunk, Modifier: gocui.ModNone,
Description: gui.Tr.SLocalize("PickHunk"), Handler: gui.handlePickHunk,
}, { Description: gui.Tr.SLocalize("PickHunk"),
ViewName: "main", }, {
Key: 'b', ViewName: "main",
Modifier: gocui.ModNone, Key: 'b',
Handler: gui.handlePickBothHunks, Modifier: gocui.ModNone,
Description: gui.Tr.SLocalize("PickBothHunks"), Handler: gui.handlePickBothHunks,
}, { Description: gui.Tr.SLocalize("PickBothHunks"),
ViewName: "main", }, {
Key: gocui.KeyArrowLeft, ViewName: "main",
Modifier: gocui.ModNone, Key: gocui.KeyArrowLeft,
Handler: gui.handleSelectPrevConflict, Modifier: gocui.ModNone,
Description: gui.Tr.SLocalize("PrevConflict"), Handler: gui.handleSelectPrevConflict,
}, { Description: gui.Tr.SLocalize("PrevConflict"),
ViewName: "main", }, {
Key: gocui.KeyArrowRight, ViewName: "main",
Modifier: gocui.ModNone, Key: gocui.KeyArrowRight,
Handler: gui.handleSelectNextConflict, Modifier: gocui.ModNone,
Handler: gui.handleSelectNextConflict,
Description: gui.Tr.SLocalize("NextConflict"), Description: gui.Tr.SLocalize("NextConflict"),
}, { }, {
ViewName: "main", ViewName: "main",
Key: gocui.KeyArrowUp, Key: gocui.KeyArrowUp,
Modifier: gocui.ModNone, Modifier: gocui.ModNone,
Handler: gui.handleSelectTop, Handler: gui.handleSelectTop,
Description: gui.Tr.SLocalize("SelectTop"), Description: gui.Tr.SLocalize("SelectTop"),
}, { }, {
ViewName: "main", ViewName: "main",
Key: gocui.KeyArrowDown, Key: gocui.KeyArrowDown,
Modifier: gocui.ModNone, Modifier: gocui.ModNone,
Handler: gui.handleSelectBottom, Handler: gui.handleSelectBottom,
Description: gui.Tr.SLocalize("SelectBottom"), Description: gui.Tr.SLocalize("SelectBottom"),
}, { }, {
ViewName: "main", ViewName: "main",
Key: gocui.MouseWheelUp, Key: gocui.MouseWheelUp,
Modifier: gocui.ModNone, Modifier: gocui.ModNone,
Handler: gui.handleSelectTop, Handler: gui.handleSelectTop,
}, { }, {
ViewName: "main", ViewName: "main",
Key: gocui.MouseWheelDown, Key: gocui.MouseWheelDown,
Modifier: gocui.ModNone, Modifier: gocui.ModNone,
Handler: gui.handleSelectBottom, Handler: gui.handleSelectBottom,
}, { }, {
ViewName: "main", ViewName: "main",
Key: 'h', Key: 'h',
Modifier: gocui.ModNone, Modifier: gocui.ModNone,
Handler: gui.handleSelectPrevConflict, Handler: gui.handleSelectPrevConflict,
}, { }, {
ViewName: "main", ViewName: "main",
Key: 'l', Key: 'l',
Modifier: gocui.ModNone, Modifier: gocui.ModNone,
Handler: gui.handleSelectNextConflict, Handler: gui.handleSelectNextConflict,
}, { }, {
ViewName: "main", ViewName: "main",
Key: 'k', Key: 'k',
Modifier: gocui.ModNone, Modifier: gocui.ModNone,
Handler: gui.handleSelectTop, Handler: gui.handleSelectTop,
}, { }, {
ViewName: "main", ViewName: "main",
Key: 'j', Key: 'j',
Modifier: gocui.ModNone, Modifier: gocui.ModNone,
Handler: gui.handleSelectBottom, Handler: gui.handleSelectBottom,
}, { }, {
ViewName: "main", ViewName: "main",
Key: 'z', Key: 'z',
Modifier: gocui.ModNone, Modifier: gocui.ModNone,
Handler: gui.handlePopFileSnapshot, Handler: gui.handlePopFileSnapshot,
Description: gui.Tr.SLocalize("Undo"), Description: gui.Tr.SLocalize("Undo"),
},
}, },
}, },
} }

View file

@ -226,7 +226,7 @@ func (gui *Gui) refreshMainView() error {
var includedLineIndices []int var includedLineIndices []int
// I'd prefer not to have knowledge of contexts using this file but I'm not sure // I'd prefer not to have knowledge of contexts using this file but I'm not sure
// how to get around this // how to get around this
if gui.State.Contexts["main"] == "patch-building" { if gui.State.Context == "patch-building" {
filename := gui.State.CommitFiles[gui.State.Panels.CommitFiles.SelectedLine].Name filename := gui.State.CommitFiles[gui.State.Panels.CommitFiles.SelectedLine].Name
includedLineIndices = gui.GitCommand.PatchManager.GetFileIncLineIndices(filename) includedLineIndices = gui.GitCommand.PatchManager.GetFileIncLineIndices(filename)
} }

View file

@ -88,7 +88,7 @@ func (gui *Gui) handleRemoveSelectionFromPatch(g *gocui.Gui, v *gocui.View) erro
func (gui *Gui) handleEscapePatchBuildingPanel(g *gocui.Gui, v *gocui.View) error { func (gui *Gui) handleEscapePatchBuildingPanel(g *gocui.Gui, v *gocui.View) error {
gui.State.Panels.LineByLine = nil gui.State.Panels.LineByLine = nil
gui.State.Contexts["main"] = "normal" gui.changeContext("normal")
if gui.GitCommand.PatchManager.IsEmpty() { if gui.GitCommand.PatchManager.IsEmpty() {
gui.GitCommand.PatchManager.Reset() gui.GitCommand.PatchManager.Reset()

View file

@ -67,7 +67,7 @@ func (gui *Gui) validateNormalWorkingTreeState() (bool, error) {
} }
func (gui *Gui) returnFocusFromLineByLinePanelIfNecessary() error { func (gui *Gui) returnFocusFromLineByLinePanelIfNecessary() error {
if gui.State.Contexts["main"] == "patch-building" { if gui.State.Context == "patch-building" {
return gui.handleEscapePatchBuildingPanel(gui.g, nil) return gui.handleEscapePatchBuildingPanel(gui.g, nil)
} }
return nil return nil

View file

@ -117,7 +117,7 @@ func (gui *Gui) newLineFocused(g *gocui.Gui, v *gocui.View) error {
case "credentials": case "credentials":
return gui.handleCredentialsViewFocused(g, v) return gui.handleCredentialsViewFocused(g, v)
case "main": case "main":
if gui.State.Contexts["main"] == "merging" { if gui.State.Context == "merging" {
return gui.refreshMergePanel() return gui.refreshMergePanel()
} }
v.Highlight = false v.Highlight = false
@ -406,7 +406,7 @@ func (gui *Gui) renderPanelOptions() error {
case "menu": case "menu":
return gui.renderMenuOptions() return gui.renderMenuOptions()
case "main": case "main":
if gui.State.Contexts["main"] == "merging" { if gui.State.Context == "merging" {
return gui.renderMergeOptions() return gui.renderMergeOptions()
} }
} }

View file

@ -83,15 +83,13 @@ func getBindingSections(mApp *app.App) []*bindingSection {
bindingSections = addBinding(title, bindingSections, binding) bindingSections = addBinding(title, bindingSections, binding)
} }
for view, contexts := range mApp.Gui.GetContextMap() { for contextName, contextBindings := range mApp.Gui.GetContextMap() {
for contextName, contextBindings := range contexts { translatedView := localisedTitle(mApp, contextBindings[0].ViewName)
translatedView := localisedTitle(mApp, view) translatedContextName := localisedTitle(mApp, contextName)
translatedContextName := localisedTitle(mApp, contextName) title := fmt.Sprintf("%s (%s)", translatedView, translatedContextName)
title := fmt.Sprintf("%s (%s)", translatedView, translatedContextName)
for _, binding := range contextBindings { for _, binding := range contextBindings {
bindingSections = addBinding(title, bindingSections, binding) bindingSections = addBinding(title, bindingSections, binding)
}
} }
} }