aboutsummaryrefslogtreecommitdiff
path: root/hooks.c
diff options
context:
space:
mode:
authornicm <nicm>2015-12-16 21:50:37 +0000
committernicm <nicm>2015-12-16 21:50:37 +0000
commit021c64310daa4ae4c4e8af08f17c994f21237758 (patch)
tree7f0556b343bba058dec19c87c8f52f215cdbd2eb /hooks.c
parent8eb1a7d5dc8d66ca7d17c72e4d8d0e58d6fd2824 (diff)
downloadrtmux-021c64310daa4ae4c4e8af08f17c994f21237758.tar.gz
rtmux-021c64310daa4ae4c4e8af08f17c994f21237758.tar.bz2
rtmux-021c64310daa4ae4c4e8af08f17c994f21237758.zip
Add infrastructure to work out the best target given a pane or window
alone and use it to add pane_died and pane_exited hooks.
Diffstat (limited to 'hooks.c')
-rw-r--r--hooks.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/hooks.c b/hooks.c
index 424faf0c..c1a016ae 100644
--- a/hooks.c
+++ b/hooks.c
@@ -43,6 +43,14 @@ hooks_cmp(struct hook *hook1, struct hook *hook2)
}
struct hooks *
+hooks_get(struct session *s)
+{
+ if (s != NULL)
+ return (s->hooks);
+ return (global_hooks);
+}
+
+struct hooks *
hooks_create(struct hooks *parent)
{
struct hooks *hooks;
@@ -148,7 +156,8 @@ hooks_emptyfn(struct cmd_q *hooks_cmdq)
}
int
-hooks_run(struct hooks *hooks, struct client *c, const char *fmt, ...)
+hooks_run(struct hooks *hooks, struct client *c, struct cmd_find_state *fs,
+ const char *fmt, ...)
{
struct hook *hook;
struct cmd_q *hooks_cmdq;
@@ -169,6 +178,9 @@ hooks_run(struct hooks *hooks, struct client *c, const char *fmt, ...)
hooks_cmdq = cmdq_new(c);
hooks_cmdq->flags |= CMD_Q_NOHOOKS;
+
+ if (fs != NULL)
+ cmd_find_copy_state(&hooks_cmdq->current, fs);
hooks_cmdq->parent = NULL;
cmdq_run(hooks_cmdq, hook->cmdlist, NULL);
@@ -177,7 +189,8 @@ hooks_run(struct hooks *hooks, struct client *c, const char *fmt, ...)
}
int
-hooks_wait(struct hooks *hooks, struct cmd_q *cmdq, const char *fmt, ...)
+hooks_wait(struct hooks *hooks, struct cmd_q *cmdq, struct cmd_find_state *fs,
+ const char *fmt, ...)
{
struct hook *hook;
struct cmd_q *hooks_cmdq;
@@ -198,6 +211,9 @@ hooks_wait(struct hooks *hooks, struct cmd_q *cmdq, const char *fmt, ...)
hooks_cmdq = cmdq_new(cmdq->client);
hooks_cmdq->flags |= CMD_Q_NOHOOKS;
+
+ if (fs != NULL)
+ cmd_find_copy_state(&hooks_cmdq->current, fs);
hooks_cmdq->parent = cmdq;
hooks_cmdq->emptyfn = hooks_emptyfn;