From 19812b2d29e305927461c26651a3d228c22d928a Mon Sep 17 00:00:00 2001
From: nicm <nicm>
Date: Fri, 6 Aug 2021 09:19:02 +0000
Subject: [PATCH] Add client focus hooks.

---
 options-table.c | 2 ++
 tmux.1          | 4 ++++
 tty-keys.c      | 7 +++++--
 3 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/options-table.c b/options-table.c
index a4b85fd2..e0ae993a 100644
--- a/options-table.c
+++ b/options-table.c
@@ -1148,6 +1148,8 @@ const struct options_table_entry options_table[] = {
 	OPTIONS_TABLE_HOOK("client-active", ""),
 	OPTIONS_TABLE_HOOK("client-attached", ""),
 	OPTIONS_TABLE_HOOK("client-detached", ""),
+ 	OPTIONS_TABLE_HOOK("client-focus-in", ""),
+ 	OPTIONS_TABLE_HOOK("client-focus-out", ""),
 	OPTIONS_TABLE_HOOK("client-resized", ""),
 	OPTIONS_TABLE_HOOK("client-session-changed", ""),
 	OPTIONS_TABLE_PANE_HOOK("pane-died", ""),
diff --git a/tmux.1 b/tmux.1
index 0abb4c76..00b90fe7 100644
--- a/tmux.1
+++ b/tmux.1
@@ -4402,6 +4402,10 @@ Run when a client becomes the latest active client of its session.
 Run when a client is attached.
 .It client-detached
 Run when a client is detached
+.It client-focus-in
+Run when focus enters a client
+.It client-focus-out
+Run when focus exits a client
 .It client-resized
 Run when a client is resized.
 .It client-session-changed
diff --git a/tty-keys.c b/tty-keys.c
index 3012be3d..02fba0e5 100644
--- a/tty-keys.c
+++ b/tty-keys.c
@@ -820,10 +820,13 @@ complete_key:
 	tty->flags &= ~TTY_TIMER;
 
 	/* Check for focus events. */
-	if (key == KEYC_FOCUS_OUT)
+	if (key == KEYC_FOCUS_OUT) {
 		tty->client->flags &= ~CLIENT_FOCUSED;
-	else if (key == KEYC_FOCUS_IN)
+		notify_client("client-focus-out", c);
+	} else if (key == KEYC_FOCUS_IN) {
 		tty->client->flags |= CLIENT_FOCUSED;
+		notify_client("client-focus-in", c);
+	}
 
 	/* Fire the key. */
 	if (key != KEYC_UNKNOWN) {