summaryrefslogtreecommitdiff
path: root/usr.bin/tmux/server.c
diff options
context:
space:
mode:
authorNicholas Marriott <nicm@cvs.openbsd.org>2009-10-10 14:51:17 +0000
committerNicholas Marriott <nicm@cvs.openbsd.org>2009-10-10 14:51:17 +0000
commit2123db726ea6524a385d93317144bab6cb592489 (patch)
treefe56699e60a8628f2ab75e542f3f0ff14c3dee77 /usr.bin/tmux/server.c
parent1e4a2d1970a402b97d119396cf414c3640d040f4 (diff)
New option, mouse-select-pane. If on, the mouse may be used to select the
current pane. Suggested by sthen@ and also by someone else ages ago who I have forgotten.
Diffstat (limited to 'usr.bin/tmux/server.c')
-rw-r--r--usr.bin/tmux/server.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/usr.bin/tmux/server.c b/usr.bin/tmux/server.c
index d1528532f1c..2d592d2c8ec 100644
--- a/usr.bin/tmux/server.c
+++ b/usr.bin/tmux/server.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: server.c,v 1.47 2009/10/10 10:02:48 nicm Exp $ */
+/* $OpenBSD: server.c,v 1.48 2009/10/10 14:51:16 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -825,6 +825,7 @@ server_handle_client(struct client *c)
struct window *w;
struct window_pane *wp;
struct screen *s;
+ struct options *oo;
struct timeval tv;
struct key_binding *bd;
struct keylist *keylist;
@@ -849,6 +850,7 @@ server_handle_client(struct client *c)
c->session->activity = time(NULL);
w = c->session->curw->window;
wp = w->active; /* could die */
+ oo = &c->session->options;
/* Special case: number keys jump to pane in identify mode. */
if (c->flags & CLIENT_IDENTIFY && key >= '0' && key <= '9') {
@@ -868,6 +870,10 @@ server_handle_client(struct client *c)
/* Check for mouse keys. */
if (key == KEYC_MOUSE) {
+ if (options_get_number(oo, "mouse-select-pane")) {
+ window_set_active_at(w, mouse[1], mouse[2]);
+ wp = w->active;
+ }
window_pane_mouse(wp, c, mouse[0], mouse[1], mouse[2]);
continue;
}
@@ -935,7 +941,9 @@ server_handle_client(struct client *c)
}
if (c->session == NULL)
return;
- wp = c->session->curw->window->active; /* could die - do each loop */
+ w = c->session->curw->window;
+ wp = w->active;
+ oo = &c->session->options;
s = wp->screen;
/*
@@ -948,7 +956,7 @@ server_handle_client(struct client *c)
* tty_region/tty_reset/tty_update_mode already take care of not
* resetting things that are already in their default state.
*/
- status = options_get_number(&c->session->options, "status");
+ status = options_get_number(oo, "status");
tty_region(&c->tty, 0, c->tty.sy - 1, 0);
if (!window_pane_visible(wp) || wp->yoff + s->cy >= c->tty.sy - status)
tty_cursor(&c->tty, 0, 0, 0, 0);
@@ -956,6 +964,9 @@ server_handle_client(struct client *c)
tty_cursor(&c->tty, s->cx, s->cy, wp->xoff, wp->yoff);
mode = s->mode;
+ if (TAILQ_NEXT(TAILQ_FIRST(&w->panes), entry) != NULL &&
+ options_get_number(oo, "mouse-select-pane"))
+ mode |= MODE_MOUSE;
tty_update_mode(&c->tty, mode);
tty_reset(&c->tty);
}