mirror of
https://github.com/tmux/tmux.git
synced 2024-12-12 17:38:48 +00:00
Add an "Any" key to run a command if a key is pressed that is not bound
in the current key table. GitHub issue 1404.
This commit is contained in:
parent
ff67ef945d
commit
0d88f8a78b
@ -166,9 +166,11 @@ key_string_lookup_string(const char *string)
|
||||
enum utf8_state more;
|
||||
wchar_t wc;
|
||||
|
||||
/* Is this no key? */
|
||||
/* Is this no key or any key? */
|
||||
if (strcasecmp(string, "None") == 0)
|
||||
return (KEYC_NONE);
|
||||
if (strcasecmp(string, "Any") == 0)
|
||||
return (KEYC_ANY);
|
||||
|
||||
/* Is this a hexadecimal value? */
|
||||
if (string[0] == '0' && string[1] == 'x') {
|
||||
@ -251,6 +253,8 @@ key_string_lookup_key(key_code key)
|
||||
/* Handle special keys. */
|
||||
if (key == KEYC_UNKNOWN)
|
||||
return ("Unknown");
|
||||
if (key == KEYC_ANY)
|
||||
return ("Any");
|
||||
if (key == KEYC_FOCUS_IN)
|
||||
return ("FocusIn");
|
||||
if (key == KEYC_FOCUS_OUT)
|
||||
|
@ -907,8 +907,8 @@ server_client_handle_key(struct client *c, key_code key)
|
||||
* The prefix always takes precedence and forces a switch to the prefix
|
||||
* table, unless we are already there.
|
||||
*/
|
||||
retry:
|
||||
key0 = (key & ~KEYC_XTERM);
|
||||
retry:
|
||||
if ((key0 == (key_code)options_get_number(s->options, "prefix") ||
|
||||
key0 == (key_code)options_get_number(s->options, "prefix2")) &&
|
||||
strcmp(table->name, "prefix") != 0) {
|
||||
@ -980,6 +980,10 @@ retry:
|
||||
* switch the client back to the root table and try again.
|
||||
*/
|
||||
log_debug("not found in key table %s", table->name);
|
||||
if (key0 != KEYC_ANY) {
|
||||
key0 = KEYC_ANY;
|
||||
goto retry;
|
||||
}
|
||||
if (!server_client_is_default_key_table(c, table) ||
|
||||
(c->flags & CLIENT_REPEAT)) {
|
||||
server_client_set_key_table(c, NULL);
|
||||
|
Loading…
Reference in New Issue
Block a user