mirror of
https://github.com/tmux/tmux.git
synced 2025-09-02 05:21:10 +00:00
Permit multiple prefix keys to be defined, separated by commas, for example:
set -g prefix ^a,^b Any key in the list acts as the prefix. The send-prefix command always sends the first key in the list.
This commit is contained in:
22
server.c
22
server.c
@ -798,8 +798,9 @@ server_handle_client(struct client *c)
|
||||
struct screen *s;
|
||||
struct timeval tv;
|
||||
struct key_binding *bd;
|
||||
int key, prefix, status, xtimeout;
|
||||
int mode;
|
||||
struct keylist *keylist;
|
||||
int key, status, xtimeout, mode, isprefix;
|
||||
u_int i;
|
||||
u_char mouse[3];
|
||||
|
||||
xtimeout = options_get_number(&c->session->options, "repeat-time");
|
||||
@ -811,7 +812,7 @@ server_handle_client(struct client *c)
|
||||
}
|
||||
|
||||
/* Process keys. */
|
||||
prefix = options_get_number(&c->session->options, "prefix");
|
||||
keylist = options_get_data(&c->session->options, "prefix");
|
||||
while (tty_keys_next(&c->tty, &key, mouse) == 0) {
|
||||
server_activity = time(NULL);
|
||||
|
||||
@ -844,9 +845,18 @@ server_handle_client(struct client *c)
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Is this a prefix key? */
|
||||
isprefix = 0;
|
||||
for (i = 0; i < ARRAY_LENGTH(keylist); i++) {
|
||||
if (key == ARRAY_ITEM(keylist, i)) {
|
||||
isprefix = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* No previous prefix key. */
|
||||
if (!(c->flags & CLIENT_PREFIX)) {
|
||||
if (key == prefix)
|
||||
if (isprefix)
|
||||
c->flags |= CLIENT_PREFIX;
|
||||
else {
|
||||
/* Try as a non-prefix key binding. */
|
||||
@ -864,7 +874,7 @@ server_handle_client(struct client *c)
|
||||
/* If repeating, treat this as a key, else ignore. */
|
||||
if (c->flags & CLIENT_REPEAT) {
|
||||
c->flags &= ~CLIENT_REPEAT;
|
||||
if (key == prefix)
|
||||
if (isprefix)
|
||||
c->flags |= CLIENT_PREFIX;
|
||||
else
|
||||
window_pane_key(wp, c, key);
|
||||
@ -875,7 +885,7 @@ server_handle_client(struct client *c)
|
||||
/* If already repeating, but this key can't repeat, skip it. */
|
||||
if (c->flags & CLIENT_REPEAT && !bd->can_repeat) {
|
||||
c->flags &= ~CLIENT_REPEAT;
|
||||
if (key == prefix)
|
||||
if (isprefix)
|
||||
c->flags |= CLIENT_PREFIX;
|
||||
else
|
||||
window_pane_key(wp, c, key);
|
||||
|
Reference in New Issue
Block a user