Make prefix work in all tables (except the prefix table). Users who want

to avoid this can set prefix to "none" and bind send-prefix
themselves. Allows C-b t be bound in the copy mode tables again, pointed
out by millert@.
This commit is contained in:
nicm
2016-12-07 09:16:13 +00:00
parent 1a6156d8fd
commit a8f3ad4487
2 changed files with 15 additions and 11 deletions

View File

@ -782,6 +782,18 @@ retry:
else
log_debug("key table %s (pane %%%u)", table->name, wp->id);
/*
* The prefix always takes precedence and forces a switch to the prefix
* table, unless we are already there.
*/
if ((key == (key_code)options_get_number(s->options, "prefix") ||
key == (key_code)options_get_number(s->options, "prefix2")) &&
strcmp(table->name, "prefix") != 0) {
server_client_set_key_table(c, "prefix");
server_status_client(c);
return;
}
/* Try to see if there is a key binding in the current table. */
bd_find.key = key;
bd = RB_FIND(key_bindings, &table->key_bindings, &bd_find);
@ -854,22 +866,12 @@ retry:
/* If no match and we're not in the root table, that's it. */
if (name == NULL && !server_client_is_default_key_table(c)) {
log_debug("no key in key table %s", table->name);
server_client_set_key_table(c, NULL);
server_status_client(c);
return;
}
/*
* No match, but in the root table. Prefix switches to the prefix table
* and everything else is passed through.
*/
if (key == (key_code)options_get_number(s->options, "prefix") ||
key == (key_code)options_get_number(s->options, "prefix2")) {
server_client_set_key_table(c, "prefix");
server_status_client(c);
return;
}
forward:
if (c->flags & CLIENT_READONLY)
return;