From d254293a6d406db4b1d1d4cac36cd4225fa0d8a7 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 4 Jul 2018 12:25:26 +0000 Subject: [PATCH] Add pane focus hooks. --- server-client.c | 18 ++++++++++-------- tmux.1 | 8 ++++++++ 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/server-client.c b/server-client.c index 6a94bb56..cec305f0 100644 --- a/server-client.c +++ b/server-client.c @@ -1148,10 +1148,6 @@ server_client_check_focus(struct window_pane *wp) push = wp->flags & PANE_FOCUSPUSH; wp->flags &= ~PANE_FOCUSPUSH; - /* If we don't care about focus, forget it. */ - if (!(wp->base.mode & MODE_FOCUSON)) - return; - /* If we're not the active pane in our window, we're not focused. */ if (wp->window->active != wp) goto not_focused; @@ -1175,14 +1171,20 @@ server_client_check_focus(struct window_pane *wp) } not_focused: - if (push || (wp->flags & PANE_FOCUSED)) - bufferevent_write(wp->event, "\033[O", 3); + if (push || (wp->flags & PANE_FOCUSED)) { + if (wp->base.mode & MODE_FOCUSON) + bufferevent_write(wp->event, "\033[O", 3); + notify_pane("pane-focus-out", wp); + } wp->flags &= ~PANE_FOCUSED; return; focused: - if (push || !(wp->flags & PANE_FOCUSED)) - bufferevent_write(wp->event, "\033[I", 3); + if (push || !(wp->flags & PANE_FOCUSED)) { + if (wp->base.mode & MODE_FOCUSON) + bufferevent_write(wp->event, "\033[I", 3); + notify_pane("pane-focus-in", wp); + } wp->flags |= PANE_FOCUSED; } diff --git a/tmux.1 b/tmux.1 index 329279fd..303a4a30 100644 --- a/tmux.1 +++ b/tmux.1 @@ -3423,6 +3423,14 @@ Run when the program running in a pane exits, but is on so the pane has not closed. .It pane-exited Run when the program running in a pane exits. +.It pane-focus-in +Run when the focus enters a pane, if the +.Ic focus-events +option is on. +.It pane-focus-out +Run when the focus exits a pane, if the +.Ic focus-events +option is on. .It pane-set-clipboard Run when the terminal clipboard is set using the .Xr xterm 1