From e91f10ab167f10328816fab65fc38370059986f3 Mon Sep 17 00:00:00 2001 From: Junegunn Choi Date: Mon, 27 Jan 2025 01:10:08 +0900 Subject: Enhance click-header event * Expose the name of the mouse action as $FZF_KEY * Trigger click-header on mouse up * Enhanced clickable header for `kill` completion --- src/tui/tcell.go | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) (limited to 'src/tui/tcell.go') diff --git a/src/tui/tcell.go b/src/tui/tcell.go index 3c3e13fc..3738214a 100644 --- a/src/tui/tcell.go +++ b/src/tui/tcell.go @@ -266,7 +266,11 @@ func (r *FullscreenRenderer) GetChar() Event { // so mouse click is three consecutive events, but the first and last are indistinguishable from movement events (with released buttons) // dragging has same structure, it only repeats the middle (main) event appropriately x, y := ev.Position() - mod := ev.Modifiers() != 0 + + mod := ev.Modifiers() + ctrl := (mod & tcell.ModCtrl) > 0 + alt := (mod & tcell.ModAlt) > 0 + shift := (mod & tcell.ModShift) > 0 // since we dont have mouse down events (unlike LightRenderer), we need to track state in prevButton prevButton, button := _prevMouseButton, ev.Buttons() @@ -275,9 +279,9 @@ func (r *FullscreenRenderer) GetChar() Event { switch { case button&tcell.WheelDown != 0: - return Event{Mouse, 0, &MouseEvent{y, x, -1, false, false, false, mod}} + return Event{Mouse, 0, &MouseEvent{y, x, -1, false, false, false, ctrl, alt, shift}} case button&tcell.WheelUp != 0: - return Event{Mouse, 0, &MouseEvent{y, x, +1, false, false, false, mod}} + return Event{Mouse, 0, &MouseEvent{y, x, +1, false, false, false, ctrl, alt, shift}} case button&tcell.Button1 != 0: double := false if !drag { @@ -300,9 +304,9 @@ func (r *FullscreenRenderer) GetChar() Event { } } // fire single or double click event - return Event{Mouse, 0, &MouseEvent{y, x, 0, true, !double, double, mod}} + return Event{Mouse, 0, &MouseEvent{y, x, 0, true, !double, double, ctrl, alt, shift}} case button&tcell.Button2 != 0: - return Event{Mouse, 0, &MouseEvent{y, x, 0, false, true, false, mod}} + return Event{Mouse, 0, &MouseEvent{y, x, 0, false, true, false, ctrl, alt, shift}} default: // double and single taps on Windows don't quite work due to // the console acting on the events and not allowing us @@ -311,7 +315,11 @@ func (r *FullscreenRenderer) GetChar() Event { down := left || button&tcell.Button3 != 0 double := false - return Event{Mouse, 0, &MouseEvent{y, x, 0, left, down, double, mod}} + // No need to report mouse movement events when no button is pressed + if drag { + return Event{Invalid, 0, nil} + } + return Event{Mouse, 0, &MouseEvent{y, x, 0, left, down, double, ctrl, alt, shift}} } // process keyboard: -- cgit v1.2.3