From 8aa1062e0693289188c2fb705f2fa15d014f07a0 Mon Sep 17 00:00:00 2001 From: Jesse Duffield Date: Sat, 16 Nov 2019 14:00:27 +1100 Subject: extract out some logic for list views --- pkg/gui/branches_panel.go | 37 +++-------------- pkg/gui/commit_files_panel.go | 14 ------- pkg/gui/commits_panel.go | 28 ------------- pkg/gui/files_panel.go | 52 ++++++++---------------- pkg/gui/gui.go | 4 +- pkg/gui/keybindings.go | 82 +++++++++++++++++++++++++++---------- pkg/gui/list_view.go | 94 +++++++++++++++++++++++++++++++++++++++++++ pkg/gui/menu_panel.go | 14 ------- pkg/gui/stash_panel.go | 28 ------------- pkg/gui/view_helpers.go | 29 +++++++------ 10 files changed, 194 insertions(+), 188 deletions(-) create mode 100644 pkg/gui/list_view.go 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 } } -- cgit v1.2.3