diff options
author | Thomas Adam <thomas@xteddy.org> | 2021-08-22 12:08:05 +0100 |
---|---|---|
committer | Thomas Adam <thomas@xteddy.org> | 2021-08-22 12:08:05 +0100 |
commit | 324f87cf142fb1b7ed8cd738316bdb3f6fa7c1df (patch) | |
tree | c1116c69cccb5f9c2af6dec76886d05e0a6e093e /cmd-bind-key.c | |
parent | 921991c98d6fd596c958b07b5f5aba7c434e8f9f (diff) | |
parent | 0084cbef5ad9f1f860b50fb7c485ac841817b3a8 (diff) | |
download | rtmux-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.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); } |