From 3eb002766fff93e2b374132272b2a892d43c7ef3 Mon Sep 17 00:00:00 2001 From: Armin Ronacher Date: Mon, 25 May 2026 00:55:39 +0200 Subject: [PATCH] fix(tui): enable OSC 8 for Windows Terminal (closes #4923) --- packages/tui/CHANGELOG.md | 1 + packages/tui/src/terminal-image.ts | 6 +++++- packages/tui/test/terminal-image.test.ts | 4 +++- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/packages/tui/CHANGELOG.md b/packages/tui/CHANGELOG.md index f132efd1..045039e9 100644 --- a/packages/tui/CHANGELOG.md +++ b/packages/tui/CHANGELOG.md @@ -5,6 +5,7 @@ ### Fixed - Fixed `Shift+Enter` in Apple Terminal by detecting local macOS modifier state when Terminal.app sends plain Return. +- Fixed Windows Terminal capability detection to enable OSC 8 hyperlinks, preserving clickable long URLs across wrapped lines ([#4923](https://github.com/earendil-works/pi/issues/4923)). ## [0.75.5] - 2026-05-23 diff --git a/packages/tui/src/terminal-image.ts b/packages/tui/src/terminal-image.ts index d6fe13bd..411f82f3 100644 --- a/packages/tui/src/terminal-image.ts +++ b/packages/tui/src/terminal-image.ts @@ -70,6 +70,10 @@ export function detectCapabilities(): TerminalCapabilities { return { images: "iterm2", trueColor: true, hyperlinks: true }; } + if (process.env.WT_SESSION) { + return { images: null, trueColor: true, hyperlinks: true }; + } + if (termProgram === "vscode") { return { images: null, trueColor: true, hyperlinks: true }; } @@ -82,7 +86,7 @@ export function detectCapabilities(): TerminalCapabilities { // text" on terminals that swallow it, which means the URL disappears from // the rendered output. Default to the legacy `text (url)` behavior unless we // have positively identified a hyperlink-capable terminal above. - return { images: null, trueColor: hasTrueColorHint || !!process.env.WT_SESSION, hyperlinks: false }; + return { images: null, trueColor: hasTrueColorHint, hyperlinks: false }; } export function getCapabilities(): TerminalCapabilities { diff --git a/packages/tui/test/terminal-image.test.ts b/packages/tui/test/terminal-image.test.ts index 70fbf9eb..07313939 100644 --- a/packages/tui/test/terminal-image.test.ts +++ b/packages/tui/test/terminal-image.test.ts @@ -273,10 +273,12 @@ describe("detectCapabilities", () => { }); }); - it("detects truecolor for Windows Terminal outside multiplexers", () => { + it("enables truecolor and hyperlinks for Windows Terminal outside multiplexers", () => { withEnv({ WT_SESSION: "session", TERM: "xterm-256color" }, () => { const caps = detectCapabilities(); assert.strictEqual(caps.trueColor, true); + assert.strictEqual(caps.hyperlinks, true); + assert.strictEqual(caps.images, null); }); });