diff options
author | Nicholas Marriott <nicm@cvs.openbsd.org> | 2023-08-17 14:10:29 +0000 |
---|---|---|
committer | Nicholas Marriott <nicm@cvs.openbsd.org> | 2023-08-17 14:10:29 +0000 |
commit | 9ad77a15f8f67d47932334046308b35c4d7e5d0d (patch) | |
tree | 359d2d39167b6ad851bf14c800b38784ce615db2 /usr.bin/tmux/server-client.c | |
parent | c617571a86e2af52a939348776c3fe337f042dc2 (diff) |
Add a session, pane and user mouse range types for the status line and
add format variables for mouse_status_line and mouse_status_range so
they can be associated with different commands in the key bindings.
GitHub issue 3652.
Diffstat (limited to 'usr.bin/tmux/server-client.c')
-rw-r--r-- | usr.bin/tmux/server-client.c | 39 |
1 files changed, 32 insertions, 7 deletions
diff --git a/usr.bin/tmux/server-client.c b/usr.bin/tmux/server-client.c index a28cf5a703d..c57e57ecf15 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.400 2023/02/05 21:15:32 nicm Exp $ */ +/* $OpenBSD: server-client.c,v 1.401 2023/08/17 14:10:28 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott <nicholas.marriott@gmail.com> @@ -564,9 +564,9 @@ static key_code server_client_check_mouse(struct client *c, struct key_event *event) { struct mouse_event *m = &event->m; - struct session *s = c->session; - struct winlink *wl; - struct window_pane *wp; + struct session *s = c->session, *fs; + struct winlink *fwl; + struct window_pane *wp, *fwp; u_int x, y, b, sx, sy, px, py; int ignore = 0; key_code key; @@ -672,6 +672,7 @@ have_event: /* Save the session. */ m->s = s->id; m->w = -1; + m->wp = -1; m->ignore = ignore; /* Is this on the status line? */ @@ -688,18 +689,42 @@ have_event: case STYLE_RANGE_NONE: return (KEYC_UNKNOWN); case STYLE_RANGE_LEFT: + log_debug("mouse range: left"); where = STATUS_LEFT; break; case STYLE_RANGE_RIGHT: + log_debug("mouse range: right"); where = STATUS_RIGHT; break; + case STYLE_RANGE_PANE: + fwp = window_pane_find_by_id(sr->argument); + if (fwp == NULL) + return (KEYC_UNKNOWN); + m->wp = sr->argument; + + log_debug("mouse range: pane %%%u", m->wp); + where = STATUS; + break; case STYLE_RANGE_WINDOW: - wl = winlink_find_by_index(&s->windows, + fwl = winlink_find_by_index(&s->windows, sr->argument); - if (wl == NULL) + if (fwl == NULL) return (KEYC_UNKNOWN); - m->w = wl->window->id; + m->w = fwl->window->id; + log_debug("mouse range: window @%u", m->w); + where = STATUS; + break; + case STYLE_RANGE_SESSION: + fs = session_find_by_id(sr->argument); + if (fs == NULL) + return (KEYC_UNKNOWN); + m->s = sr->argument; + + log_debug("mouse range: session $%u", m->s); + where = STATUS; + break; + case STYLE_RANGE_USER: where = STATUS; break; } |