From 2b41a27d92fc7e50d14895fe8ab228f6a255ae49 Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Sat, 12 Jul 2025 16:19:46 +0200 Subject: [PATCH] Fix search results being off by two lines during rebase or in divergence view We forgot to convert the model indices to view indices in searchModelCommits. This needs to be done for search results to be highlighted correctly in the "divergence from upstream" view, which adds "--- Remote/Local ---" entries, and during a rebase, where we have "--- Pending rebase todos ---" and "--- Commits ---" which offset view indices from model indices. --- pkg/gui/context/local_commits_context.go | 8 +++++--- pkg/gui/context/sub_commits_context.go | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/pkg/gui/context/local_commits_context.go b/pkg/gui/context/local_commits_context.go index c43d041d3..c11770986 100644 --- a/pkg/gui/context/local_commits_context.go +++ b/pkg/gui/context/local_commits_context.go @@ -223,7 +223,7 @@ func (self *LocalCommitsContext) RefForAdjustingLineNumberInDiff() string { } func (self *LocalCommitsContext) ModelSearchResults(searchStr string, caseSensitive bool) []gocui.SearchPosition { - return searchModelCommits(caseSensitive, self.GetCommits(), self.ColumnPositions(), searchStr) + return searchModelCommits(caseSensitive, self.GetCommits(), self.ColumnPositions(), self.ModelIndexToViewIndex, searchStr) } func (self *LocalCommitsViewModel) SetLimitCommits(value bool) { @@ -266,7 +266,9 @@ func shouldShowGraph(c *ContextCommon) bool { return false } -func searchModelCommits(caseSensitive bool, commits []*models.Commit, columnPositions []int, searchStr string) []gocui.SearchPosition { +func searchModelCommits(caseSensitive bool, commits []*models.Commit, columnPositions []int, + modelToViewIndex func(int) int, searchStr string, +) []gocui.SearchPosition { if columnPositions == nil { // This should never happen. We are being called at a time where our // entire view content is scrolled out of view, so that we didn't draw @@ -283,7 +285,7 @@ func searchModelCommits(caseSensitive bool, commits []*models.Commit, columnPosi // searching for a commit hash that is longer than the truncated hash // that we render. So we just set the XStart and XEnd values to the // start and end of the commit hash column, which is the second one. - result := gocui.SearchPosition{XStart: columnPositions[1], XEnd: columnPositions[2] - 1, Y: idx} + result := gocui.SearchPosition{XStart: columnPositions[1], XEnd: columnPositions[2] - 1, Y: modelToViewIndex(idx)} return result, strings.Contains(normalize(commit.Hash()), searchStr) || strings.Contains(normalize(commit.Name), searchStr) || strings.Contains(normalize(commit.ExtraInfo), searchStr) // allow searching for tags diff --git a/pkg/gui/context/sub_commits_context.go b/pkg/gui/context/sub_commits_context.go index ac28aca2e..e489511a0 100644 --- a/pkg/gui/context/sub_commits_context.go +++ b/pkg/gui/context/sub_commits_context.go @@ -225,7 +225,7 @@ func (self *SubCommitsContext) RefForAdjustingLineNumberInDiff() string { } func (self *SubCommitsContext) ModelSearchResults(searchStr string, caseSensitive bool) []gocui.SearchPosition { - return searchModelCommits(caseSensitive, self.GetCommits(), self.ColumnPositions(), searchStr) + return searchModelCommits(caseSensitive, self.GetCommits(), self.ColumnPositions(), self.ModelIndexToViewIndex, searchStr) } func (self *SubCommitsContext) IndexForGotoBottom() int {