version 1.72, 2022/06/07 10:02:19 |
version 1.73, 2022/12/16 08:13:40 |
|
|
.name = "send-keys", |
.name = "send-keys", |
.alias = "send", |
.alias = "send", |
|
|
.args = { "FHlMN:Rt:X", 0, -1, NULL }, |
.args = { "c:FHKlMN:Rt:X", 0, -1, NULL }, |
.usage = "[-FHlMRX] [-N repeat-count] " CMD_TARGET_PANE_USAGE |
.usage = "[-FHKlMRX] [-c target-client] [-N repeat-count] " |
" key ...", |
CMD_TARGET_PANE_USAGE " key ...", |
|
|
.target = { 't', CMD_FIND_PANE, 0 }, |
.target = { 't', CMD_FIND_PANE, 0 }, |
|
|
.flags = CMD_AFTERHOOK, |
.flags = CMD_AFTERHOOK|CMD_CLIENT_CFLAG, |
.exec = cmd_send_keys_exec |
.exec = cmd_send_keys_exec |
}; |
}; |
|
|
|
|
|
|
static struct cmdq_item * |
static struct cmdq_item * |
cmd_send_keys_inject_key(struct cmdq_item *item, struct cmdq_item *after, |
cmd_send_keys_inject_key(struct cmdq_item *item, struct cmdq_item *after, |
key_code key) |
struct args *args, key_code key) |
{ |
{ |
struct cmd_find_state *target = cmdq_get_target(item); |
struct cmd_find_state *target = cmdq_get_target(item); |
struct client *tc = cmdq_get_target_client(item); |
struct client *tc = cmdq_get_target_client(item); |
|
|
struct winlink *wl = target->wl; |
struct winlink *wl = target->wl; |
struct window_pane *wp = target->wp; |
struct window_pane *wp = target->wp; |
struct window_mode_entry *wme; |
struct window_mode_entry *wme; |
struct key_table *table; |
struct key_table *table = NULL; |
struct key_binding *bd; |
struct key_binding *bd; |
|
struct key_event *event; |
|
|
|
if (args_has(args, 'K')) { |
|
event = xmalloc(sizeof *event); |
|
event->key = key; |
|
memset(&event->m, 0, sizeof event->m); |
|
if (server_client_handle_key(tc, event) == 0) |
|
free(event); |
|
return (item); |
|
} |
|
|
wme = TAILQ_FIRST(&wp->modes); |
wme = TAILQ_FIRST(&wp->modes); |
if (wme == NULL || wme->mode->key_table == NULL) { |
if (wme == NULL || wme->mode->key_table == NULL) { |
if (window_pane_key(wp, tc, s, wl, key, NULL) != 0) |
if (window_pane_key(wp, tc, s, wl, key, NULL) != 0) |
|
|
n = strtol(s, &endptr, 16); |
n = strtol(s, &endptr, 16); |
if (*s =='\0' || n < 0 || n > 0xff || *endptr != '\0') |
if (*s =='\0' || n < 0 || n > 0xff || *endptr != '\0') |
return (item); |
return (item); |
return (cmd_send_keys_inject_key(item, after, KEYC_LITERAL|n)); |
return (cmd_send_keys_inject_key(item, after, args, |
|
KEYC_LITERAL|n)); |
} |
} |
|
|
literal = args_has(args, 'l'); |
literal = args_has(args, 'l'); |
if (!literal) { |
if (!literal) { |
key = key_string_lookup_string(s); |
key = key_string_lookup_string(s); |
if (key != KEYC_NONE && key != KEYC_UNKNOWN) { |
if (key != KEYC_NONE && key != KEYC_UNKNOWN) { |
after = cmd_send_keys_inject_key(item, after, key); |
after = cmd_send_keys_inject_key(item, after, args, |
|
key); |
if (after != NULL) |
if (after != NULL) |
return (after); |
return (after); |
} |
} |
|
|
continue; |
continue; |
key = uc; |
key = uc; |
} |
} |
after = cmd_send_keys_inject_key(item, after, key); |
after = cmd_send_keys_inject_key(item, after, args, |
|
key); |
} |
} |
free(ud); |
free(ud); |
} |
} |
|
|
key = options_get_number(s->options, "prefix2"); |
key = options_get_number(s->options, "prefix2"); |
else |
else |
key = options_get_number(s->options, "prefix"); |
key = options_get_number(s->options, "prefix"); |
cmd_send_keys_inject_key(item, item, key); |
cmd_send_keys_inject_key(item, item, args, key); |
return (CMD_RETURN_NORMAL); |
return (CMD_RETURN_NORMAL); |
} |
} |
|
|
|
|
if (args_has(args, 'N') || args_has(args, 'R')) |
if (args_has(args, 'N') || args_has(args, 'R')) |
return (CMD_RETURN_NORMAL); |
return (CMD_RETURN_NORMAL); |
for (; np != 0; np--) |
for (; np != 0; np--) |
cmd_send_keys_inject_key(item, NULL, event->key); |
cmd_send_keys_inject_key(item, NULL, args, event->key); |
return (CMD_RETURN_NORMAL); |
return (CMD_RETURN_NORMAL); |
} |
} |
|
|