summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornicm <nicm>2014-05-08 07:54:47 +0000
committernicm <nicm>2014-05-08 07:54:47 +0000
commit94ccc6aeaa72c84d66436d3f0cd23b4ab4d69c8e (patch)
tree5d3697e43eb2c8436d4dac7ba966b76c447a0ffc
parent189017c078b7870c18ced485c1fd99f65fcc4801 (diff)
Instead of forcing mouse scroll to 1 in choose mode, scale it down
instead. Means modifier keys still increase the line count, just not as much. Based on a diff from Marcel Partap.
-rw-r--r--tmux.h3
-rw-r--r--tty-keys.c6
-rw-r--r--window-choose.c19
3 files changed, 18 insertions, 10 deletions
diff --git a/tmux.h b/tmux.h
index b0a37f25..04bbd935 100644
--- a/tmux.h
+++ b/tmux.h
@@ -1130,6 +1130,9 @@ LIST_HEAD(tty_terms, tty_term);
#define MOUSE_WHEEL_UP 0
#define MOUSE_WHEEL_DOWN 1
+/* Mouse wheel multipler. */
+#define MOUSE_WHEEL_SCALE 3
+
/* Mouse event bits. */
#define MOUSE_EVENT_DOWN 0x1
#define MOUSE_EVENT_DRAG 0x2
diff --git a/tty-keys.c b/tty-keys.c
index 4f55a80c..297e22c8 100644
--- a/tty-keys.c
+++ b/tty-keys.c
@@ -752,11 +752,11 @@ tty_keys_mouse(struct tty *tty, const char *buf, size_t len, size_t *size)
if (b & MOUSE_MASK_SHIFT)
m->scroll = 1;
else
- m->scroll = 3;
+ m->scroll = MOUSE_WHEEL_SCALE;
if (b & MOUSE_MASK_META)
- m->scroll *= 3;
+ m->scroll *= MOUSE_WHEEL_SCALE;
if (b & MOUSE_MASK_CTRL)
- m->scroll *= 3;
+ m->scroll *= MOUSE_WHEEL_SCALE;
b &= MOUSE_MASK_BUTTONS;
if (b == 0)
diff --git a/window-choose.c b/window-choose.c
index 34ec2eb7..99e88036 100644
--- a/window-choose.c
+++ b/window-choose.c
@@ -721,17 +721,22 @@ window_choose_mouse(struct window_pane *wp, struct session *sess,
struct window_choose_mode_data *data = wp->modedata;
struct screen *s = &data->screen;
struct window_choose_mode_item *item;
- u_int idx;
+ u_int idx, i, n;
if (m->event == MOUSE_EVENT_WHEEL) {
/*
- * Don't use m->scroll and just move line-by-line or it's
- * annoying.
+ * Multiple line scrolling by default is annoying, so scale
+ * m->scroll back down.
*/
- if (m->wheel == MOUSE_WHEEL_UP)
- window_choose_key(wp, sess, KEYC_UP);
- else
- window_choose_key(wp, sess, KEYC_DOWN);
+ n = m->scroll;
+ if (n >= MOUSE_WHEEL_SCALE)
+ n /= MOUSE_WHEEL_SCALE;
+ for (i = 0; i < n; i++) {
+ if (m->wheel == MOUSE_WHEEL_UP)
+ window_choose_key(wp, sess, KEYC_UP);
+ else
+ window_choose_key(wp, sess, KEYC_DOWN);
+ }
return;
}