From 391aa148451b6c0a5e17ec2453f35afaba046f1f Mon Sep 17 00:00:00 2001 From: Junegunn Choi Date: Tue, 10 Oct 2023 18:58:22 +0900 Subject: Add mouse events for --bind Close #3473 --- src/options.go | 16 ++++++++++++++++ src/terminal.go | 46 +++++++++++++++++++++++++++++++++++----------- src/tui/tui.go | 8 ++++++++ 3 files changed, 59 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/options.go b/src/options.go index 3f4b5e92..1c650a2f 100644 --- a/src/options.go +++ b/src/options.go @@ -702,8 +702,24 @@ func parseKeyChordsImpl(str string, message string, exit func(string)) map[tui.E add(tui.LeftClick) case "right-click": add(tui.RightClick) + case "shift-left-click": + add(tui.SLeftClick) + case "shift-right-click": + add(tui.SRightClick) case "double-click": add(tui.DoubleClick) + case "scroll-up": + add(tui.ScrollUp) + case "scroll-down": + add(tui.ScrollDown) + case "shift-scroll-up": + add(tui.SScrollUp) + case "shift-scroll-down": + add(tui.SScrollDown) + case "preview-scroll-up": + add(tui.PreviewScrollUp) + case "preview-scroll-down": + add(tui.PreviewScrollDown) case "f10": add(tui.F10) case "f11": diff --git a/src/terminal.go b/src/terminal.go index 07525de3..56e472ce 100644 --- a/src/terminal.go +++ b/src/terminal.go @@ -525,6 +525,16 @@ func defaultKeymap() map[tui.Event][]*action { add(tui.Mouse, actMouse) add(tui.LeftClick, actIgnore) add(tui.RightClick, actToggle) + add(tui.SLeftClick, actToggle) + add(tui.SRightClick, actToggle) + + add(tui.ScrollUp, actUp) + add(tui.ScrollDown, actDown) + keymap[tui.SScrollUp.AsEvent()] = toActions(actToggle, actUp) + keymap[tui.SScrollDown.AsEvent()] = toActions(actToggle, actDown) + + add(tui.PreviewScrollUp, actPreviewUp) + add(tui.PreviewScrollDown, actPreviewDown) return keymap } @@ -3483,13 +3493,23 @@ func (t *Terminal) Loop() { // Scrolling if me.S != 0 { if t.window.Enclose(my, mx) && t.merger.Length() > 0 { - if t.multi > 0 && me.Mod { - toggle() + evt := tui.ScrollUp + if me.Mod { + evt = tui.SScrollUp } - t.vmove(me.S, true) - req(reqList) + if me.S < 0 { + evt = tui.ScrollDown + if me.Mod { + evt = tui.SScrollDown + } + } + return doActions(actionsFor(evt)) } else if t.hasPreviewWindow() && t.pwindow.Enclose(my, mx) { - scrollPreviewBy(-me.S) + evt := tui.PreviewScrollUp + if me.S < 0 { + evt = tui.PreviewScrollDown + } + return doActions(actionsFor(evt)) } break } @@ -3580,15 +3600,19 @@ func (t *Terminal) Loop() { // Prompt t.cx = mx + t.xoffset } else if my >= min { - // List - if t.vset(t.offset+my-min) && t.multi > 0 && me.Mod { - toggle() - } + t.vset(t.offset + my - min) req(reqList) + evt := tui.RightClick + if me.Mod { + evt = tui.SRightClick + } if me.Left { - return doActions(actionsFor(tui.LeftClick)) + evt = tui.LeftClick + if me.Mod { + evt = tui.SLeftClick + } } - return doActions(actionsFor(tui.RightClick)) + return doActions(actionsFor(evt)) } } case actReload, actReloadSync: diff --git a/src/tui/tui.go b/src/tui/tui.go index 4039565a..4625e9b5 100644 --- a/src/tui/tui.go +++ b/src/tui/tui.go @@ -55,6 +55,14 @@ const ( DoubleClick LeftClick RightClick + SLeftClick + SRightClick + ScrollUp + ScrollDown + SScrollUp + SScrollDown + PreviewScrollUp + PreviewScrollDown BTab BSpace -- cgit v1.2.3