summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/options.go4
-rw-r--r--src/terminal.go18
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
}