Work out mouse scroll wheel effect when the mouse is first detected and

store it in struct mouse_event, reduce the scroll size the 3 but allow
shift to reduce it to 1 and meta and ctrl to multiply by 3 if the
terminal supports them, also support wheel in choose mode. From Marcel
Partap.
pull/1/head
nicm 2014-04-03 08:20:29 +00:00
parent 8824dae6f7
commit acef311fe3
4 changed files with 32 additions and 11 deletions

1
tmux.h
View File

@ -1168,6 +1168,7 @@ struct mouse_event {
u_int button;
u_int clicks;
u_int scroll;
int wheel;
int event;

View File

@ -749,6 +749,15 @@ tty_keys_mouse(struct tty *tty, const char *buf, size_t len, size_t *size)
m->x = x;
m->y = y;
if (b & MOUSE_MASK_WHEEL) {
if (b & MOUSE_MASK_SHIFT)
m->scroll = 1;
else
m->scroll = 3;
if (b & MOUSE_MASK_META)
m->scroll *= 3;
if (b & MOUSE_MASK_CTRL)
m->scroll *= 3;
b &= MOUSE_MASK_BUTTONS;
if (b == 0)
m->wheel = MOUSE_WHEEL_UP;

View File

@ -721,7 +721,17 @@ window_choose_mouse(
struct window_choose_mode_data *data = wp->modedata;
struct screen *s = &data->screen;
struct window_choose_mode_item *item;
u_int idx;
u_int i, idx;
if (m->event == MOUSE_EVENT_WHEEL) {
for (i = 0; i < m->scroll; i++) {
if (m->wheel == MOUSE_WHEEL_UP)
window_choose_key(wp, sess, KEYC_UP);
else
window_choose_key(wp, sess, KEYC_DOWN);
}
return;
}
if (~m->event & MOUSE_EVENT_CLICK)
return;

View File

@ -871,18 +871,19 @@ window_copy_mouse(
/* If mouse wheel (buttons 4 and 5), scroll. */
if (m->event == MOUSE_EVENT_WHEEL) {
if (m->wheel == MOUSE_WHEEL_UP) {
for (i = 0; i < 5; i++)
for (i = 0; i < m->scroll; i++) {
if (m->wheel == MOUSE_WHEEL_UP)
window_copy_cursor_up(wp, 1);
} else if (m->wheel == MOUSE_WHEEL_DOWN) {
for (i = 0; i < 5; i++)
else {
window_copy_cursor_down(wp, 1);
/*
* We reached the bottom, leave copy mode,
* but only if no selection is in progress.
*/
if (data->oy == 0 && !s->sel.flag)
goto reset_mode;
/*
* We reached the bottom, leave copy mode, but
* only if no selection is in progress.
*/
if (data->oy == 0 && !s->sel.flag)
goto reset_mode;
}
}
return;
}