From 021c64310daa4ae4c4e8af08f17c994f21237758 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 16 Dec 2015 21:50:37 +0000 Subject: 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. --- server-fn.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'server-fn.c') diff --git a/server-fn.c b/server-fn.c index a4c2dfea..0f35aaaf 100644 --- a/server-fn.c +++ b/server-fn.c @@ -293,12 +293,13 @@ server_unlink_window(struct session *s, struct winlink *wl) } void -server_destroy_pane(struct window_pane *wp) +server_destroy_pane(struct window_pane *wp, int hooks) { struct window *w = wp->window; int old_fd; struct screen_write_ctx ctx; struct grid_cell gc; + struct cmd_find_state fs; old_fd = wp->fd; if (wp->fd != -1) { @@ -319,6 +320,9 @@ server_destroy_pane(struct window_pane *wp) screen_write_puts(&ctx, &gc, "Pane is dead"); screen_write_stop(&ctx); wp->flags |= PANE_REDRAW; + + if (hooks && cmd_find_from_pane(&fs, wp) == 0) + hooks_run(hooks_get(fs.s), NULL, &fs, "pane-died"); return; } @@ -326,6 +330,9 @@ server_destroy_pane(struct window_pane *wp) layout_close_pane(wp); window_remove_pane(w, wp); + if (hooks && cmd_find_from_window(&fs, w) == 0) + hooks_run(hooks_get(fs.s), NULL, &fs, "pane-exited"); + if (TAILQ_EMPTY(&w->panes)) server_kill_window(w); else -- cgit