From 29303c819d101726826a68fed2190fa692cbbd50 Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Mon, 1 Jul 2019 16:14:13 -0700 Subject: [PATCH] Get input working --- src/vs/vscode.proposed.d.ts | 4 ++-- .../api/browser/mainThreadTerminalService.ts | 5 ++++- .../api/node/extHostTerminalService.ts | 18 ++++++------------ .../terminal/browser/terminalProcessManager.ts | 9 ++++++++- 4 files changed, 20 insertions(+), 16 deletions(-) diff --git a/src/vs/vscode.proposed.d.ts b/src/vs/vscode.proposed.d.ts index df2dc250d13..a545270f657 100644 --- a/src/vs/vscode.proposed.d.ts +++ b/src/vs/vscode.proposed.d.ts @@ -1294,9 +1294,9 @@ declare module 'vscode' { onDidChangeDimensions?(dimensions: TerminalDimensions): void; /** - * F + * This is called when the user closes the terminal. */ - onDidShutdownTerminal(): void; + onDidShutdownTerminal?(): void; } //#endregion diff --git a/src/vs/workbench/api/browser/mainThreadTerminalService.ts b/src/vs/workbench/api/browser/mainThreadTerminalService.ts index 558df53ba74..81e26f293e0 100644 --- a/src/vs/workbench/api/browser/mainThreadTerminalService.ts +++ b/src/vs/workbench/api/browser/mainThreadTerminalService.ts @@ -262,7 +262,10 @@ export class MainThreadTerminalService implements MainThreadTerminalServiceShape private _onTerminalRequestVirtualProcess(proxy: ITerminalProcessExtHostProxy): void { console.log('_onTerminalRequestVirtualProcess', proxy); this._terminalProcesses[proxy.terminalId] = proxy; - proxy.onInput(data => this._proxy.$acceptProcessInput(proxy.terminalId, data)); + proxy.onInput(data => { + console.log('_onTerminalRequestVirtualProcess onInput', data); + this._proxy.$acceptProcessInput(proxy.terminalId, data); + }); proxy.onResize(dimensions => this._proxy.$acceptProcessResize(proxy.terminalId, dimensions.cols, dimensions.rows)); proxy.onShutdown(immediate => this._proxy.$acceptProcessShutdown(proxy.terminalId, immediate)); proxy.onRequestCwd(() => this._proxy.$acceptProcessRequestCwd(proxy.terminalId)); diff --git a/src/vs/workbench/api/node/extHostTerminalService.ts b/src/vs/workbench/api/node/extHostTerminalService.ts index 8ebbbf4f339..79ab9893e4e 100644 --- a/src/vs/workbench/api/node/extHostTerminalService.ts +++ b/src/vs/workbench/api/node/extHostTerminalService.ts @@ -328,17 +328,8 @@ export class ExtHostTerminalService implements ExtHostTerminalServiceShape { public createVirtualProcessTerminal(options: vscode.TerminalVirtualProcessOptions): vscode.Terminal { const terminal = new ExtHostTerminal(this._proxy, options.name); - terminal.createVirtualProcess().then(() => { - const id = terminal._id; - console.log('virtual process id: ' + terminal._id); - // TODO: The ID is ready now - const p = new ExtHostVirtualProcess(options.virtualProcess); - p.onProcessReady((e: { pid: number, cwd: string }) => this._proxy.$sendProcessReady(id, e.pid, e.cwd)); - p.onProcessTitleChanged(title => this._proxy.$sendProcessTitle(id, title)); - p.onProcessData(data => this._proxy.$sendProcessData(id, data)); - p.onProcessExit(exitCode => this._onProcessExit(id, exitCode)); - this._terminalProcesses[terminal._id] = p; - }); + const p = new ExtHostVirtualProcess(options.virtualProcess); + terminal.createVirtualProcess().then(() => this._setupExtHostProcessListeners(terminal._id, p)); this._terminals.push(terminal); return terminal; } @@ -571,7 +562,10 @@ export class ExtHostTerminalService implements ExtHostTerminalServiceShape { // TODO: Support conpty on remote, it doesn't seem to work for some reason? // TODO: When conpty is enabled, only enable it when accessibilityMode is off const enableConpty = false; //terminalConfig.get('windowsEnableConpty') as boolean; - const p = new TerminalProcess(shellLaunchConfig, initialCwd, cols, rows, env, enableConpty, this._logService); + this._setupExtHostProcessListeners(id, new TerminalProcess(shellLaunchConfig, initialCwd, cols, rows, env, enableConpty, this._logService)); + } + + private _setupExtHostProcessListeners(id: number, p: ITerminalChildProcess): void { p.onProcessReady((e: { pid: number, cwd: string }) => this._proxy.$sendProcessReady(id, e.pid, e.cwd)); p.onProcessTitleChanged(title => this._proxy.$sendProcessTitle(id, title)); p.onProcessData(data => this._proxy.$sendProcessData(id, data)); diff --git a/src/vs/workbench/contrib/terminal/browser/terminalProcessManager.ts b/src/vs/workbench/contrib/terminal/browser/terminalProcessManager.ts index a08182cb91f..55b186aef7a 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalProcessManager.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalProcessManager.ts @@ -29,6 +29,11 @@ const LAUNCHING_DURATION = 500; */ const LATENCY_MEASURING_INTERVAL = 1000; +enum ProcessType { + Process, + VirtualProcess +} + /** * Holds all state related to the creation and management of terminal processes. * @@ -46,6 +51,7 @@ export class TerminalProcessManager implements ITerminalProcessManager { public userHome: string | undefined; private _process: ITerminalChildProcess | null = null; + private _processType: ProcessType = ProcessType.Process; private _preLaunchInputQueue: string[] = []; private _latency: number = -1; private _latencyRequest: Promise; @@ -104,6 +110,7 @@ export class TerminalProcessManager implements ITerminalProcessManager { isScreenReaderModeEnabled: boolean ): Promise { if (shellLaunchConfig.isVirtualProcess) { + this._processType = ProcessType.VirtualProcess; this._process = this._instantiationService.createInstance(TerminalProcessExtHostProxy, this._terminalId, shellLaunchConfig, undefined, cols, rows, this._configHelper); console.log('set terminal process ext host proxy', this._process); } else { @@ -210,7 +217,7 @@ export class TerminalProcessManager implements ITerminalProcessManager { } public write(data: string): void { - if (this.shellProcessId) { + if (this.shellProcessId || this._processType === ProcessType.VirtualProcess) { if (this._process) { // Send data if the pty is ready this._process.input(data);