From 56a6ee6afb44a560c6941e3b8b7e1b8ae082dd30 Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Sun, 18 Aug 2024 21:42:54 +0200 Subject: [PATCH 1/2] Cleanup: move SetLineSelectMode into AdjustSelectedLineIdx --- pkg/gui/controllers/patch_explorer_controller.go | 2 -- pkg/gui/patch_exploring/state.go | 1 + 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/pkg/gui/controllers/patch_explorer_controller.go b/pkg/gui/controllers/patch_explorer_controller.go index 6d3290f0411..999dc15e97e 100644 --- a/pkg/gui/controllers/patch_explorer_controller.go +++ b/pkg/gui/controllers/patch_explorer_controller.go @@ -244,14 +244,12 @@ func (self *PatchExplorerController) HandleScrollRight() error { } func (self *PatchExplorerController) HandlePrevPage() error { - self.context.GetState().SetLineSelectMode() self.context.GetState().AdjustSelectedLineIdx(-self.context.GetViewTrait().PageDelta()) return nil } func (self *PatchExplorerController) HandleNextPage() error { - self.context.GetState().SetLineSelectMode() self.context.GetState().AdjustSelectedLineIdx(self.context.GetViewTrait().PageDelta()) return nil diff --git a/pkg/gui/patch_exploring/state.go b/pkg/gui/patch_exploring/state.go index 03c933c7e28..4a62ca2f027 100644 --- a/pkg/gui/patch_exploring/state.go +++ b/pkg/gui/patch_exploring/state.go @@ -239,6 +239,7 @@ func (s *State) CurrentLineNumber() int { } func (s *State) AdjustSelectedLineIdx(change int) { + s.SetLineSelectMode() s.SelectLine(s.selectedLineIdx + change) } From d3940729ebe78ad8067a3ffbfccdc44ea8f01d6c Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Sun, 18 Aug 2024 21:41:49 +0200 Subject: [PATCH 2/2] Allow using `<`/`>` and `,`/`.` in sticky range select mode in patch explorer They still cancel hunk selection mode, setting it to line selection mode, but if range selection mode is on, we keep it on. --- pkg/gui/patch_exploring/state.go | 12 +++++++++--- pkg/integration/tests/ui/range_select.go | 10 +++++----- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/pkg/gui/patch_exploring/state.go b/pkg/gui/patch_exploring/state.go index 4a62ca2f027..40a28e7f7e8 100644 --- a/pkg/gui/patch_exploring/state.go +++ b/pkg/gui/patch_exploring/state.go @@ -123,6 +123,12 @@ func (s *State) SetLineSelectMode() { s.selectMode = LINE } +func (s *State) DismissHunkSelectMode() { + if s.SelectingHunk() { + s.selectMode = LINE + } +} + // For when you move the cursor without holding shift (meaning if we're in // a non-sticky range select, we'll cancel it) func (s *State) SelectLine(newSelectedLineIdx int) { @@ -239,7 +245,7 @@ func (s *State) CurrentLineNumber() int { } func (s *State) AdjustSelectedLineIdx(change int) { - s.SetLineSelectMode() + s.DismissHunkSelectMode() s.SelectLine(s.selectedLineIdx + change) } @@ -256,12 +262,12 @@ func (s *State) PlainRenderSelected() string { } func (s *State) SelectBottom() { - s.SetLineSelectMode() + s.DismissHunkSelectMode() s.SelectLine(s.patch.LineCount() - 1) } func (s *State) SelectTop() { - s.SetLineSelectMode() + s.DismissHunkSelectMode() s.SelectLine(0) } diff --git a/pkg/integration/tests/ui/range_select.go b/pkg/integration/tests/ui/range_select.go index 4885c7cb41a..abc0186daf1 100644 --- a/pkg/integration/tests/ui/range_select.go +++ b/pkg/integration/tests/ui/range_select.go @@ -14,6 +14,7 @@ import ( // (sticky range, press 'v') -> no range // (sticky range, press 'escape') -> no range // (sticky range, press arrow) -> sticky range +// (sticky range, press `<`/`>` or `,`/`.`) -> sticky range // (sticky range, press shift+arrow) -> nonsticky range // (nonsticky range, press 'v') -> no range // (nonsticky range, press 'escape') -> no range @@ -138,19 +139,18 @@ var RangeSelect = NewIntegrationTest(NewIntegrationTestArgs{ SelectedLines( Contains("line 8"), ). + // (sticky range, press '>') -> sticky range Press(keys.Universal.ToggleRangeSelect). - SelectedLines( - Contains("line 8"), - ). - SelectNextItem(). + Press(keys.Universal.GotoBottom). SelectedLines( Contains("line 8"), Contains("line 9"), + Contains("line 10"), ). // (sticky range, press 'escape') -> no range PressEscape(). SelectedLines( - Contains("line 9"), + Contains("line 10"), ) }