aboutsummaryrefslogtreecommitdiff
path: root/server-client.c
diff options
context:
space:
mode:
authornicm <nicm>2018-11-07 08:06:28 +0000
committernicm <nicm>2018-11-07 08:06:28 +0000
commit0c7f64458fe97f51373775bb0fed01c183bac45b (patch)
tree386ab59cc02a59ef6f355b8c7b15d1870c45590a /server-client.c
parent7339845c01727b209b3b96e5b1d917129b2c8a83 (diff)
downloadrtmux-0c7f64458fe97f51373775bb0fed01c183bac45b.tar.gz
rtmux-0c7f64458fe97f51373775bb0fed01c183bac45b.tar.bz2
rtmux-0c7f64458fe97f51373775bb0fed01c183bac45b.zip
If a non-repeating key is used when repeating, it should be treated as
an entirely new key press, not checked in root table and ignored if not found. GitHub issue 1513.
Diffstat (limited to 'server-client.c')
-rw-r--r--server-client.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/server-client.c b/server-client.c
index aefe006e..3d939163 100644
--- a/server-client.c
+++ b/server-client.c
@@ -1022,6 +1022,7 @@ table_changed:
}
flags = c->flags;
+try_again:
/* Log key table. */
if (wp == NULL)
log_debug("key table %s (no pane)", table->name);
@@ -1030,7 +1031,6 @@ table_changed:
if (c->flags & CLIENT_REPEAT)
log_debug("currently repeating");
-try_again:
/* Try to see if there is a key binding in the current table. */
bd = key_bindings_get(table, key0);
if (bd != NULL) {
@@ -1041,10 +1041,12 @@ try_again:
*/
if ((c->flags & CLIENT_REPEAT) &&
(~bd->flags & KEY_BINDING_REPEAT)) {
+ log_debug("found in key table %s (not repeating)",
+ table->name);
server_client_set_key_table(c, NULL);
+ first = table = c->keytable;
c->flags &= ~CLIENT_REPEAT;
server_status_client(c);
- table = c->keytable;
goto table_changed;
}
log_debug("found in key table %s", table->name);
@@ -1094,10 +1096,13 @@ try_again:
log_debug("not found in key table %s", table->name);
if (!server_client_is_default_key_table(c, table) ||
(c->flags & CLIENT_REPEAT)) {
+ log_debug("trying in root table");
server_client_set_key_table(c, NULL);
+ table = c->keytable;
+ if (c->flags & CLIENT_REPEAT)
+ first = table;
c->flags &= ~CLIENT_REPEAT;
server_status_client(c);
- table = c->keytable;
goto table_changed;
}