Support all four of the xterm mouse modes. Based on a diff from hsim at

gmx.li.
This commit is contained in:
Nicholas Marriott
2010-12-29 21:49:06 +00:00
parent 230e39ec35
commit f7c42c21ba
8 changed files with 67 additions and 29 deletions

View File

@@ -180,7 +180,7 @@ window_copy_init(struct window_pane *wp)
s = &data->screen;
screen_init(s, screen_size_x(&wp->base), screen_size_y(&wp->base), 0);
if (options_get_number(&wp->window->options, "mode-mouse"))
s->mode |= MODE_MOUSE;
s->mode |= MODE_MOUSE_STANDARD;
keys = options_get_number(&wp->window->options, "mode-keys");
if (keys == MODEKEY_EMACS)
@@ -787,13 +787,14 @@ window_copy_mouse(
* If already reading motion, move the cursor while buttons are still
* pressed, or stop the selection on their release.
*/
if (s->mode & MODE_MOUSEMOTION) {
if (s->mode & MODE_MOUSE_ANY) {
if ((m->b & MOUSE_BUTTON) != MOUSE_UP) {
window_copy_update_cursor(wp, m->x, m->y);
if (window_copy_update_selection(wp))
window_copy_redraw_screen(wp);
} else {
s->mode &= ~MODE_MOUSEMOTION;
s->mode &= ~MODE_MOUSE_ANY;
s->mode |= MODE_MOUSE_STANDARD;
if (sess != NULL) {
window_copy_copy_selection(wp, sess);
window_pane_reset_mode(wp);
@@ -802,9 +803,10 @@ window_copy_mouse(
return;
}
/* Otherwise i other buttons pressed, start selection and motion. */
/* Otherwise if other buttons pressed, start selection and motion. */
if ((m->b & MOUSE_BUTTON) != MOUSE_UP) {
s->mode |= MODE_MOUSEMOTION;
s->mode &= ~MODE_MOUSE_STANDARD;
s->mode |= MODE_MOUSE_ANY;
window_copy_update_cursor(wp, m->x, m->y);
window_copy_start_selection(wp);