summaryrefslogtreecommitdiff
path: root/usr.bin/tmux/server.c
diff options
context:
space:
mode:
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);