=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/cmd-set-option.c,v retrieving revision 1.124 retrieving revision 1.125 diff -c -r1.124 -r1.125 *** src/usr.bin/tmux/cmd-set-option.c 2019/04/23 20:36:55 1.124 --- src/usr.bin/tmux/cmd-set-option.c 2019/04/26 11:38:51 1.125 *************** *** 1,4 **** ! /* $OpenBSD: cmd-set-option.c,v 1.124 2019/04/23 20:36:55 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott --- 1,4 ---- ! /* $OpenBSD: cmd-set-option.c,v 1.125 2019/04/26 11:38:51 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott *************** *** 65,70 **** --- 65,83 ---- .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,92 **** --- 100,110 ---- 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,207 **** options_default(oo, options_table_entry(o)); else options_remove(o); ! } else ! options_array_set(o, idx, NULL, 0); } else if (*name == '@') { if (value == NULL) { cmdq_error(item, "empty value"); --- 218,228 ---- options_default(oo, options_table_entry(o)); else options_remove(o); ! } 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,230 **** 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); goto fail; } } --- 243,257 ---- if (idx == -1) { if (!append) options_array_clear(o); ! 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,371 **** --- 393,400 ---- return (-1); } return (0); + case OPTIONS_TABLE_COMMAND: + break; } return (-1); }