Change send-keys -K to insert keys in the right place in the queue, like

we already do for key bindings. GitHub issue 3476.
This commit is contained in:
nicm
2026-06-11 19:13:34 +00:00
parent fa6d33f742
commit b6be437bab
3 changed files with 51 additions and 8 deletions

View File

@@ -70,6 +70,7 @@ cmd_send_keys_inject_key(struct cmdq_item *item, struct cmdq_item *after,
struct key_table *table = NULL;
struct key_binding *bd;
struct key_event *event;
struct cmdq_item *new_after = after;
if (args_has(args, 'K')) {
if (tc == NULL)
@@ -77,10 +78,16 @@ cmd_send_keys_inject_key(struct cmdq_item *item, struct cmdq_item *after,
event = xcalloc(1, sizeof *event);
event->key = key|KEYC_SENT;
memset(&event->m, 0, sizeof event->m);
if (server_client_handle_key(tc, event) == 0) {
free(event->buf);
free(event);
if (after == NULL) {
if (server_client_handle_key(tc, event) != 0)
return (item);
} else {
if (server_client_handle_key_after(tc, event, after,
&new_after) != 0)
return (new_after);
}
free(event->buf);
free(event);
return (item);
}
@@ -229,8 +236,10 @@ cmd_send_keys_exec(struct cmd *self, struct cmdq_item *item)
if (count == 0) {
if (args_has(args, 'N') || args_has(args, 'R'))
return (CMD_RETURN_NORMAL);
after = args_has(args, 'K') ? item : NULL;
for (; np != 0; np--)
cmd_send_keys_inject_key(item, NULL, args, event->key);
after = cmd_send_keys_inject_key(item, after, args,
event->key);
return (CMD_RETURN_NORMAL);
}