summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pkg/gui/branches_panel.go37
-rw-r--r--pkg/gui/commit_files_panel.go14
-rw-r--r--pkg/gui/commits_panel.go28
-rw-r--r--pkg/gui/files_panel.go52
-rw-r--r--pkg/gui/gui.go4
-rw-r--r--pkg/gui/keybindings.go82
-rw-r--r--pkg/gui/list_view.go94
-rw-r--r--pkg/gui/menu_panel.go14
-rw-r--r--pkg/gui/stash_panel.go28
-rw-r--r--pkg/gui/view_helpers.go29
10 files changed, 194 insertions, 188 deletions
diff --git a/pkg/gui/branches_panel.go b/pkg/gui/branches_panel.go
index 205adf236..015f51739 100644
--- a/pkg/gui/branches_panel.go
+++ b/pkg/gui/branches_panel.go
@@ -105,34 +105,6 @@ func (gui *Gui) refreshBranches(g *gocui.Gui) error {
return nil
}
-func (gui *Gui) handleBranchesNextLine(g *gocui.Gui, v *gocui.View) error {
- if gui.popupPanelFocused() {
- return nil
- }
-
- panelState := gui.State.Panels.Branches
- gui.changeSelectedLine(&panelState.SelectedLine, len(gui.State.Branches), false)
-
- if err := gui.resetOrigin(gui.getMainView()); err != nil {
- return err
- }
- return gui.handleBranchSelect(gui.g, v)
-}
-
-func (gui *Gui) handleBranchesPrevLine(g *gocui.Gui, v *gocui.View) error {
- if gui.popupPanelFocused() {
- return nil
- }
-
- panelState := gui.State.Panels.Branches
- gui.changeSelectedLine(&panelState.SelectedLine, len(gui.State.Branches), true)
-
- if err := gui.resetOrigin(gui.getMainView()); err != nil {
- return err
- }
- return gui.handleBranchSelect(gui.g, v)
-}
-
// specific functions
func (gui *Gui) handleBranchPress(g *gocui.Gui, v *gocui.View) error {
@@ -364,16 +336,17 @@ func (gui *Gui) handleFastForward(g *gocui.Gui, v *gocui.View) error {
}
func (gui *Gui) onBranchesTabClick(tabIndex int) error {
- gui.State.Panels.Branches.ContextIndex = tabIndex
+ contexts := []string{"local-branches", "remotes", "tabs"}
branchesView := gui.getBranchesView()
+ branchesView.Context = contexts[tabIndex]
branchesView.TabIndex = tabIndex
- switch tabIndex {
- case 0:
+ switch contexts[tabIndex] {
+ case "local-branches":
if err := gui.renderListPanel(branchesView, gui.State.Branches); err != nil {
return err
}
- case 1:
+ case "remotes":
if err := gui.renderListPanel(branchesView, gui.State.Remotes); err != nil {
return err
}
diff --git a/pkg/gui/commit_files_panel.go b/pkg/gui/commit_files_panel.go
index 7fa57f53a..efd3c5fae 100644
--- a/pkg/gui/commit_files_panel.go
+++ b/pkg/gui/commit_files_panel.go
@@ -50,20 +50,6 @@ func (gui *Gui) handleCommitFileSelect(g *gocui.Gui, v *gocui.View) error {
return gui.renderString(g, "main", commitText)
}
-func (gui *Gui) handleCommitFilesNextLine(g *gocui.Gui, v *gocui.View) error {
- panelState := gui.State.Panels.CommitFiles
- gui.changeSelectedLine(&panelState.SelectedLine, len(gui.State.CommitFiles), false)
-
- return gui.handleCommitFileSelect(gui.g, v)
-}
-
-func (gui *Gui) handleCommitFilesPrevLine(g *gocui.Gui, v *gocui.View) error {
- panelState := gui.State.Panels.CommitFiles
- gui.changeSelectedLine(&panelState.SelectedLine, len(gui.State.CommitFiles), true)
-
- return gui.handleCommitFileSelect(gui.g, v)
-}
-
func (gui *Gui) handleSwitchToCommitsPanel(g *gocui.Gui, v *gocui.View) error {
commitsView, err := g.View("commits")
if err != nil {
diff --git a/pkg/gui/commits_panel.go b/pkg/gui/commits_panel.go
index cb459a52d..16d45ecc6 100644
--- a/pkg/gui/commits_panel.go
+++ b/pkg/gui/commits_panel.go
@@ -119,34 +119,6 @@ func (gui *Gui) refreshCommits(g *gocui.Gui) error {
return nil
}
-func (gui *Gui) handleCommitsNextLine(g *gocui.Gui, v *gocui.View) error {
- if gui.popupPanelFocused() {
- return nil
- }
-
- panelState := gui.State.Panels.Commits
- gui.changeSelectedLine(&panelState.SelectedLine, len(gui.State.Commits), false)
-
- if err := gui.resetOrigin(gui.getMainView()); err != nil {
- return err
- }
- return gui.handleCommitSelect(gui.g, v)
-}
-
-func (gui *Gui) handleCommitsPrevLine(g *gocui.Gui, v *gocui.View) error {
- if gui.popupPanelFocused() {
- return nil
- }
-
- panelState := gui.State.Panels.Commits
- gui.changeSelectedLine(&panelState.SelectedLine, len(gui.State.Commits), true)
-
- if err := gui.resetOrigin(gui.getMainView()); err != nil {
- return err
- }
- return gui.handleCommitSelect(gui.g, v)
-}
-
// specific functions
func (gui *Gui) handleResetToCommit(g *gocui.Gui, commitView *gocui.View) error {
diff --git a/pkg/gui/files_panel.go b/pkg/gui/files_panel.go
index 0205a193b..57df9def9 100644
--- a/pkg/gui/files_panel.go
+++ b/pkg/gui/files_panel.go
@@ -36,7 +36,7 @@ func (gui *Gui) handleFilesClick(g *gocui.Gui, v *gocui.View) error {
newSelectedLineIdx := v.SelectedLineIdx()
if newSelectedLineIdx > len(gui.State.Files)-1 {
- return gui.handleFileSelect(gui.g, v, false)
+ return gui.selectFile(false)
}
gui.State.Panels.Files.SelectedLine = newSelectedLineIdx
@@ -44,24 +44,28 @@ func (gui *Gui) handleFilesClick(g *gocui.Gui, v *gocui.View) error {
if prevSelectedLineIdx == newSelectedLineIdx && gui.currentViewName() == v.Name() {
return gui.handleFilePress(gui.g, v)
} else {
- return gui.handleFileSelect(gui.g, v, true)
+ return gui.selectFile(true)
}
}
-func (gui *Gui) handleFileSelect(g *gocui.Gui, v *gocui.View, alreadySelected bool) error {
- if _, err := gui.g.SetCurrentView(v.Name()); err != nil {
+func (gui *Gui) handleFileSelect(g *gocui.Gui, v *gocui.View) error {
+ return gui.selectFile(false)
+}
+
+func (gui *Gui) selectFile(alreadySelected bool) error {
+ if _, err := gui.g.SetCurrentView("files"); err != nil {
return err
}
- file, err := gui.getSelectedFile(g)
+ file, err := gui.getSelectedFile(gui.g)
if err != nil {
if err != gui.Errors.ErrNoFiles {
return err
}
- return gui.renderString(g, "main", gui.Tr.SLocalize("NoChangedFiles"))
+ return gui.renderString(gui.g, "main", gui.Tr.SLocalize("NoChangedFiles"))
}
- if err := gui.focusPoint(0, gui.State.Panels.Files.SelectedLine, len(gui.State.Files), v); err != nil {
+ if err := gui.focusPoint(0, gui.State.Panels.Files.SelectedLine, len(gui.State.Files), gui.getFilesView()); err != nil {
return err
}
@@ -90,7 +94,7 @@ func (gui *Gui) handleFileSelect(g *gocui.Gui, v *gocui.View, alreadySelected bo
}
if alreadySelected {
- g.Update(func(*gocui.Gui) error {
+ gui.g.Update(func(*gocui.Gui) error {
if err := gui.setViewContent(gui.g, gui.getSecondaryView(), contentCached); err != nil {
return err
}
@@ -98,10 +102,10 @@ func (gui *Gui) handleFileSelect(g *gocui.Gui, v *gocui.View, alreadySelected bo
})
return nil
}
- if err := gui.renderString(g, "secondary", contentCached); err != nil {
+ if err := gui.renderString(gui.g, "secondary", contentCached); err != nil {
return err
}
- return gui.renderString(g, "main", leftContent)
+ return gui.renderString(gui.g, "main", leftContent)
}
func (gui *Gui) refreshFiles() error {
@@ -136,7 +140,7 @@ func (gui *Gui) refreshFiles() error {
if g.CurrentView() == filesView || (g.CurrentView() == gui.getMainView() && gui.State.Context == "merging") {
newSelectedFile, _ := gui.getSelectedFile(gui.g)
alreadySelected := newSelectedFile.Name == selectedFile.Name
- return gui.handleFileSelect(g, filesView, alreadySelected)
+ return gui.selectFile(alreadySelected)
}
return nil
})
@@ -144,28 +148,6 @@ func (gui *Gui) refreshFiles() error {
return nil
}
-func (gui *Gui) handleFilesNextLine(g *gocui.Gui, v *gocui.View) error {
- if gui.popupPanelFocused() {
- return nil
- }
-
- panelState := gui.State.Panels.Files
- gui.changeSelectedLine(&panelState.SelectedLine, len(gui.State.Files), false)
-
- return gui.handleFileSelect(gui.g, v, false)
-}
-
-func (gui *Gui) handleFilesPrevLine(g *gocui.Gui, v *gocui.View) error {
- if gui.popupPanelFocused() {
- return nil
- }
-
- panelState := gui.State.Panels.Files
- gui.changeSelectedLine(&panelState.SelectedLine, len(gui.State.Files), true)
-
- return gui.handleFileSelect(gui.g, v, false)
-}
-
// specific functions
func (gui *Gui) stagedFiles() []*commands.File {
@@ -248,7 +230,7 @@ func (gui *Gui) handleFilePress(g *gocui.Gui, v *gocui.View) error {
return err
}
- return gui.handleFileSelect(g, v, true)
+ return gui.selectFile(true)
}
func (gui *Gui) allFilesStaged() bool {
@@ -275,7 +257,7 @@ func (gui *Gui) handleStageAll(g *gocui.Gui, v *gocui.View) error {
return err
}
- return gui.handleFileSelect(g, v, false)
+ return gui.handleFileSelect(gui.g, v)
}
func (gui *Gui) handleIgnoreFile(g *gocui.Gui, v *gocui.View) error {
diff --git a/pkg/gui/gui.go b/pkg/gui/gui.go
index 9ad461bc7..42d79647f 100644
--- a/pkg/gui/gui.go
+++ b/pkg/gui/gui.go
@@ -110,7 +110,6 @@ type filePanelState struct {
// TODO: consider splitting this out into the window and the branches view
type branchPanelState struct {
SelectedLine int
- ContextIndex int
}
type remotePanelState struct {
@@ -490,7 +489,6 @@ func (gui *Gui) layout(g *gocui.Gui) error {
}
branchesView.Title = gui.Tr.SLocalize("BranchesTitle")
branchesView.Tabs = []string{"Local Branches", "Remotes"}
- branchesView.TabIndex = gui.State.Panels.Branches.ContextIndex
branchesView.FgColor = textColor
}
@@ -632,6 +630,8 @@ func (gui *Gui) onInitialViewsCreation() error {
return err
}
+ gui.getBranchesView().Context = "local-branches"
+
return gui.loadNewRepo()
}
diff --git a/pkg/gui/keybindings.go b/pkg/gui/keybindings.go
index c6f5294c4..6d198443f 100644
--- a/pkg/gui/keybindings.go
+++ b/pkg/gui/keybindings.go
@@ -332,6 +332,7 @@ func (gui *Gui) GetInitialKeybindings() []*Binding {
},
{
ViewName: "branches",
+ Contexts: []string{"local-branches"},
Key: gocui.KeySpace,
Modifier: gocui.ModNone,
Handler: gui.handleBranchPress,
@@ -339,6 +340,7 @@ func (gui *Gui) GetInitialKeybindings() []*Binding {
},
{
ViewName: "branches",
+ Contexts: []string{"local-branches"},
Key: 'o',
Modifier: gocui.ModNone,
Handler: gui.handleCreatePullRequestPress,
@@ -346,6 +348,7 @@ func (gui *Gui) GetInitialKeybindings() []*Binding {
},
{
ViewName: "branches",
+ Contexts: []string{"local-branches"},
Key: 'c',
Modifier: gocui.ModNone,
Handler: gui.handleCheckoutByName,
@@ -353,6 +356,7 @@ func (gui *Gui) GetInitialKeybindings() []*Binding {
},
{
ViewName: "branches",
+ Contexts: []string{"local-branches"},
Key: 'F',
Modifier: gocui.ModNone,
Handler: gui.handleForceCheckout,
@@ -360,6 +364,7 @@ func (gui *Gui) GetInitialKeybindings() []*Binding {
},
{
ViewName: "branches",
+ Contexts: []string{"local-branches"},
Key: 'n',
Modifier: gocui.ModNone,
Handler: gui.handleNewBranch,
@@ -367,6 +372,7 @@ func (gui *Gui) GetInitialKeybindings() []*Binding {
},
{
ViewName: "branches",
+ Contexts: []string{"local-branches"},
Key: 'd',
Modifier: gocui.ModNone,
Handler: gui.handleDeleteBranch,
@@ -374,6 +380,7 @@ func (gui *Gui) GetInitialKeybindings() []*Binding {
},
{
ViewName: "branches",
+ Contexts: []string{"local-branches"},
Key: 'r',
Modifier: gocui.ModNone,
Handler: gui.handleRebase,
@@ -381,6 +388,7 @@ func (gui *Gui) GetInitialKeybindings() []*Binding {
},
{
ViewName: "branches",
+ Contexts: []string{"local-branches"},
Key: 'M',
Modifier: gocui.ModNone,
Handler: gui.handleMerge,
@@ -388,6 +396,7 @@ func (gui *Gui) GetInitialKeybindings() []*Binding {
},
{
ViewName: "branches",
+ Contexts: []string{"local-branches"},
Key: 'f',
Modifier: gocui.ModNone,
Handler: gui.handleFastForward,
@@ -978,6 +987,50 @@ func (gui *Gui) GetInitialKeybindings() []*Binding {
Handler: gui.handlePopFileSnapshot,
Description: gui.Tr.SLocalize("Undo"),
},
+ // click handlers
+ {
+ ViewName: "menu",
+ Key: gocui.MouseLeft,
+ Modifier: gocui.ModNone,
+ Handler: gui.handleMenuClick,
+ },
+ {
+ ViewName: "files",
+ Key: gocui.MouseLeft,
+ Modifier: gocui.ModNone,
+ Handler: gui.handleFilesClick,
+ },
+ {
+ ViewName: "branches",
+ Contexts: []string{"local-branches"},
+ Key: gocui.MouseLeft,
+ Modifier: gocui.ModNone,
+ Handler: gui.handleBranchesClick,
+ },
+ {
+ ViewName: "commits",
+ Key: gocui.MouseLeft,
+ Modifier: gocui.ModNone,
+ Handler: gui.handleCommitsClick,
+ },
+ {
+ ViewName: "stash",
+ Key: gocui.MouseLeft,
+ Modifier: gocui.ModNone,
+ Handler: gui.handleStashEntrySelect,
+ },
+ {
+ ViewName: "status",
+ Key: gocui.MouseLeft,
+ Modifier: gocui.ModNone,
+ Handler: gui.handleStatusClick,
+ },
+ {
+ ViewName: "commitFiles",
+ Key: gocui.MouseLeft,
+ Modifier: gocui.ModNone,
+ Handler: gui.handleCommitFilesClick,
+ },
}
for _, viewName := range []string{"status", "branches", "files", "commits", "commitFiles", "stash", "menu"} {
@@ -995,29 +1048,14 @@ func (gui *Gui) GetInitialKeybindings() []*Binding {
bindings = append(bindings, &Binding{ViewName: "", Key: rune(i+1) + '0', Modifier: gocui.ModNone, Handler: gui.goToSideView(viewName)})
}
- listPanelMap := map[string]struct {
- prevLine func(*gocui.Gui, *gocui.View) error
- nextLine func(*gocui.Gui, *gocui.View) error
- onClick func(*gocui.Gui, *gocui.View) error
- }{
- "menu": {prevLine: gui.handleMenuPrevLine, nextLine: gui.handleMenuNextLine, onClick: gui.handleMenuClick},
- "files": {prevLine: gui.handleFilesPrevLine, nextLine: gui.handleFilesNextLine, onClick: gui.handleFilesClick},
- "branches": {prevLine: gui.handleBranchesPrevLine, nextLine: gui.handleBranchesNextLine, onClick: gui.handleBranchesClick},
- "commits": {prevLine: gui.handleCommitsPrevLine, nextLine: gui.handleCommitsNextLine, onClick: gui.handleCommitsClick},
- "stash": {prevLine: gui.handleStashPrevLine, nextLine: gui.handleStashNextLine, onClick: gui.handleStashEntrySelect},
- "status": {onClick: gui.handleStatusClick},
- "commitFiles": {prevLine: gui.handleCommitFilesPrevLine, nextLine: gui.handleCommitFilesNextLine, onClick: gui.handleCommitFilesClick},
- }
-
- for viewName, functions := range listPanelMap {
+ for _, listView := range gui.getListViews() {
bindings = append(bindings, []*Binding{
- {ViewName: viewName, Key: 'k', Modifier: gocui.ModNone, Handler: functions.prevLine},
- {ViewName: viewName, Key: gocui.KeyArrowUp, Modifier: gocui.ModNone, Handler: functions.prevLine},
- {ViewName: viewName, Key: gocui.MouseWheelUp, Modifier: gocui.ModNone, Handler: functions.prevLine},
- {ViewName: viewName, Key: 'j', Modifier: gocui.ModNone, Handler: functions.nextLine},
- {ViewName: viewName, Key: gocui.KeyArrowDown, Modifier: gocui.ModNone, Handler: functions.nextLine},
- {ViewName: viewName, Key: gocui.MouseWheelDown, Modifier: gocui.ModNone, Handler: functions.nextLine},
- {ViewName: viewName, Key: gocui.MouseLeft, Modifier: gocui.ModNone, Handler: functions.onClick},
+ {ViewName: listView.viewName, Contexts: []string{listView.context}, Key: 'k', Modifier: gocui.ModNone, Handler: listView.handlePrevLine},
+ {ViewName: listView.viewName, Contexts: []string{listView.context}, Key: gocui.KeyArrowUp, Modifier: gocui.ModNone, Handler: listView.handlePrevLine},
+ {ViewName: listView.viewName, Contexts: []string{listView.context}, Key: gocui.MouseWheelUp, Modifier: gocui.ModNone, Handler: listView.handlePrevLine},
+ {ViewName: listView.viewName, Contexts: []string{listView.context}, Key: 'j', Modifier: gocui.ModNone, Handler: listView.handleNextLine},
+ {ViewName: listView.viewName, Contexts: []string{listView.context}, Key: gocui.KeyArrowDown, Modifier: gocui.ModNone, Handler: listView.handleNextLine},
+ {ViewName: listView.viewName, Contexts: []string{listView.context}, Key: gocui.MouseWheelDown, Modifier: gocui.ModNone, Handler: listView.handleNextLine},
}...)
}
diff --git a/pkg/gui/list_view.go b/pkg/gui/list_view.go
new file mode 100644
index 000000000..d3f4f8a0c
--- /dev/null
+++ b/pkg/gui/list_view.go
@@ -0,0 +1,94 @@
+package gui
+
+import "github.com/jesseduffield/gocui"
+
+type listView struct {
+ viewName string
+ context string
+ getItemsLength func() int
+ getSelectedLine func() *int
+ handleItemSelect func(g *gocui.Gui, v *gocui.View) error
+ gui *Gui
+ rendersToMainView bool
+}
+
+func (lv *listView) handlePrevLine(g *gocui.Gui, v *gocui.View) error {
+ return lv.handleLineChange(-1)
+}
+
+func (lv *listView) handleNextLine(g *gocui.Gui, v *gocui.View) error {
+ return lv.handleLineChange(1)
+}
+
+func (lv *listView) handleLineChange(change int) error {
+ if !lv.gui.isPopupPanel(lv.viewName) && lv.gui.popupPanelFocused() {
+ return nil
+ }
+
+ lv.gui.changeSelectedLine(lv.getSelectedLine(), lv.getItemsLength(), change)
+
+ if lv.rendersToMainView {
+ if err := lv.gui.resetOrigin(lv.gui.getMainView()); err != nil {
+ return err
+ }
+ }
+ view, err := lv.gui.g.View(lv.viewName)
+ if err != nil {
+ return err
+ }
+ return lv.handleItemSelect(lv.gui.g, view)
+}
+
+func (gui *Gui) getListViews() []*listView {
+ return []*listView{
+ {
+ viewName: "menu",
+ getItemsLength: func() int { return gui.getMenuView().LinesHeight() },
+ getSelectedLine: func() *int { return &gui.State.Panels.Menu.SelectedLine },
+ handleItemSelect: gui.handleMenuSelect,
+ gui: gui,
+ rendersToMainView: false,
+ },
+ {
+ viewName: "files",
+ getItemsLength: func() int { return len(gui.State.Files) },
+ getSelectedLine: func() *int { return &gui.State.Panels.Files.SelectedLine },
+ handleItemSelect: gui.handleFileSelect,
+ gui: gui,
+ rendersToMainView: true,
+ },
+ {
+ viewName: "branches",
+ context: "local-branches",
+ getItemsLength: func() int { return len(gui.State.Branches) },
+ getSelectedLine: func() *int { return &gui.State.Panels.Branches.SelectedLine },
+ handleItemSelect: gui.handleBranchSelect,
+ gui: gui,
+ rendersToMainView: true,
+ },
+ {
+ viewName: "commits",
+ getItemsLength: func() int { return len(gui.State.Commits) },
+ getSelectedLine: func() *int { return &gui.State.Panels.Commits.SelectedLine },
+ handleItemSelect: gui.handleCommitSelect,
+ gui: gui,
+ rendersToMainView: true,
+ },
+ {
+ viewName: "stash",
+ getItemsLength: func() int { return len(gui.State.StashEntries) },
+ getSelectedLine: func() *int { return &gui.State.Panels.Stash.SelectedLine },
+ handleItemSelect: gui.handleStashEntrySelect,
+ gui: gui,
+ rendersToMainView: true,
+ },
+ {
+ viewName: "commitFiles",
+ getItemsLength: func() int { return len(gui.State.CommitFiles) },
+ getSelectedLine: func() *int { return &gui.State.Panels.CommitFiles.SelectedLine },
+ handleItemSelect: gui.handleCommitFileSelect,
+ gui: gui,
+ rendersToMainView: true,
+ },
+ }
+}
diff --git a/pkg/gui/menu_panel.go b/pkg/gui/menu_panel.go
index 17be7bea8..a7e3f2e14 100644
--- a/pkg/gui/menu_panel.go
+++ b/pkg/gui/menu_panel.go
@@ -14,20 +14,6 @@ func (gui *Gui) handleMenuSelect(g *gocui.Gui, v *gocui.View) error {
return gui.focusPoint(0, gui.State.Panels.Menu.SelectedLine, gui.State.MenuItemCount, v)
}
-func (gui *Gui) handleMenuNextLine(g *gocui.Gui, v *gocui.View) error {
- panelState := gui.State.Panels.Menu
- gui.changeSelectedLine(&panelState.SelectedLine, v.LinesHeight(), false)
-
- return gui.handleMenuSelect(g, v)
-}
-
-func (gui *Gui) handleMenuPrevLine(g *gocui.Gui, v *gocui.View) error {
- panelState := gui.State.Panels.Menu
- gui.changeSelectedLine(&panelState.SelectedLine, v.LinesHeight(), true)
-
- return gui.handleMenuSelect(g, v)
-}
-
// specific functions
func (gui *Gui) renderMenuOptions() error {
diff --git a/pkg/gui/stash_panel.go b/pkg/gui/stash_panel.go
index 055a4773d..8ccdc9880 100644
--- a/pkg/gui/stash_panel.go
+++ b/pkg/gui/stash_panel.go
@@ -71,34 +71,6 @@ func (gui *Gui) refreshStashEntries(g *gocui.Gui) error {
return nil
}
-func (gui *Gui) handleStashNextLine(g *gocui.Gui, v *gocui.View) error {
- if gui.popupPanelFocused() {
- return nil
- }
-
- panelState := gui.State.Panels.Stash
- gui.changeSelectedLine(&panelState.SelectedLine, len(gui.State.StashEntries), false)
-
- if err := gui.resetOrigin(gui.getMainView()); err != nil {
- return err
- }
- return gui.handleStashEntrySelect(gui.g, v)
-}
-
-func (gui *Gui) handleStashPrevLine(g *gocui.Gui, v *gocui.View) error {
- if gui.popupPanelFocused() {
- return nil
- }
-
- panelState := gui.State.Panels.Stash
- gui.changeSelectedLine(&panelState.SelectedLine, len(gui.State.StashEntries), true)
-
- if err := gui.resetOrigin(gui.getMainView()); err != nil {
- return err
- }
- return gui.handleStashEntrySelect(gui.g, v)
-}
-
// specific functions
func (gui *Gui) handleStashApply(g *gocui.Gui, v *gocui.View) error {
diff --git a/pkg/gui/view_helpers.go b/pkg/gui/view_helpers.go
index a8e4872e1..c23bf3e47 100644
--- a/pkg/gui/view_helpers.go
+++ b/pkg/gui/view_helpers.go
@@ -101,7 +101,7 @@ func (gui *Gui) newLineFocused(g *gocui.Gui, v *gocui.View) error {
case "status":
return gui.handleStatusSelect(g, v)
case "files":
- return gui.handleFileSelect(g, v, false)
+ return gui.handleFileSelect(g, v)
case "branches":
return gui.handleBranchSelect(g, v)
case "commits":
@@ -315,6 +315,11 @@ func (gui *Gui) getCommitFilesView() *gocui.View {
return v
}
+func (gui *Gui) getMenuView() *gocui.View {
+ v, _ := gui.g.View("menu")
+ return v
+}
+
func (gui *Gui) trimmedContent(v *gocui.View) string {
return strings.TrimSpace(v.Buffer())
}
@@ -362,19 +367,17 @@ func (gui *Gui) generalFocusLine(lineNumber int, bottomLine int, v *gocui.View)
return nil
}
-func (gui *Gui) changeSelectedLine(line *int, total int, up bool) {
- if up {
- if *line == -1 || *line == 0 {
- return
- }
-
- *line--
+func (gui *Gui) changeSelectedLine(line *int, total int, change int) {
+ // TODO: find out why we're doing this
+ if *line == -1 {
+ return
+ }
+ if *line+change < 0 {
+ *line = 0
+ } else if *line+change >= total {
+ *line = total - 1
} else {
- if *line == -1 || *line == total-1 {
- return
- }
-
- *line++
+ *line += change
}
}