=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/cmd-queue.c,v retrieving revision 1.38 retrieving revision 1.39 diff -c -r1.38 -r1.39 *** src/usr.bin/tmux/cmd-queue.c 2016/10/11 13:21:59 1.38 --- src/usr.bin/tmux/cmd-queue.c 2016/10/13 10:01:49 1.39 *************** *** 1,4 **** ! /* $OpenBSD: cmd-queue.c,v 1.38 2016/10/11 13:21:59 nicm Exp $ */ /* * Copyright (c) 2013 Nicholas Marriott --- 1,4 ---- ! /* $OpenBSD: cmd-queue.c,v 1.39 2016/10/13 10:01:49 nicm Exp $ */ /* * Copyright (c) 2013 Nicholas Marriott *************** *** 182,194 **** item->mouse.valid = 0; } /* Process one command. */ static enum cmd_retval cmdq_continue_one(struct cmd_q *cmdq) { struct cmd *cmd = cmdq->cmd; const char *name = cmd->entry->name; - struct session *s; struct hooks *hooks; enum cmd_retval retval; char *tmp; --- 182,211 ---- item->mouse.valid = 0; } + /* Find hooks list. */ + static struct hooks * + cmdq_get_hooks(struct cmd_q *cmdq) + { + struct session *s; + + s = NULL; + if (cmdq->state.tflag.s != NULL) + s = cmdq->state.tflag.s; + else if (cmdq->state.sflag.s != NULL) + s = cmdq->state.sflag.s; + else if (cmdq->state.c != NULL) + s = cmdq->state.c->session; + if (s != NULL) + return (s->hooks); + return (global_hooks); + } + /* Process one command. */ static enum cmd_retval cmdq_continue_one(struct cmd_q *cmdq) { struct cmd *cmd = cmdq->cmd; const char *name = cmd->entry->name; struct hooks *hooks; enum cmd_retval retval; char *tmp; *************** *** 208,225 **** goto error; if (~cmdq->flags & CMD_Q_NOHOOKS) { ! s = NULL; ! if (cmdq->state.tflag.s != NULL) ! s = cmdq->state.tflag.s; ! else if (cmdq->state.sflag.s != NULL) ! s = cmdq->state.sflag.s; ! else if (cmdq->state.c != NULL) ! s = cmdq->state.c->session; ! if (s != NULL) ! hooks = s->hooks; ! else ! hooks = global_hooks; ! if (~cmdq->flags & CMD_Q_REENTRY) { cmdq->flags |= CMD_Q_REENTRY; if (hooks_wait(hooks, cmdq, NULL, --- 225,231 ---- goto error; if (~cmdq->flags & CMD_Q_NOHOOKS) { ! hooks = cmdq_get_hooks(cmdq); if (~cmdq->flags & CMD_Q_REENTRY) { cmdq->flags |= CMD_Q_REENTRY; if (hooks_wait(hooks, cmdq, NULL, *************** *** 236,244 **** if (retval == CMD_RETURN_ERROR) goto error; ! if (hooks != NULL && hooks_wait(hooks, cmdq, NULL, ! "after-%s", name) == 0) ! retval = CMD_RETURN_WAIT; cmdq_guard(cmdq, "end", flags); return (retval); --- 242,254 ---- if (retval == CMD_RETURN_ERROR) goto error; ! if (hooks != NULL) { ! if (cmd_prepare_state(cmd, cmdq, cmdq->parent) != 0) ! goto error; ! hooks = cmdq_get_hooks(cmdq); ! if (hooks_wait(hooks, cmdq, NULL, "after-%s", name) == 0) ! retval = CMD_RETURN_WAIT; ! } cmdq_guard(cmdq, "end", flags); return (retval); *************** *** 260,265 **** --- 270,277 ---- cmdq->references++; notify_disable(); + + cmd_find_clear_state(&cmdq->current, NULL, 0); log_debug("continuing cmdq %p: flags %#x, client %p", cmdq, cmdq->flags, c);