Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | 1x 1x 1x 3x 3x 3x 3x 3x 1x 1x 2x 2x 2x 2x 2x 2x 2x 3x 3x 3x 2x 2x 2x 2x 2x 2x 2x 2x 3x 2x 2x 2x 2x | import * as vscode from "vscode";
import { ShellIntegrationAccumulator } from "./extract-output";
import type { TerminalOutputRegisterDeps, VSCodeWindowWithProposed } from "./types";
/**
* Proposed API: global terminal PTY write stream (when available).
* One shared ShellIntegrationAccumulator across chunks (matches legacy extension behavior).
*/
export function registerProposedGlobalTerminalOutput(
context: vscode.ExtensionContext,
deps: TerminalOutputRegisterDeps,
): boolean {
const windowAny = vscode.window as unknown as VSCodeWindowWithProposed;
if (typeof windowAny.onDidWriteTerminalData !== "function") {
return false;
}
const onDidWriteTerminalData = windowAny.onDidWriteTerminalData;
const acc = new ShellIntegrationAccumulator();
let bufRaw = "";
let timer: ReturnType<typeof setTimeout> | null = null;
const { maxChars, debounceMs, emitOutput } = deps;
context.subscriptions.push(
onDidWriteTerminalData((e: { data: string }) => {
bufRaw += e.data;
if (timer) clearTimeout(timer);
timer = setTimeout(() => {
const raw = bufRaw;
bufRaw = "";
timer = null;
const output = acc
.process(raw)
.slice(-maxChars)
.trim();
if (output) emitOutput(output);
}, debounceMs);
}),
);
return true;
}
|