Cancel key table when switching session, unless the key is going to

repeat. Reported by Amos Bird.
pull/756/head
nicm 2017-02-06 15:00:41 +00:00
parent d150d9b384
commit e67548dc36
5 changed files with 15 additions and 4 deletions

View File

@ -98,6 +98,8 @@ cmd_attach_session(struct cmdq_item *item, int dflag, int rflag,
environ_update(s->options, c->environ, s->environ);
c->session = s;
if (!item->repeat)
server_client_set_key_table(c, NULL);
status_timer_start(c);
notify_client("client-session-changed", c);
session_update_activity(s, NULL);

View File

@ -277,6 +277,8 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item)
} else if (c->session != NULL)
c->last_session = c->session;
c->session = s;
if (!item->repeat)
server_client_set_key_table(c, NULL);
status_timer_start(c);
notify_client("client-session-changed", c);
session_update_activity(s, NULL);

View File

@ -108,6 +108,8 @@ cmd_switch_client_exec(struct cmd *self, struct cmdq_item *item)
if (c->session != NULL && c->session != s)
c->last_session = c->session;
c->session = s;
if (!item->repeat)
server_client_set_key_table(c, NULL);
status_timer_start(c);
session_update_activity(s, NULL);
gettimeofday(&s->last_attached_time, NULL);

View File

@ -400,8 +400,9 @@ void
key_bindings_dispatch(struct key_binding *bd, struct client *c,
struct mouse_event *m, struct cmd_find_state *fs)
{
struct cmd *cmd;
int readonly;
struct cmd *cmd;
struct cmdq_item *item;
int readonly;
readonly = 1;
TAILQ_FOREACH(cmd, &bd->cmdlist->list, qentry) {
@ -410,6 +411,9 @@ key_bindings_dispatch(struct key_binding *bd, struct client *c,
}
if (!readonly && (c->flags & CLIENT_READONLY))
cmdq_append(c, cmdq_get_callback(key_bindings_read_only, NULL));
else
cmdq_append(c, cmdq_get_command(bd->cmdlist, fs, m, 0));
else {
item = cmdq_get_command(bd->cmdlist, fs, m, 0);
item->repeat = bd->can_repeat;
cmdq_append(c, item);
}
}

1
tmux.h
View File

@ -1226,6 +1226,7 @@ struct cmdq_item {
struct cmd_list *cmdlist;
struct cmd *cmd;
int repeat;
cmdq_cb cb;
void *data;