From ece0a2f4cc0d46941962d186c1cfb33d13090432 Mon Sep 17 00:00:00 2001 From: Nat Thrower Date: Fri, 15 May 2026 21:51:12 -0400 Subject: [PATCH] fix(tui): repaint + sync mouse mode when display.mouse_tracking changes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two interacting bugs left the TUI blank when `display.mouse_tracking` switched at runtime (config edit, /mouse ): 1. AlternateScreen's effect re-runs on every `mouseTracking` change, tearing down and re-entering the alt screen. After re-entry, ink's frame buffers are reset by `resetFramesForAltScreen()` but nothing schedules the follow-up render — the alt screen sits blank until some other state change happens to trigger one. Add a `scheduleRender()` in `setAltScreenActive`'s active=true branch so the freshly-entered alt screen gets a full repaint immediately. 2. `setAltScreenActive` early-returns when `active` hasn't changed, which silently drops a `mouseTracking` change if the cleanup→setup pair somehow leaves `altScreenActive` already true. Call `setAltScreenMouseTracking` explicitly from the AlternateScreen effect so the in-memory mode and terminal DECSET sequence stay in sync regardless of how `setAltScreenActive` resolved (the call is a no-op when the mode is unchanged). --- .../packages/hermes-ink/src/ink/components/AlternateScreen.tsx | 1 + ui-tui/packages/hermes-ink/src/ink/ink.tsx | 1 + 2 files changed, 2 insertions(+) diff --git a/ui-tui/packages/hermes-ink/src/ink/components/AlternateScreen.tsx b/ui-tui/packages/hermes-ink/src/ink/components/AlternateScreen.tsx index d3cdb6e481b..7a5fa3c7f27 100644 --- a/ui-tui/packages/hermes-ink/src/ink/components/AlternateScreen.tsx +++ b/ui-tui/packages/hermes-ink/src/ink/components/AlternateScreen.tsx @@ -75,6 +75,7 @@ export function AlternateScreen(t0: Props) { (enableMouse || DISABLE_MOUSE_TRACKING) ) ink?.setAltScreenActive(true, mouseTracking) + ink?.setAltScreenMouseTracking(mouseTracking) return () => { ink?.setAltScreenActive(false) diff --git a/ui-tui/packages/hermes-ink/src/ink/ink.tsx b/ui-tui/packages/hermes-ink/src/ink/ink.tsx index 512a3c862b1..cc48f6a8bf0 100644 --- a/ui-tui/packages/hermes-ink/src/ink/ink.tsx +++ b/ui-tui/packages/hermes-ink/src/ink/ink.tsx @@ -1272,6 +1272,7 @@ export default class Ink { if (active) { this.resetFramesForAltScreen() + this.scheduleRender() } else { this.repaint() }