summaryrefslogtreecommitdiff
path: root/usr.bin/tmux/server-client.c
diff options
context:
space:
mode:
authorNicholas Marriott <nicm@cvs.openbsd.org>2011-04-19 21:31:34 +0000
committerNicholas Marriott <nicm@cvs.openbsd.org>2011-04-19 21:31:34 +0000
commitb49934cb26b40e91708a7176329e7e9c296efed0 (patch)
treec65408b442562e9122058a194d8b0e6318228a1f /usr.bin/tmux/server-client.c
parent2569232cf2fe46467e9db269f754a85bf09d09fb (diff)
When mode-mouse is on (it is off by default), automatically enter copy
mode when the mouse is dragged or the mouse wheel is used. Also exit copy mode when the mouse wheel is scrolled off the bottom. Discussed with and written by hsim at gmx dot li.
Diffstat (limited to 'usr.bin/tmux/server-client.c')
-rw-r--r--usr.bin/tmux/server-client.c28
1 files changed, 18 insertions, 10 deletions
diff --git a/usr.bin/tmux/server-client.c b/usr.bin/tmux/server-client.c
index 782c5e29fba..7756859564d 100644
--- a/usr.bin/tmux/server-client.c
+++ b/usr.bin/tmux/server-client.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: server-client.c,v 1.53 2011/04/18 19:49:05 nicm Exp $ */
+/* $OpenBSD: server-client.c,v 1.54 2011/04/19 21:31:33 nicm Exp $ */
/*
* Copyright (c) 2009 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -314,7 +314,13 @@ server_client_handle_key(int key, struct mouse_event *mouse, void *data)
if (key == KEYC_MOUSE) {
if (c->flags & CLIENT_READONLY)
return;
- if (options_get_number(oo, "mouse-select-pane")) {
+ if (options_get_number(oo, "mouse-select-pane") &&
+ ((!(mouse->b & MOUSE_DRAG) && mouse->b != MOUSE_UP) ||
+ wp->mode != &window_copy_mode)) {
+ /*
+ * Allow pane switching in copy mode only by mouse down
+ * (click).
+ */
window_set_active_at(w, mouse->x, mouse->y);
server_redraw_window_borders(w);
wp = w->active;
@@ -445,6 +451,7 @@ server_client_reset_state(struct client *c)
struct window_pane *wp = w->active;
struct screen *s = wp->screen;
struct options *oo = &c->session->options;
+ struct options *wo = &w->options;
int status, mode;
tty_region(&c->tty, 0, c->tty.sy - 1);
@@ -460,14 +467,15 @@ server_client_reset_state(struct client *c)
* none.
*/
mode = s->mode;
- if (TAILQ_NEXT(TAILQ_FIRST(&w->panes), entry) != NULL &&
- options_get_number(oo, "mouse-select-pane") &&
- (mode & ALL_MOUSE_MODES) == 0)
- mode |= MODE_MOUSE_STANDARD;
-
- if (options_get_number(oo, "mouse-select-window") &&
- (mode & ALL_MOUSE_MODES) == 0)
- mode |= MODE_MOUSE_STANDARD;
+ if ((mode & ALL_MOUSE_MODES) == 0) {
+ if (TAILQ_NEXT(TAILQ_FIRST(&w->panes), entry) != NULL &&
+ options_get_number(oo, "mouse-select-pane") == 0)
+ mode |= MODE_MOUSE_STANDARD;
+ else if (options_get_number(oo, "mouse-select-window"))
+ mode |= MODE_MOUSE_STANDARD;
+ else if (options_get_number(wo, "mode-mouse"))
+ mode |= MODE_MOUSE_STANDARD;
+ }
/*
* Set UTF-8 mouse input if required. If the terminal is UTF-8, the