summaryrefslogtreecommitdiffstats
path: root/usr.bin/tmux/server.c
diff options
context:
space:
mode:
authornicm <nicm@openbsd.org>2009-09-22 12:38:10 +0000
committernicm <nicm@openbsd.org>2009-09-22 12:38:10 +0000
commitdfab4fead9fec3389566a566d7e73a1eb5c3e57e (patch)
tree5cdb973676c0c4c50db6759313bd3f9882dc8ae2 /usr.bin/tmux/server.c
parentWhen at MAIL FROM stage, handle the case when STARTTLS is required but not (diff)
downloadwireguard-openbsd-dfab4fead9fec3389566a566d7e73a1eb5c3e57e.tar.xz
wireguard-openbsd-dfab4fead9fec3389566a566d7e73a1eb5c3e57e.zip
Permit multiple prefix keys to be defined, separated by commas, for example:
set -g prefix ^a,^b Any key in the list acts as the prefix. The send-prefix command always sends the first key in the list.
Diffstat (limited to 'usr.bin/tmux/server.c')
-rw-r--r--usr.bin/tmux/server.c24
1 files changed, 17 insertions, 7 deletions
diff --git a/usr.bin/tmux/server.c b/usr.bin/tmux/server.c
index de6a5e257ef..f873427f184 100644
--- a/usr.bin/tmux/server.c
+++ b/usr.bin/tmux/server.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: server.c,v 1.39 2009/09/20 14:58:12 nicm Exp $ */
+/* $OpenBSD: server.c,v 1.40 2009/09/22 12:38:10 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -798,8 +798,9 @@ server_handle_client(struct client *c)
struct screen *s;
struct timeval tv;
struct key_binding *bd;
- int key, prefix, status, xtimeout;
- int mode;
+ struct keylist *keylist;
+ int key, status, xtimeout, mode, isprefix;
+ u_int i;
u_char mouse[3];
xtimeout = options_get_number(&c->session->options, "repeat-time");
@@ -811,7 +812,7 @@ server_handle_client(struct client *c)
}
/* Process keys. */
- prefix = options_get_number(&c->session->options, "prefix");
+ keylist = options_get_data(&c->session->options, "prefix");
while (tty_keys_next(&c->tty, &key, mouse) == 0) {
server_activity = time(NULL);
@@ -844,9 +845,18 @@ server_handle_client(struct client *c)
continue;
}
+ /* Is this a prefix key? */
+ isprefix = 0;
+ for (i = 0; i < ARRAY_LENGTH(keylist); i++) {
+ if (key == ARRAY_ITEM(keylist, i)) {
+ isprefix = 1;
+ break;
+ }
+ }
+
/* No previous prefix key. */
if (!(c->flags & CLIENT_PREFIX)) {
- if (key == prefix)
+ if (isprefix)
c->flags |= CLIENT_PREFIX;
else {
/* Try as a non-prefix key binding. */
@@ -864,7 +874,7 @@ server_handle_client(struct client *c)
/* If repeating, treat this as a key, else ignore. */
if (c->flags & CLIENT_REPEAT) {
c->flags &= ~CLIENT_REPEAT;
- if (key == prefix)
+ if (isprefix)
c->flags |= CLIENT_PREFIX;
else
window_pane_key(wp, c, key);
@@ -875,7 +885,7 @@ server_handle_client(struct client *c)
/* If already repeating, but this key can't repeat, skip it. */
if (c->flags & CLIENT_REPEAT && !bd->can_repeat) {
c->flags &= ~CLIENT_REPEAT;
- if (key == prefix)
+ if (isprefix)
c->flags |= CLIENT_PREFIX;
else
window_pane_key(wp, c, key);