diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/options.go | 4 | ||||
| -rw-r--r-- | src/terminal.go | 18 |
2 files changed, 22 insertions, 0 deletions
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 } |
