=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/notify.c,v retrieving revision 1.37 retrieving revision 1.38 diff -c -r1.37 -r1.38 *** src/usr.bin/tmux/notify.c 2021/03/16 09:14:58 1.37 --- src/usr.bin/tmux/notify.c 2021/08/12 08:05:11 1.38 *************** *** 1,4 **** ! /* $OpenBSD: notify.c,v 1.37 2021/03/16 09:14:58 nicm Exp $ */ /* * Copyright (c) 2012 George Nachman --- 1,4 ---- ! /* $OpenBSD: notify.c,v 1.38 2021/08/12 08:05:11 nicm Exp $ */ /* * Copyright (c) 2012 George Nachman *************** *** 26,65 **** struct notify_entry { const char *name; 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; --- 26,47 ---- 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; }; 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 options_entry *o; struct options_array_item *a; struct cmd_list *cmdlist; *************** *** 89,96 **** 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); a = options_array_first(o); while (a != NULL) { --- 71,77 ---- return; new_state = cmdq_new_state(&fs, NULL, CMDQ_STATE_NOHOOKS); ! cmdq_add_formats(new_state, ne->formats); a = options_array_first(o); while (a != NULL) { *************** *** 149,154 **** --- 130,136 ---- if (ne->fs.s != NULL) session_remove_ref(ne->fs.s, __func__); + format_free(ne->formats); free((void *)ne->name); free(ne); *************** *** 172,182 **** ne->client = c; ne->session = s; ne->window = w; if (wp != NULL) ! ne->pane = wp->id; ! else ! ne->pane = -1; if (c != NULL) c->references++; --- 154,176 ---- 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) ! format_add(ne->formats, "hook_pane", "%%%d", wp->id); ! format_log_debug(ne->formats, __func__); if (c != NULL) c->references++; *************** *** 208,214 **** --- 202,213 ---- 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