fix(terminal): suppress DA response feedback loop after closing vim

Client-side xterm.js was generating Device Attributes responses via
onData, which fed back to the PTY as visible text. Register CSI handlers
to consume query responses on the client and respond to DA1 on the server.
This commit is contained in:
Mohamed Boudra
2026-03-23 12:43:21 +07:00
parent 5efac0dfaf
commit b9b1601bb8
2 changed files with 15 additions and 0 deletions
@@ -211,6 +211,12 @@ export class TerminalEmulatorRuntime {
terminal.loadAddon(new ImageAddon());
// Suppress terminal query responses — the server-side headless xterm handles these.
// Without this, xterm.js generates DA/CPR responses via onData that feed back
// to the PTY as visible text.
terminal.parser.registerCsiHandler({ final: "c" }, () => true);
terminal.parser.registerCsiHandler({ final: "R" }, () => true);
const restoreDocumentStyles = this.applyDocumentBoundsStyles({
root: input.root,
});
+9
View File
@@ -272,6 +272,15 @@ export async function createTerminal(options: CreateTerminalOptions): Promise<Te
},
});
// Respond to DA1 queries (CSI c or CSI 0 c) — apps like nvim query terminal capabilities
terminal.parser.registerCsiHandler({ final: "c" }, (params) => {
if (params.length === 0 || (params.length === 1 && params[0] === 0)) {
ptyProcess.write("\x1b[?62;4;22c");
return true;
}
return false;
});
function emitExit(): void {
if (exitEmitted) {
return;