From 65f53d53b1b6ea2577e196a74251c13505497dcc Mon Sep 17 00:00:00 2001 From: Alex Ross Date: Fri, 5 Jul 2019 17:57:03 +0200 Subject: [PATCH] Changes to terminal to enable Tasks use of TerminalVirtualProcess --- .../api/browser/mainThreadTerminalService.ts | 9 +++++++-- .../workbench/api/node/extHostTerminalService.ts | 14 ++++++++------ 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/vs/workbench/api/browser/mainThreadTerminalService.ts b/src/vs/workbench/api/browser/mainThreadTerminalService.ts index 29b4c6703a6..b781eb6ac2f 100644 --- a/src/vs/workbench/api/browser/mainThreadTerminalService.ts +++ b/src/vs/workbench/api/browser/mainThreadTerminalService.ts @@ -262,8 +262,13 @@ export class MainThreadTerminalService implements MainThreadTerminalServiceShape } private _onTerminalRequestVirtualProcess(proxy: ITerminalProcessExtHostProxy): void { - this._terminalProcessesReady[proxy.terminalId](proxy); - delete this._terminalProcessesReady[proxy.terminalId]; + const ready = this._terminalProcessesReady[proxy.terminalId]; + if (!ready) { + this._terminalProcesses[proxy.terminalId] = Promise.resolve(proxy); + } else { + ready(proxy); + delete this._terminalProcessesReady[proxy.terminalId]; + } // Note that onReisze is not being listened to here as it needs to fire when max dimensions // change, excluding the dimension override diff --git a/src/vs/workbench/api/node/extHostTerminalService.ts b/src/vs/workbench/api/node/extHostTerminalService.ts index 744c0ca3c2c..7624476c887 100644 --- a/src/vs/workbench/api/node/extHostTerminalService.ts +++ b/src/vs/workbench/api/node/extHostTerminalService.ts @@ -337,7 +337,7 @@ export class ExtHostTerminalService implements ExtHostTerminalServiceShape { return terminal; } - public async attachVirtualProcessToTerminal(id: number, virtualProcess: vscode.TerminalVirtualProcess): Promise { + public attachVirtualProcessToTerminal(id: number, virtualProcess: vscode.TerminalVirtualProcess) { const terminal = this._getTerminalById(id); if (!terminal) { throw new Error(`Cannot resolve terminal with id ${id} for virtual process`); @@ -411,7 +411,7 @@ export class ExtHostTerminalService implements ExtHostTerminalServiceShape { } return; } - this._performTerminalIdAction(id, terminal => { + this.performTerminalIdAction(id, terminal => { if (terminal) { this._activeTerminal = terminal; if (original !== this._activeTerminal) { @@ -496,10 +496,10 @@ export class ExtHostTerminalService implements ExtHostTerminalServiceShape { } public $acceptTerminalProcessId(id: number, processId: number): void { - this._performTerminalIdAction(id, terminal => terminal._setProcessId(processId)); + this.performTerminalIdAction(id, terminal => terminal._setProcessId(processId)); } - private _performTerminalIdAction(id: number, callback: (terminal: ExtHostTerminal) => void): void { + public performTerminalIdAction(id: number, callback: (terminal: ExtHostTerminal) => void): void { let terminal = this._getTerminalById(id); if (terminal) { callback(terminal); @@ -721,7 +721,7 @@ class ApiRequest { } } -class ExtHostVirtualProcess implements ITerminalChildProcess { +export class ExtHostVirtualProcess implements ITerminalChildProcess { private _queuedEvents: (IQueuedEvent | IQueuedEvent | IQueuedEvent<{ pid: number, cwd: string }> | IQueuedEvent)[] = []; private _queueDisposables: IDisposable[] | undefined; @@ -786,7 +786,9 @@ class ExtHostVirtualProcess implements ITerminalChildProcess { this._queueDisposables = undefined; // Attach the real listeners - this._virtualProcess.onDidWrite(e => this._onProcessData.fire(e)); + this._virtualProcess.onDidWrite(e => { + this._onProcessData.fire(e); + }); if (this._virtualProcess.onDidExit) { this._virtualProcess.onDidExit(e => this._onProcessExit.fire(e)); } -- GitLab