summaryrefslogtreecommitdiff
path: root/usr.bin/tmux/window-copy.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr.bin/tmux/window-copy.c')
-rw-r--r--usr.bin/tmux/window-copy.c29
1 files changed, 18 insertions, 11 deletions
diff --git a/usr.bin/tmux/window-copy.c b/usr.bin/tmux/window-copy.c
index 16c327d6924..44d9d1b5aa2 100644
--- a/usr.bin/tmux/window-copy.c
+++ b/usr.bin/tmux/window-copy.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: window-copy.c,v 1.67 2011/03/28 19:44:31 nicm Exp $ */
+/* $OpenBSD: window-copy.c,v 1.68 2011/04/19 21:31:33 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -760,11 +760,11 @@ window_copy_key_numeric_prefix(struct window_pane *wp, int key)
/* ARGSUSED */
void
window_copy_mouse(
- struct window_pane *wp, unused struct session *sess, struct mouse_event *m)
+ struct window_pane *wp, struct session *sess, struct mouse_event *m)
{
struct window_copy_mode_data *data = wp->modedata;
struct screen *s = &data->screen;
- u_int i;
+ u_int i, old_cy;
if (m->x >= screen_size_x(s))
return;
@@ -777,8 +777,11 @@ window_copy_mouse(
for (i = 0; i < 5; i++)
window_copy_cursor_up(wp, 0);
} else if ((m->b & MOUSE_BUTTON) == MOUSE_2) {
+ old_cy = data->cy;
for (i = 0; i < 5; i++)
window_copy_cursor_down(wp, 0);
+ if (old_cy == data->cy)
+ goto reset_mode;
}
return;
}
@@ -792,15 +795,9 @@ window_copy_mouse(
window_copy_update_cursor(wp, m->x, m->y);
if (window_copy_update_selection(wp))
window_copy_redraw_screen(wp);
- } else {
- s->mode &= ~MODE_MOUSE_ANY;
- s->mode |= MODE_MOUSE_STANDARD;
- if (sess != NULL) {
- window_copy_copy_selection(wp);
- window_pane_reset_mode(wp);
- }
+ return;
}
- return;
+ goto reset_mode;
}
/* Otherwise if other buttons pressed, start selection and motion. */
@@ -812,6 +809,16 @@ window_copy_mouse(
window_copy_start_selection(wp);
window_copy_redraw_screen(wp);
}
+
+ return;
+
+reset_mode:
+ s->mode &= ~MODE_MOUSE_ANY;
+ s->mode |= MODE_MOUSE_STANDARD;
+ if (sess != NULL) {
+ window_copy_copy_selection(wp);
+ window_pane_reset_mode(wp);
+ }
}
void