From abd0c47b03214c65c23e5fad8329dcd388cd1b84 Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Fri, 30 Jan 2026 17:07:31 +0100 Subject: [PATCH] perf(tui): use startsWith short-circuit in isImageLine --- packages/tui/src/terminal-image.ts | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/tui/src/terminal-image.ts b/packages/tui/src/terminal-image.ts index 0199ac94..e706fedc 100644 --- a/packages/tui/src/terminal-image.ts +++ b/packages/tui/src/terminal-image.ts @@ -81,10 +81,16 @@ export function resetCapabilitiesCache(): void { cachedCapabilities = null; } +const KITTY_PREFIX = "\x1b_G"; +const ITERM2_PREFIX = "\x1b]1337;File="; + export function isImageLine(line: string): boolean { - // Check for Kitty or iTerm2 image escape sequences anywhere in the line - // This prevents width checks from failing on lines containing image data - return line.includes("\x1b_G") || line.includes("\x1b]1337;File="); + // Fast path: sequence at line start (single-row images) + if (line.startsWith(KITTY_PREFIX) || line.startsWith(ITERM2_PREFIX)) { + return true; + } + // Slow path: sequence elsewhere (multi-row images have cursor-up prefix) + return line.includes(KITTY_PREFIX) || line.includes(ITERM2_PREFIX); } /**