version 1.38, 2016/10/11 13:21:59 |
version 1.39, 2016/10/13 10:01:49 |
|
|
item->mouse.valid = 0; |
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. */ |
/* Process one command. */ |
static enum cmd_retval |
static enum cmd_retval |
cmdq_continue_one(struct cmd_q *cmdq) |
cmdq_continue_one(struct cmd_q *cmdq) |
{ |
{ |
struct cmd *cmd = cmdq->cmd; |
struct cmd *cmd = cmdq->cmd; |
const char *name = cmd->entry->name; |
const char *name = cmd->entry->name; |
struct session *s; |
|
struct hooks *hooks; |
struct hooks *hooks; |
enum cmd_retval retval; |
enum cmd_retval retval; |
char *tmp; |
char *tmp; |
|
|
goto error; |
goto error; |
|
|
if (~cmdq->flags & CMD_Q_NOHOOKS) { |
if (~cmdq->flags & CMD_Q_NOHOOKS) { |
s = NULL; |
hooks = cmdq_get_hooks(cmdq); |
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) { |
if (~cmdq->flags & CMD_Q_REENTRY) { |
cmdq->flags |= CMD_Q_REENTRY; |
cmdq->flags |= CMD_Q_REENTRY; |
if (hooks_wait(hooks, cmdq, NULL, |
if (hooks_wait(hooks, cmdq, NULL, |
|
|
if (retval == CMD_RETURN_ERROR) |
if (retval == CMD_RETURN_ERROR) |
goto error; |
goto error; |
|
|
if (hooks != NULL && hooks_wait(hooks, cmdq, NULL, |
if (hooks != NULL) { |
"after-%s", name) == 0) |
if (cmd_prepare_state(cmd, cmdq, cmdq->parent) != 0) |
retval = CMD_RETURN_WAIT; |
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); |
cmdq_guard(cmdq, "end", flags); |
|
|
return (retval); |
return (retval); |
|
|
|
|
cmdq->references++; |
cmdq->references++; |
notify_disable(); |
notify_disable(); |
|
|
|
cmd_find_clear_state(&cmdq->current, NULL, 0); |
|
|
log_debug("continuing cmdq %p: flags %#x, client %p", cmdq, cmdq->flags, |
log_debug("continuing cmdq %p: flags %#x, client %p", cmdq, cmdq->flags, |
c); |
c); |