From f7bf7e9671d89ac8b249ea52b7660ead9f700b03 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 27 Dec 2023 20:23:59 +0000 Subject: [PATCH] Remove flags from the prefix before comparing with the received key so that modifier keys with flags work correctly, GitHub issue 3764. --- server-client.c | 8 +++++--- tmux.1 | 4 ++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/server-client.c b/server-client.c index 644d69e2..fa8bddfa 100644 --- a/server-client.c +++ b/server-client.c @@ -1867,7 +1867,7 @@ server_client_key_callback(struct cmdq_item *item, void *data) struct key_binding *bd; int xtimeout, flags; struct cmd_find_state fs; - key_code key0; + key_code key0, prefix, prefix2; /* Check the client is good to accept input. */ if (s == NULL || (c->flags & CLIENT_UNATTACHEDFLAGS)) @@ -1939,9 +1939,11 @@ table_changed: * The prefix always takes precedence and forces a switch to the prefix * table, unless we are already there. */ + prefix = (key_code)options_get_number(s->options, "prefix"); + prefix2 = (key_code)options_get_number(s->options, "prefix2"); key0 = (key & (KEYC_MASK_KEY|KEYC_MASK_MODIFIERS)); - if ((key0 == (key_code)options_get_number(s->options, "prefix") || - key0 == (key_code)options_get_number(s->options, "prefix2")) && + if ((key0 == (prefix & (KEYC_MASK_KEY|KEYC_MASK_MODIFIERS)) || + key0 == (prefix2 & (KEYC_MASK_KEY|KEYC_MASK_MODIFIERS))) && strcmp(table->name, "prefix") != 0) { server_client_set_key_table(c, "prefix"); server_status_client(c); diff --git a/tmux.1 b/tmux.1 index 78214518..9ffc90d3 100644 --- a/tmux.1 +++ b/tmux.1 @@ -590,8 +590,8 @@ line (the \e and the newline are completely removed). This is called line continuation and applies both inside and outside quoted strings and in comments, but not inside braces. .Pp -Command arguments may be specified as strings surrounded by single (\[aq]) quotes, -double quotes (\[dq]) or braces ({}). +Command arguments may be specified as strings surrounded by single (\[aq]) +quotes, double quotes (\[dq]) or braces ({}). .\" " This is required when the argument contains any special character. Single and double quoted strings cannot span multiple lines except with line