aboutsummaryrefslogtreecommitdiff
path: root/cmd-bind-key.c
diff options
context:
space:
mode:
authorThomas Adam <thomas@xteddy.org>2021-08-22 12:08:05 +0100
committerThomas Adam <thomas@xteddy.org>2021-08-22 12:08:05 +0100
commit324f87cf142fb1b7ed8cd738316bdb3f6fa7c1df (patch)
treec1116c69cccb5f9c2af6dec76886d05e0a6e093e /cmd-bind-key.c
parent921991c98d6fd596c958b07b5f5aba7c434e8f9f (diff)
parent0084cbef5ad9f1f860b50fb7c485ac841817b3a8 (diff)
downloadrtmux-324f87cf142fb1b7ed8cd738316bdb3f6fa7c1df.tar.gz
rtmux-324f87cf142fb1b7ed8cd738316bdb3f6fa7c1df.tar.bz2
rtmux-324f87cf142fb1b7ed8cd738316bdb3f6fa7c1df.zip
Merge branch 'obsd-master' into master
Diffstat (limited to 'cmd-bind-key.c')
-rw-r--r--cmd-bind-key.c45
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);
}