diff --git a/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts b/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts index 84bde0d8006..b24312642f4 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts @@ -1459,23 +1459,22 @@ export class TerminalInstance extends Disposable implements ITerminalInstance { } private _onProcessData(ev: IProcessDataEvent): void { - const messageId = ++this._latestXtermWriteData; if (ev.trackCommit) { - ev.writePromise = new Promise(r => { - this.xterm?.raw.write(ev.data, () => { - this._latestXtermParseData = messageId; - this._processManager.acknowledgeDataEvent(ev.data.length); - r(); - }); - }); + ev.writePromise = new Promise(r => this._writeProcessData(ev, r)); } else { - this.xterm?.raw.write(ev.data, () => { - this._latestXtermParseData = messageId; - this._processManager.acknowledgeDataEvent(ev.data.length); - }); + this._writeProcessData(ev); } } + private _writeProcessData(ev: IProcessDataEvent, cb?: () => void) { + const messageId = ++this._latestXtermWriteData; + this.xterm?.raw.write(ev.data, () => { + this._latestXtermParseData = messageId; + this._processManager.acknowledgeDataEvent(ev.data.length); + cb?.(); + }); + } + /** * Called when either a process tied to a terminal has exited or when a terminal renderer * simulates a process exiting (e.g. custom execution task).