summaryrefslogtreecommitdiffstats
path: root/src/tui
diff options
context:
space:
mode:
authorJunegunn Choi <junegunn.c@gmail.com>2017-12-01 02:11:20 +0900
committerJunegunn Choi <junegunn.c@gmail.com>2017-12-01 03:28:08 +0900
commitb3b101a89cd4a9431d98293e63e349367e83ac65 (patch)
tree1ddb808bbf9414b61f06a67695ddf540f74d8529 /src/tui
parent9615c4edf13b0cedbc8c9b1c22bac905e12de8af (diff)
Support binding of left-click and right-click
left-click and right-click are respectively bound to "ignore" and "toggle" (after implicitly moving the cursor) by default. Close #1130
Diffstat (limited to 'src/tui')
-rw-r--r--src/tui/light.go11
-rw-r--r--src/tui/tcell.go13
-rw-r--r--src/tui/tui.go3
3 files changed, 18 insertions, 9 deletions
diff --git a/src/tui/light.go b/src/tui/light.go
index 52e26edb..578961ed 100644
--- a/src/tui/light.go
+++ b/src/tui/light.go
@@ -495,16 +495,19 @@ func (r *LightRenderer) mouseSequence(sz *int) Event {
}
*sz = 6
switch r.buffer[3] {
- case 32, 36, 40, 48, // mouse-down / shift / cmd / ctrl
+ case 32, 34, 36, 40, 48, // mouse-down / shift / cmd / ctrl
35, 39, 43, 51: // mouse-up / shift / cmd / ctrl
mod := r.buffer[3] >= 36
+ left := r.buffer[3] == 32
down := r.buffer[3]%2 == 0
x := int(r.buffer[4] - 33)
y := int(r.buffer[5]-33) - r.yoffset
double := false
if down {
now := time.Now()
- if now.Sub(r.prevDownTime) < doubleClickDuration {
+ if !left { // Right double click is not allowed
+ r.clickY = []int{}
+ } else if now.Sub(r.prevDownTime) < doubleClickDuration {
r.clickY = append(r.clickY, y)
} else {
r.clickY = []int{y}
@@ -517,14 +520,14 @@ func (r *LightRenderer) mouseSequence(sz *int) Event {
}
}
- return Event{Mouse, 0, &MouseEvent{y, x, 0, down, double, mod}}
+ return Event{Mouse, 0, &MouseEvent{y, x, 0, left, down, double, mod}}
case 96, 100, 104, 112, // scroll-up / shift / cmd / ctrl
97, 101, 105, 113: // scroll-down / shift / cmd / ctrl
mod := r.buffer[3] >= 100
s := 1 - int(r.buffer[3]%2)*2
x := int(r.buffer[4] - 33)
y := int(r.buffer[5]-33) - r.yoffset
- return Event{Mouse, 0, &MouseEvent{y, x, s, false, false, mod}}
+ return Event{Mouse, 0, &MouseEvent{y, x, s, false, false, false, mod}}
}
return Event{Invalid, 0, nil}
}
diff --git a/src/tui/tcell.go b/src/tui/tcell.go
index 7db37c4c..8e5524ae 100644
--- a/src/tui/tcell.go
+++ b/src/tui/tcell.go
@@ -193,19 +193,22 @@ func (r *FullscreenRenderer) GetChar() Event {
button := ev.Buttons()
mod := ev.Modifiers() != 0
if button&tcell.WheelDown != 0 {
- return Event{Mouse, 0, &MouseEvent{y, x, -1, false, false, mod}}
+ return Event{Mouse, 0, &MouseEvent{y, x, -1, false, false, false, mod}}
} else if button&tcell.WheelUp != 0 {
- return Event{Mouse, 0, &MouseEvent{y, x, +1, false, false, mod}}
+ return Event{Mouse, 0, &MouseEvent{y, x, +1, false, false, false, mod}}
} else if runtime.GOOS != "windows" {
// double and single taps on Windows don't quite work due to
// the console acting on the events and not allowing us
// to consume them.
- down := button&tcell.Button1 != 0 // left
+ left := button&tcell.Button1 != 0
+ down := left || button&tcell.Button3 != 0
double := false
if down {
now := time.Now()
- if now.Sub(r.prevDownTime) < doubleClickDuration {
+ if !left {
+ r.clickY = []int{}
+ } else if now.Sub(r.prevDownTime) < doubleClickDuration {
r.clickY = append(r.clickY, x)
} else {
r.clickY = []int{x}
@@ -218,7 +221,7 @@ func (r *FullscreenRenderer) GetChar() Event {
}
}
- return Event{Mouse, 0, &MouseEvent{y, x, 0, down, double, mod}}
+ return Event{Mouse, 0, &MouseEvent{y, x, 0, left, down, double, mod}}
}
// process keyboard:
diff --git a/src/tui/tui.go b/src/tui/tui.go
index 244e0b05..fff3572f 100644
--- a/src/tui/tui.go
+++ b/src/tui/tui.go
@@ -44,6 +44,8 @@ const (
Resize
Mouse
DoubleClick
+ LeftClick
+ RightClick
BTab
BSpace
@@ -185,6 +187,7 @@ type MouseEvent struct {
Y int
X int
S int
+ Left bool
Down bool
Double bool
Mod bool