From e015ebefabc82967e77be0028e978c58e19a9039 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 16 May 2025 12:48:21 +0530 Subject: [PATCH] Implement focus tracking in kitten infrastructure --- tools/tui/loop/api.go | 3 +++ tools/tui/loop/run.go | 6 ++++++ tools/tui/loop/terminal-state.go | 4 ++-- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/tools/tui/loop/api.go b/tools/tui/loop/api.go index 4c702546f..5baad0dff 100644 --- a/tools/tui/loop/api.go +++ b/tools/tui/loop/api.go @@ -121,6 +121,9 @@ type Loop struct { // Called when the terminal's color scheme changes OnColorSchemeChange func(ColorPreference) error + + // Called on focus in/out events + OnFocusChange func(bool) error } func New(options ...func(self *Loop)) (*Loop, error) { diff --git a/tools/tui/loop/run.go b/tools/tui/loop/run.go index 7a5a87976..f97cabceb 100644 --- a/tools/tui/loop/run.go +++ b/tools/tui/loop/run.go @@ -113,6 +113,12 @@ func (self *Loop) handle_csi(raw []byte) (err error) { return nil } } + } else if csi == "I" || csi == "O" { + if self.OnFocusChange != nil { + return self.OnFocusChange(csi == "I") + } + return nil + } ke := KeyEventFromCSI(csi) if ke != nil { diff --git a/tools/tui/loop/terminal-state.go b/tools/tui/loop/terminal-state.go index 286f6b643..7d6468b10 100644 --- a/tools/tui/loop/terminal-state.go +++ b/tools/tui/loop/terminal-state.go @@ -129,9 +129,9 @@ func (self *TerminalStateOptions) SetStateEscapeCodes() string { } sb.WriteString(DECSACE_DEFAULT_REGION_SELECT) reset_modes(&sb, - IRM, DECKM, DECSCNM, BRACKETED_PASTE, FOCUS_TRACKING, + IRM, DECKM, DECSCNM, BRACKETED_PASTE, MOUSE_BUTTON_TRACKING, MOUSE_MOTION_TRACKING, MOUSE_MOVE_TRACKING, MOUSE_UTF8_MODE, MOUSE_SGR_MODE) - set_modes(&sb, DECARM, DECAWM, DECTCEM) + set_modes(&sb, DECARM, DECAWM, DECTCEM, FOCUS_TRACKING) if self.in_band_resize_notification { set_modes(&sb, INBAND_RESIZE_NOTIFICATION) }