diff options
Diffstat (limited to 'pkg')
-rw-r--r-- | pkg/gui/branches_panel.go | 2 | ||||
-rw-r--r-- | pkg/gui/commit_files_panel.go | 2 | ||||
-rw-r--r-- | pkg/gui/commits_panel.go | 2 | ||||
-rw-r--r-- | pkg/gui/files_panel.go | 2 | ||||
-rw-r--r-- | pkg/gui/gui.go | 22 | ||||
-rw-r--r-- | pkg/gui/menu_panel.go | 5 | ||||
-rw-r--r-- | pkg/gui/options_menu_panel.go | 2 | ||||
-rw-r--r-- | pkg/gui/rebase_options_panel.go | 2 | ||||
-rw-r--r-- | pkg/gui/recent_repos_panel.go | 2 | ||||
-rw-r--r-- | pkg/gui/stash_panel.go | 2 | ||||
-rw-r--r-- | pkg/gui/view_helpers.go | 6 |
11 files changed, 28 insertions, 21 deletions
diff --git a/pkg/gui/branches_panel.go b/pkg/gui/branches_panel.go index 8ee1b451d..4ce53bebd 100644 --- a/pkg/gui/branches_panel.go +++ b/pkg/gui/branches_panel.go @@ -34,7 +34,7 @@ func (gui *Gui) handleBranchSelect(g *gocui.Gui, v *gocui.View) error { return gui.renderString(g, "main", gui.Tr.SLocalize("NoBranchesThisRepo")) } branch := gui.getSelectedBranch() - if err := gui.focusPoint(0, gui.State.Panels.Branches.SelectedLine, v); err != nil { + if err := gui.focusPoint(0, gui.State.Panels.Branches.SelectedLine, len(gui.State.Branches), v); err != nil { return err } go func() { diff --git a/pkg/gui/commit_files_panel.go b/pkg/gui/commit_files_panel.go index e8c20e0e7..2cdda6815 100644 --- a/pkg/gui/commit_files_panel.go +++ b/pkg/gui/commit_files_panel.go @@ -20,7 +20,7 @@ func (gui *Gui) handleCommitFileSelect(g *gocui.Gui, v *gocui.View) error { return gui.renderString(g, "commitFiles", gui.Tr.SLocalize("NoCommiteFiles")) } - if err := gui.focusPoint(0, gui.State.Panels.CommitFiles.SelectedLine, v); err != nil { + if err := gui.focusPoint(0, gui.State.Panels.CommitFiles.SelectedLine, len(gui.State.CommitFiles), v); err != nil { return err } commitText, err := gui.GitCommand.ShowCommitFile(commitFile.Sha, commitFile.Name) diff --git a/pkg/gui/commits_panel.go b/pkg/gui/commits_panel.go index 627b35835..1bd8be4a1 100644 --- a/pkg/gui/commits_panel.go +++ b/pkg/gui/commits_panel.go @@ -36,7 +36,7 @@ func (gui *Gui) handleCommitSelect(g *gocui.Gui, v *gocui.View) error { return gui.renderString(g, "main", gui.Tr.SLocalize("NoCommitsThisBranch")) } - if err := gui.focusPoint(0, gui.State.Panels.Commits.SelectedLine, v); err != nil { + if err := gui.focusPoint(0, gui.State.Panels.Commits.SelectedLine, len(gui.State.Commits), v); err != nil { return err } commitText, err := gui.GitCommand.Show(commit.Sha) diff --git a/pkg/gui/files_panel.go b/pkg/gui/files_panel.go index 45b3f4dd7..728ad2f97 100644 --- a/pkg/gui/files_panel.go +++ b/pkg/gui/files_panel.go @@ -63,7 +63,7 @@ func (gui *Gui) handleFileSelect(g *gocui.Gui, v *gocui.View, alreadySelected bo return gui.renderString(g, "main", gui.Tr.SLocalize("NoChangedFiles")) } - if err := gui.focusPoint(0, gui.State.Panels.Files.SelectedLine, v); err != nil { + if err := gui.focusPoint(0, gui.State.Panels.Files.SelectedLine, len(gui.State.Files), v); err != nil { return err } diff --git a/pkg/gui/gui.go b/pkg/gui/gui.go index d4ce0b3dc..07d51e2bc 100644 --- a/pkg/gui/gui.go +++ b/pkg/gui/gui.go @@ -135,6 +135,7 @@ type guiState struct { Commits []*commands.Commit StashEntries []*commands.StashEntry CommitFiles []*commands.CommitFile + MenuItemCount int // can't store the actual list because it's of interface{} type PreviousView string Platform commands.Platform Updating bool @@ -480,20 +481,25 @@ func (gui *Gui) layout(g *gocui.Gui) error { } } - listViews := map[*gocui.View]int{ - filesView: gui.State.Panels.Files.SelectedLine, - branchesView: gui.State.Panels.Branches.SelectedLine, - commitsView: gui.State.Panels.Commits.SelectedLine, - stashView: gui.State.Panels.Stash.SelectedLine, + type listViewState struct { + selectedLine int + lineCount int + } + + listViews := map[*gocui.View]listViewState{ + filesView: {selectedLine: gui.State.Panels.Files.SelectedLine, lineCount: len(gui.State.Files)}, + branchesView: {selectedLine: gui.State.Panels.Branches.SelectedLine, lineCount: len(gui.State.Branches)}, + commitsView: {selectedLine: gui.State.Panels.Commits.SelectedLine, lineCount: len(gui.State.Commits)}, + stashView: {selectedLine: gui.State.Panels.Stash.SelectedLine, lineCount: len(gui.State.StashEntries)}, } // menu view might not exist so we check to be safe if menuView, err := gui.g.View("menu"); err == nil { - listViews[menuView] = gui.State.Panels.Menu.SelectedLine + listViews[menuView] = listViewState{selectedLine: gui.State.Panels.Menu.SelectedLine, lineCount: gui.State.MenuItemCount} } - for view, selectedLine := range listViews { + for view, state := range listViews { // check if the selected line is now out of view and if so refocus it - if err := gui.focusPoint(0, selectedLine, view); err != nil { + if err := gui.focusPoint(0, state.selectedLine, state.lineCount, view); err != nil { return err } } diff --git a/pkg/gui/menu_panel.go b/pkg/gui/menu_panel.go index dbfa0cf01..d78a67199 100644 --- a/pkg/gui/menu_panel.go +++ b/pkg/gui/menu_panel.go @@ -10,7 +10,7 @@ import ( // list panel functions func (gui *Gui) handleMenuSelect(g *gocui.Gui, v *gocui.View) error { - return gui.focusPoint(0, gui.State.Panels.Menu.SelectedLine, v) + return gui.focusPoint(0, gui.State.Panels.Menu.SelectedLine, gui.State.MenuItemCount, v) } func (gui *Gui) handleMenuNextLine(g *gocui.Gui, v *gocui.View) error { @@ -51,8 +51,9 @@ func (gui *Gui) handleMenuClose(g *gocui.Gui, v *gocui.View) error { return gui.returnFocus(g, v) } -func (gui *Gui) createMenu(title string, items interface{}, handlePress func(int) error) error { +func (gui *Gui) createMenu(title string, items interface{}, itemCount int, handlePress func(int) error) error { isFocused := gui.g.CurrentView().Name() == "menu" + gui.State.MenuItemCount = itemCount list, err := utils.RenderList(items, isFocused) if err != nil { return err diff --git a/pkg/gui/options_menu_panel.go b/pkg/gui/options_menu_panel.go index d217fb8f2..dfd354839 100644 --- a/pkg/gui/options_menu_panel.go +++ b/pkg/gui/options_menu_panel.go @@ -49,5 +49,5 @@ func (gui *Gui) handleCreateOptionsMenu(g *gocui.Gui, v *gocui.View) error { return bindings[index].Handler(g, v) } - return gui.createMenu(strings.Title(gui.Tr.SLocalize("menu")), bindings, handleMenuPress) + return gui.createMenu(strings.Title(gui.Tr.SLocalize("menu")), bindings, len(bindings), handleMenuPress) } diff --git a/pkg/gui/rebase_options_panel.go b/pkg/gui/rebase_options_panel.go index 337d81692..633574275 100644 --- a/pkg/gui/rebase_options_panel.go +++ b/pkg/gui/rebase_options_panel.go @@ -38,7 +38,7 @@ func (gui *Gui) handleCreateRebaseOptionsMenu(g *gocui.Gui, v *gocui.View) error title = gui.Tr.SLocalize("RebaseOptionsTitle") } - return gui.createMenu(title, options, handleMenuPress) + return gui.createMenu(title, options, len(options), handleMenuPress) } func (gui *Gui) genericMergeCommand(command string) error { diff --git a/pkg/gui/recent_repos_panel.go b/pkg/gui/recent_repos_panel.go index 3f92431ea..a9ea5d481 100644 --- a/pkg/gui/recent_repos_panel.go +++ b/pkg/gui/recent_repos_panel.go @@ -44,7 +44,7 @@ func (gui *Gui) handleCreateRecentReposMenu(g *gocui.Gui, v *gocui.View) error { return gui.Errors.ErrSwitchRepo } - return gui.createMenu(gui.Tr.SLocalize("RecentRepos"), recentRepos, handleMenuPress) + return gui.createMenu(gui.Tr.SLocalize("RecentRepos"), recentRepos, len(recentRepos), handleMenuPress) } // updateRecentRepoList registers the fact that we opened lazygit in this repo, diff --git a/pkg/gui/stash_panel.go b/pkg/gui/stash_panel.go index 05844f0ac..9c1851971 100644 --- a/pkg/gui/stash_panel.go +++ b/pkg/gui/stash_panel.go @@ -31,7 +31,7 @@ func (gui *Gui) handleStashEntrySelect(g *gocui.Gui, v *gocui.View) error { if stashEntry == nil { return gui.renderString(g, "main", gui.Tr.SLocalize("NoStashEntries")) } - if err := gui.focusPoint(0, gui.State.Panels.Stash.SelectedLine, v); err != nil { + if err := gui.focusPoint(0, gui.State.Panels.Stash.SelectedLine, len(gui.State.StashEntries), v); err != nil { return err } go func() { diff --git a/pkg/gui/view_helpers.go b/pkg/gui/view_helpers.go index a258ca7e8..c7ee8dc88 100644 --- a/pkg/gui/view_helpers.go +++ b/pkg/gui/view_helpers.go @@ -180,8 +180,8 @@ func (gui *Gui) resetOrigin(v *gocui.View) error { } // if the cursor down past the last item, move it to the last line -func (gui *Gui) focusPoint(cx int, cy int, v *gocui.View) error { - if cy < 0 { +func (gui *Gui) focusPoint(cx int, cy int, lineCount int, v *gocui.View) error { + if cy < 0 || cy > lineCount { return nil } ox, oy := v.Origin() @@ -191,7 +191,7 @@ func (gui *Gui) focusPoint(cx int, cy int, v *gocui.View) error { // if line is above origin, move origin and set cursor to zero // if line is below origin + height, move origin and set cursor to max // otherwise set cursor to value - origin - if ly > v.LinesHeight() { + if ly > lineCount { if err := v.SetCursor(cx, cy); err != nil { return err } |