From 18e3b38c69da2828efac6adc2ea3a5e85f70e571 Mon Sep 17 00:00:00 2001 From: Junegunn Choi Date: Sun, 11 Dec 2022 00:59:34 +0900 Subject: Add 'next-selected' and 'prev-selected' actions Close #2749 --- src/options.go | 4 ++++ src/terminal.go | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+) (limited to 'src') diff --git a/src/options.go b/src/options.go index eceeffa2..4728adff 100644 --- a/src/options.go +++ b/src/options.go @@ -1064,6 +1064,10 @@ func parseKeymap(keymap map[tui.Event][]*action, str string) { appendAction(actPrevHistory) case "next-history": appendAction(actNextHistory) + case "prev-selected": + appendAction(actPrevSelected) + case "next-selected": + appendAction(actNextSelected) case "toggle-preview": appendAction(actTogglePreview) case "toggle-preview-wrap": diff --git a/src/terminal.go b/src/terminal.go index a5d54694..2bb785c1 100644 --- a/src/terminal.go +++ b/src/terminal.go @@ -316,7 +316,9 @@ const ( actPreviewHalfPageUp actPreviewHalfPageDown actPrevHistory + actPrevSelected actNextHistory + actNextSelected actExecute actExecuteSilent actExecuteMulti // Deprecated @@ -3016,6 +3018,22 @@ func (t *Terminal) Loop() { scrollPreviewTo(t.evaluateScrollOffset()) } } + case actNextSelected, actPrevSelected: + if len(t.selected) > 0 { + total := t.merger.Length() + for i := 1; i < total; i++ { + y := (t.cy + i) % total + if t.layout == layoutDefault && a.t == actNextSelected || + t.layout != layoutDefault && a.t == actPrevSelected { + y = (t.cy - i + total) % total + } + if _, found := t.selected[t.merger.Get(y).item.Index()]; found { + t.vset(y) + req(reqList) + break + } + } + } } return true } -- cgit v1.2.3