From 2ee6d867bd93bb955429a274865320dfa5bd0f69 Mon Sep 17 00:00:00 2001 From: haoyuren <13851610112@163.com> Date: Fri, 13 Mar 2026 22:35:05 -0500 Subject: Fix embedded terminal for Claude Code: PTY env, DEC 2026, xterm.js window queries - Add missing PTY environment variables (TERM, COLORTERM, LANG, TERM_PROGRAM) - Strip DEC 2026 synchronized output sequences that cause xterm.js to buffer indefinitely when begin/end markers are split across PTY chunks - Enable xterm.js windowOptions for terminal pixel/char size queries that Claude Code sends to determine rendering capabilities - Launch Claude tab via login shell for full PATH inheritance Co-Authored-By: Claude Opus 4.6 --- src/main/index.ts | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'src/main') diff --git a/src/main/index.ts b/src/main/index.ts index d4d9b2d..96a225c 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -100,18 +100,28 @@ ipcMain.handle('pty:spawn', async (_e, id: string, cwd: string, cmd?: string, ar const shellPath = cmd || process.env.SHELL || '/bin/zsh' const shellArgs = args || ['-l'] + const ptyEnv: Record = { + ...(process.env as Record), + TERM: 'xterm-256color', + COLORTERM: 'truecolor', + TERM_PROGRAM: 'LatteX', + LANG: process.env.LANG || 'en_US.UTF-8', + } const instance = pty.spawn(shellPath, shellArgs, { name: 'xterm-256color', cols: 80, rows: 24, cwd, - env: process.env as Record + env: ptyEnv }) ptyInstances.set(id, instance) instance.onData((data) => { - sendToRenderer(`pty:data:${id}`, data) + // Strip DEC 2026 synchronized output sequences — xterm.js may buffer indefinitely + // if the begin/end markers are split across PTY chunks + const cleaned = data.replace(/\x1b\[\?2026[hl]/g, '') + if (cleaned) sendToRenderer(`pty:data:${id}`, cleaned) }) instance.onExit(() => { -- cgit v1.2.3