diff options
author | nicm <nicm> | 2021-08-12 08:05:11 +0000 |
---|---|---|
committer | nicm <nicm> | 2021-08-12 08:05:11 +0000 |
commit | 163908fe8a0af8cf2d24510415bd4f81ace3a4d1 (patch) | |
tree | 0ec5a7b224bde8202977798b49d7dc2ee6ff0a7b /notify.c | |
parent | 7eea3d7ab850bb8fbeeccbb4b0fe84b9274965af (diff) | |
download | rtmux-163908fe8a0af8cf2d24510415bd4f81ace3a4d1.tar.gz rtmux-163908fe8a0af8cf2d24510415bd4f81ace3a4d1.tar.bz2 rtmux-163908fe8a0af8cf2d24510415bd4f81ace3a4d1.zip |
Move hook format setup earlier and add a hook_client, GitHub issue 2809.
Diffstat (limited to 'notify.c')
-rw-r--r-- | notify.c | 49 |
1 files changed, 24 insertions, 25 deletions
@@ -26,40 +26,22 @@ struct notify_entry { const char *name; + struct cmd_find_state fs; + struct format_tree *formats; struct client *client; struct session *session; struct window *window; int pane; - - struct cmd_find_state fs; }; static void -notify_hook_formats(struct cmdq_state *state, struct session *s, - struct window *w, int pane) -{ - if (s != NULL) { - cmdq_add_format(state, "hook_session", "$%u", s->id); - cmdq_add_format(state, "hook_session_name", "%s", s->name); - } - if (w != NULL) { - cmdq_add_format(state, "hook_window", "@%u", w->id); - cmdq_add_format(state, "hook_window_name", "%s", w->name); - } - if (pane != -1) - cmdq_add_format(state, "hook_pane", "%%%d", pane); -} - -static void notify_insert_hook(struct cmdq_item *item, struct notify_entry *ne) { struct cmd_find_state fs; struct options *oo; struct cmdq_item *new_item; struct cmdq_state *new_state; - struct session *s = ne->session; - struct window *w = ne->window; struct options_entry *o; struct options_array_item *a; struct cmd_list *cmdlist; @@ -89,8 +71,7 @@ notify_insert_hook(struct cmdq_item *item, struct notify_entry *ne) return; new_state = cmdq_new_state(&fs, NULL, CMDQ_STATE_NOHOOKS); - cmdq_add_format(new_state, "hook", "%s", ne->name); - notify_hook_formats(new_state, s, w, ne->pane); + cmdq_add_formats(new_state, ne->formats); a = options_array_first(o); while (a != NULL) { @@ -149,6 +130,7 @@ notify_callback(struct cmdq_item *item, void *data) if (ne->fs.s != NULL) session_remove_ref(ne->fs.s, __func__); + format_free(ne->formats); free((void *)ne->name); free(ne); @@ -172,11 +154,23 @@ notify_add(const char *name, struct cmd_find_state *fs, struct client *c, ne->client = c; ne->session = s; ne->window = w; + ne->pane = (wp != NULL ? wp->id : -1); + ne->formats = format_create(NULL, NULL, 0, FORMAT_NOJOBS); + format_add(ne->formats, "hook", "%s", name); + if (c != NULL) + format_add(ne->formats, "hook_client", "%s", c->name); + if (s != NULL) { + format_add(ne->formats, "hook_session", "$%u", s->id); + format_add(ne->formats, "hook_session_name", "%s", s->name); + } + if (w != NULL) { + format_add(ne->formats, "hook_window", "@%u", w->id); + format_add(ne->formats, "hook_window_name", "%s", w->name); + } if (wp != NULL) - ne->pane = wp->id; - else - ne->pane = -1; + format_add(ne->formats, "hook_pane", "%%%d", wp->id); + format_log_debug(ne->formats, __func__); if (c != NULL) c->references++; @@ -208,7 +202,12 @@ notify_hook(struct cmdq_item *item, const char *name) ne.window = target->w; ne.pane = target->wp->id; + ne.formats = format_create(NULL, NULL, 0, FORMAT_NOJOBS); + format_add(ne.formats, "hook", "%s", name); + format_log_debug(ne.formats, __func__); + notify_insert_hook(item, &ne); + format_free(ne.formats); } void |