Skip to content

Commit

Permalink
simplify how the context system works
Browse files Browse the repository at this point in the history
  • Loading branch information
jesseduffield committed Nov 10, 2019
1 parent e85310c commit 131113b
Show file tree
Hide file tree
Showing 11 changed files with 363 additions and 375 deletions.
6 changes: 2 additions & 4 deletions pkg/gui/commit_files_panel.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ func (gui *Gui) handleCommitFileSelect(g *gocui.Gui, v *gocui.View) error {
}

gui.getMainView().Title = "Patch"
gui.State.Panels.LineByLine = nil

commitFile := gui.getSelectedCommitFile(g)
if commitFile == nil {
Expand Down Expand Up @@ -207,10 +208,7 @@ func (gui *Gui) enterCommitFile(selectedLineIdx int) error {
}
}

if err := gui.changeContext("main", "patch-building"); err != nil {
return err
}
if err := gui.changeContext("secondary", "patch-building"); err != nil {
if err := gui.changeContext("patch-building"); err != nil {
return err
}
if err := gui.switchFocus(gui.g, gui.getCommitFilesView(), gui.getMainView()); err != nil {
Expand Down
3 changes: 2 additions & 1 deletion pkg/gui/commits_panel.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ func (gui *Gui) handleCommitSelect(g *gocui.Gui, v *gocui.View) error {

gui.getMainView().Title = "Patch"
gui.getSecondaryView().Title = "Custom Patch"
gui.State.Panels.LineByLine = nil

commit := gui.getSelectedCommit(g)
if commit == nil {
Expand Down Expand Up @@ -97,7 +98,7 @@ func (gui *Gui) refreshCommits(g *gocui.Gui) error {
if g.CurrentView() == 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 nil
Expand Down
37 changes: 20 additions & 17 deletions pkg/gui/context.go
Original file line number Diff line number Diff line change
@@ -1,42 +1,45 @@
package gui

func (gui *Gui) changeContext(viewName, context string) error {
if gui.State.Contexts[viewName] == context {
func (gui *Gui) changeContext(context string) error {
oldContext := gui.State.Context

if gui.State.Context == context {
return nil
}

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 {
if err := gui.g.SetKeybinding(binding.ViewName, binding.Key, binding.Modifier, binding.Handler); err != nil {
return err
}
}
gui.State.Contexts[viewName] = context

gui.State.Context = context
return nil
}

func (gui *Gui) setInitialContexts() error {
func (gui *Gui) setInitialContext() error {
contextMap := gui.GetContextMap()

initialContexts := map[string]string{
"main": "normal",
"secondary": "normal",
}
initialContext := "normal"

for viewName, context := range initialContexts {
bindings := contextMap[viewName][context]
for _, binding := range bindings {
if err := gui.g.SetKeybinding(binding.ViewName, binding.Key, binding.Modifier, binding.Handler); err != nil {
return err
}
bindings := contextMap[initialContext]
for _, binding := range bindings {
if err := gui.g.SetKeybinding(binding.ViewName, binding.Key, binding.Modifier, binding.Handler); err != nil {
return err
}
}

gui.State.Contexts = initialContexts
gui.State.Context = initialContext

return nil
}
7 changes: 2 additions & 5 deletions pkg/gui/files_panel.go
Original file line number Diff line number Diff line change
Expand Up @@ -207,10 +207,7 @@ func (gui *Gui) enterFile(forceSecondaryFocused bool, selectedLineIdx int) error
if file.HasMergeConflicts {
return gui.createErrorPanel(gui.g, gui.Tr.SLocalize("FileStagingRequirements"))
}
if err := gui.changeContext("main", "staging"); err != nil {
return err
}
if err := gui.changeContext("secondary", "staging"); err != nil {
if err := gui.changeContext("staging"); err != nil {
return err