Remove flags from the prefix before comparing with the received key so

that modifier keys with flags work correctly, GitHub issue 3764.
This commit is contained in:
nicm 2023-12-27 20:23:59 +00:00
parent 008ecd4592
commit f7bf7e9671
2 changed files with 7 additions and 5 deletions

View File

@ -1867,7 +1867,7 @@ server_client_key_callback(struct cmdq_item *item, void *data)
struct key_binding *bd; struct key_binding *bd;
int xtimeout, flags; int xtimeout, flags;
struct cmd_find_state fs; struct cmd_find_state fs;
key_code key0; key_code key0, prefix, prefix2;
/* Check the client is good to accept input. */ /* Check the client is good to accept input. */
if (s == NULL || (c->flags & CLIENT_UNATTACHEDFLAGS)) 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 * The prefix always takes precedence and forces a switch to the prefix
* table, unless we are already there. * 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)); key0 = (key & (KEYC_MASK_KEY|KEYC_MASK_MODIFIERS));
if ((key0 == (key_code)options_get_number(s->options, "prefix") || if ((key0 == (prefix & (KEYC_MASK_KEY|KEYC_MASK_MODIFIERS)) ||
key0 == (key_code)options_get_number(s->options, "prefix2")) && key0 == (prefix2 & (KEYC_MASK_KEY|KEYC_MASK_MODIFIERS))) &&
strcmp(table->name, "prefix") != 0) { strcmp(table->name, "prefix") != 0) {
server_client_set_key_table(c, "prefix"); server_client_set_key_table(c, "prefix");
server_status_client(c); server_status_client(c);

4
tmux.1
View File

@ -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 This is called line continuation and applies both inside and outside quoted
strings and in comments, but not inside braces. strings and in comments, but not inside braces.
.Pp .Pp
Command arguments may be specified as strings surrounded by single (\[aq]) quotes, Command arguments may be specified as strings surrounded by single (\[aq])
double quotes (\[dq]) or braces ({}). quotes, double quotes (\[dq]) or braces ({}).
.\" " .\" "
This is required when the argument contains any special character. This is required when the argument contains any special character.
Single and double quoted strings cannot span multiple lines except with line Single and double quoted strings cannot span multiple lines except with line