diff options
Diffstat (limited to 'pkg')
-rw-r--r-- | pkg/gui/context/search_trait.go | 40 | ||||
-rw-r--r-- | pkg/gui/controllers/helpers/search_helper.go | 3 | ||||
-rw-r--r-- | pkg/gui/types/context.go | 1 | ||||
-rw-r--r-- | pkg/integration/tests/filter_and_search/new_search.go | 39 | ||||
-rw-r--r-- | pkg/integration/tests/test_list.go | 1 |
5 files changed, 67 insertions, 17 deletions
diff --git a/pkg/gui/context/search_trait.go b/pkg/gui/context/search_trait.go index 264c8217d..b8faf0757 100644 --- a/pkg/gui/context/search_trait.go +++ b/pkg/gui/context/search_trait.go @@ -37,20 +37,32 @@ func (self *SearchTrait) ClearSearchString() { func (self *SearchTrait) IsSearchableContext() {} func (self *SearchTrait) onSelectItemWrapper(innerFunc func(int) error) func(int, int, int) error { - keybindingConfig := self.c.UserConfig.Keybinding + return func(selectedLineIdx int, index int, total int) error { + self.RenderSearchStatus(index, total) - return func(y int, index int, total int) error { - if total == 0 { - self.c.SetViewContent( - self.c.Views().Search, - fmt.Sprintf( - self.c.Tr.NoMatchesFor, - self.searchString, - theme.OptionsFgColor.Sprintf(self.c.Tr.ExitSearchMode, keybindings.Label(keybindingConfig.Universal.Return)), - ), - ) - return nil + if total != 0 { + if err := innerFunc(selectedLineIdx); err != nil { + return err + } } + + return nil + } +} + +func (self *SearchTrait) RenderSearchStatus(index int, total int) { + keybindingConfig := self.c.UserConfig.Keybinding + + if total == 0 { + self.c.SetViewContent( + self.c.Views().Search, + fmt.Sprintf( + self.c.Tr.NoMatchesFor, + self.searchString, + theme.OptionsFgColor.Sprintf(self.c.Tr.ExitSearchMode, keybindings.Label(keybindingConfig.Universal.Return)), + ), + ) + } else { self.c.SetViewContent( self.c.Views().Search, fmt.Sprintf( @@ -66,10 +78,6 @@ func (self *SearchTrait) onSelectItemWrapper(innerFunc func(int) error) func(int ), ), ) - if err := innerFunc(y); err != nil { - return err - } - return nil } } diff --git a/pkg/gui/controllers/helpers/search_helper.go b/pkg/gui/controllers/helpers/search_helper.go index 8764337b1..c036bda3d 100644 --- a/pkg/gui/controllers/helpers/search_helper.go +++ b/pkg/gui/controllers/helpers/search_helper.go @@ -84,7 +84,8 @@ func (self *SearchHelper) DisplaySearchStatus(context types.ISearchableContext) state.Context = context self.searchPrefixView().SetContent(self.c.Tr.SearchPrefix) - _ = context.GetView().SelectCurrentSearchResult() + index, totalCount := context.GetView().GetSearchStatus() + context.RenderSearchStatus(index, totalCount) } func (self *SearchHelper) searchState() *types.SearchState { diff --git a/pkg/gui/types/context.go b/pkg/gui/types/context.go index fbc38df82..df16cf2bd 100644 --- a/pkg/gui/types/context.go +++ b/pkg/gui/types/context.go @@ -115,6 +115,7 @@ type ISearchableContext interface { ClearSearchString() IsSearching() bool IsSearchableContext() + RenderSearchStatus(int, int) } type DiffableContext interface { diff --git a/pkg/integration/tests/filter_and_search/new_search.go b/pkg/integration/tests/filter_and_search/new_search.go new file mode 100644 index 000000000..9186dc085 --- /dev/null +++ b/pkg/integration/tests/filter_and_search/new_search.go @@ -0,0 +1,39 @@ +package filter_and_search + +import ( + "github.com/jesseduffield/lazygit/pkg/config" + . "github.com/jesseduffield/lazygit/pkg/integration/components" +) + +// This is a regression test to ensure https://github.com/jesseduffield/lazygit/issues/2971 +// doesn't happen again + +var NewSearch = NewIntegrationTest(NewIntegrationTestArgs{ + Description: "Start a new search and verify the search begins from the current cursor position, not from the current search match", + ExtraCmdArgs: []string{}, + Skip: false, + SetupConfig: func(config *config.AppConfig) {}, + SetupRepo: func(shell *Shell) { + // need to create some branches, each with their own commits + shell.EmptyCommit("Add foo") + shell.EmptyCommit("Remove foo") + shell.EmptyCommit("Add bar") + shell.EmptyCommit("Remove bar") + }, + Run: func(t *TestDriver, keys config.KeybindingConfig) { + t.Views().Commits(). + Focus(). + Lines( + Contains(`Remove bar`).IsSelected(), + Contains(`Add bar`), + Contains(`Remove foo`), + Contains(`Add foo`), + ). + FilterOrSearch("Add"). + SelectedLine(Contains(`Add bar`)). + SelectPreviousItem(). + SelectedLine(Contains(`Remove bar`)). + FilterOrSearch("Remove"). + SelectedLine(Contains(`Remove bar`)) + }, +}) diff --git a/pkg/integration/tests/test_list.go b/pkg/integration/tests/test_list.go index f3b57a5dd..89019719a 100644 --- a/pkg/integration/tests/test_list.go +++ b/pkg/integration/tests/test_list.go @@ -134,6 +134,7 @@ var tests = []*components.IntegrationTest{ filter_and_search.FilterSearchHistory, filter_and_search.NestedFilter, filter_and_search.NestedFilterTransient, + filter_and_search.NewSearch, filter_by_path.CliArg, filter_by_path.SelectFile, filter_by_path.TypeFile, |