diff options
author | nicm <nicm> | 2021-08-21 20:46:43 +0000 |
---|---|---|
committer | nicm <nicm> | 2021-08-21 20:46:43 +0000 |
commit | 069f5925af8bf70a99eec7f4baf5772707e62def (patch) | |
tree | 8898596f1984869585d0bf546d4efa5c9d313dde /cmd-bind-key.c | |
parent | 326d2ef234cd8838700e914a0d780f46be50904c (diff) | |
download | rtmux-069f5925af8bf70a99eec7f4baf5772707e62def.tar.gz rtmux-069f5925af8bf70a99eec7f4baf5772707e62def.tar.bz2 rtmux-069f5925af8bf70a99eec7f4baf5772707e62def.zip |
Preserve argument type in command and convert to string on demand.
Diffstat (limited to 'cmd-bind-key.c')
-rw-r--r-- | cmd-bind-key.c | 45 |
1 files changed, 27 insertions, 18 deletions
diff --git a/cmd-bind-key.c b/cmd-bind-key.c index 97057b3a..4a6c8541 100644 --- a/cmd-bind-key.c +++ b/cmd-bind-key.c @@ -50,6 +50,7 @@ cmd_bind_key_exec(struct cmd *self, struct cmdq_item *item) struct cmd_parse_result *pr; char **argv; int argc, repeat; + struct args_value *value; u_int count = args_count(args); key = key_string_lookup_string(args_string(args, 0)); @@ -66,24 +67,32 @@ cmd_bind_key_exec(struct cmd *self, struct cmdq_item *item) tablename = "prefix"; repeat = args_has(args, 'r'); - if (count != 1) { - if (count == 2) - pr = cmd_parse_from_string(args_string(args, 1), NULL); - else { - args_vector(args, &argc, &argv); - pr = cmd_parse_from_arguments(argc - 1, argv + 1, NULL); - cmd_free_argv(argc, argv); - } - switch (pr->status) { - case CMD_PARSE_ERROR: - cmdq_error(item, "%s", pr->error); - free(pr->error); - return (CMD_RETURN_ERROR); - case CMD_PARSE_SUCCESS: - break; - } - key_bindings_add(tablename, key, note, repeat, pr->cmdlist); - } else + if (count == 1) { key_bindings_add(tablename, key, note, repeat, NULL); + return (CMD_RETURN_NORMAL); + } + + value = args_value(args, 1); + if (count == 2 && value->type == ARGS_COMMANDS) { + key_bindings_add(tablename, key, note, repeat, value->cmdlist); + return (CMD_RETURN_NORMAL); + } + + if (count == 2) + pr = cmd_parse_from_string(args_string(args, 1), NULL); + else { + args_vector(args, &argc, &argv); + pr = cmd_parse_from_arguments(argc - 1, argv + 1, NULL); + cmd_free_argv(argc, argv); + } + switch (pr->status) { + case CMD_PARSE_ERROR: + cmdq_error(item, "%s", pr->error); + free(pr->error); + return (CMD_RETURN_ERROR); + case CMD_PARSE_SUCCESS: + break; + } + key_bindings_add(tablename, key, note, repeat, pr->cmdlist); return (CMD_RETURN_NORMAL); } |