diff options
author | nicm <nicm> | 2019-04-26 11:38:51 +0000 |
---|---|---|
committer | nicm <nicm> | 2019-04-26 11:38:51 +0000 |
commit | dfb7bb683057d08303955c49073f4b475bd0e2d6 (patch) | |
tree | 3adae7924f831bce4f28ec5aef5528793319ada4 /cmd-set-option.c | |
parent | f1e14f86c4d2467571e20a3dca4a96a3cc357897 (diff) | |
download | rtmux-dfb7bb683057d08303955c49073f4b475bd0e2d6.tar.gz rtmux-dfb7bb683057d08303955c49073f4b475bd0e2d6.tar.bz2 rtmux-dfb7bb683057d08303955c49073f4b475bd0e2d6.zip |
Merge hooks into options and make each one an array option. This allows
multiple commands to be easily bound to one hook. set-hook and
show-hooks remain but they are now variants of set-option and
show-options. show-options now has a -H flag to show hooks (by default
they are not shown).
Diffstat (limited to 'cmd-set-option.c')
-rw-r--r-- | cmd-set-option.c | 39 |
1 files changed, 34 insertions, 5 deletions
diff --git a/cmd-set-option.c b/cmd-set-option.c index edeb8385..7be561f2 100644 --- a/cmd-set-option.c +++ b/cmd-set-option.c @@ -65,6 +65,19 @@ const struct cmd_entry cmd_set_window_option_entry = { .exec = cmd_set_option_exec }; +const struct cmd_entry cmd_set_hook_entry = { + .name = "set-hook", + .alias = NULL, + + .args = { "agRt:u", 1, 2 }, + .usage = "[-agRu] " CMD_TARGET_SESSION_USAGE " hook [command]", + + .target = { 't', CMD_FIND_SESSION, CMD_FIND_CANFAIL }, + + .flags = CMD_AFTERHOOK, + .exec = cmd_set_option_exec +}; + static enum cmd_retval cmd_set_option_exec(struct cmd *self, struct cmdq_item *item) { @@ -87,6 +100,11 @@ cmd_set_option_exec(struct cmd *self, struct cmdq_item *item) c = cmd_find_client(item, NULL, 1); argument = format_single(item, args->argv[0], c, s, wl, NULL); + if (self->entry == &cmd_set_hook_entry && args_has(args, 'R')) { + notify_hook(item, argument); + return (CMD_RETURN_NORMAL); + } + /* Parse option name and index. */ name = options_match(argument, &idx, &ambiguous); if (name == NULL) { @@ -200,8 +218,11 @@ cmd_set_option_exec(struct cmd *self, struct cmdq_item *item) options_default(oo, options_table_entry(o)); else options_remove(o); - } else - options_array_set(o, idx, NULL, 0); + } else if (options_array_set(o, idx, NULL, 0, &cause) != 0) { + cmdq_error(item, "%s", cause); + free(cause); + goto fail; + } } else if (*name == '@') { if (value == NULL) { cmdq_error(item, "empty value"); @@ -222,9 +243,15 @@ cmd_set_option_exec(struct cmd *self, struct cmdq_item *item) if (idx == -1) { if (!append) options_array_clear(o); - options_array_assign(o, value); - } else if (options_array_set(o, idx, value, append) != 0) { - cmdq_error(item, "invalid index: %s", argument); + if (options_array_assign(o, value, &cause) != 0) { + cmdq_error(item, "%s", cause); + free(cause); + goto fail; + } + } else if (options_array_set(o, idx, value, append, + &cause) != 0) { + cmdq_error(item, "%s", cause); + free(cause); goto fail; } } @@ -366,6 +393,8 @@ cmd_set_option_set(struct cmd *self, struct cmdq_item *item, struct options *oo, return (-1); } return (0); + case OPTIONS_TABLE_COMMAND: + break; } return (-1); } |