diff options
author | Nicholas Marriott <nicm@openbsd.org> | 2009-10-10 14:51:16 +0000 |
---|---|---|
committer | Nicholas Marriott <nicm@openbsd.org> | 2009-10-10 14:51:16 +0000 |
commit | 4658c063d59bab42ccca8c2e58a50800b00b956f (patch) | |
tree | f03988611ea459776d50c5f28d0023d1d7af51c9 /server.c | |
parent | 3a20a05a49bdf7cfd7d2131c6f31a2ebf76ad4e5 (diff) | |
download | rtmux-4658c063d59bab42ccca8c2e58a50800b00b956f.tar.gz rtmux-4658c063d59bab42ccca8c2e58a50800b00b956f.tar.bz2 rtmux-4658c063d59bab42ccca8c2e58a50800b00b956f.zip |
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 'server.c')
-rw-r--r-- | server.c | 15 |
1 files changed, 13 insertions, 2 deletions
@@ -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); } |