summaryrefslogtreecommitdiff
path: root/src/tui/tcell.go
diff options
context:
space:
mode:
authorJunegunn Choi <junegunn.c@gmail.com>2025-01-27 01:10:08 +0900
committerJunegunn Choi <junegunn.c@gmail.com>2025-01-27 01:10:08 +0900
commite91f10ab167f10328816fab65fc38370059986f3 (patch)
treef8e7d059843f3a7a81835a888fe29d7588ee4038 /src/tui/tcell.go
parent2c15cd792306119ead573c473c982b6996e11952 (diff)
downloadfzf-e91f10ab167f10328816fab65fc38370059986f3.tar.gz
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
Diffstat (limited to 'src/tui/tcell.go')
-rw-r--r--src/tui/tcell.go20
1 files changed, 14 insertions, 6 deletions
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: