diff --git a/src/vs/workbench/api/node/extHostTerminalService.ts b/src/vs/workbench/api/node/extHostTerminalService.ts index a258d464745..7bbd04d90fa 100644 --- a/src/vs/workbench/api/node/extHostTerminalService.ts +++ b/src/vs/workbench/api/node/extHostTerminalService.ts @@ -506,7 +506,7 @@ export class ExtHostTerminalService implements ExtHostTerminalServiceShape { // Fork the process and listen for messages this._logService.debug(`Terminal process launching on ext host`, shellLaunchConfig, initialCwd, cols, rows, env); const p = new TerminalProcess(shellLaunchConfig, initialCwd, cols, rows, env, terminalConfig.get('windowsEnableConpty') as boolean, this._logService); - p.onProcessIdReady(pid => this._proxy.$sendProcessPid(id, pid)); + p.onProcessReady((e: { pid: number, cwd: string }) => this._proxy.$sendProcessPid(id, e.pid)); p.onProcessTitleChanged(title => this._proxy.$sendProcessTitle(id, title)); p.onProcessData(data => this._proxy.$sendProcessData(id, data)); p.onProcessExit(exitCode => this._onProcessExit(id, exitCode)); diff --git a/src/vs/workbench/contrib/terminal/browser/terminalProcessManager.ts b/src/vs/workbench/contrib/terminal/browser/terminalProcessManager.ts index 2592c33cfd4..b70d3a28732 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalProcessManager.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalProcessManager.ts @@ -147,18 +147,16 @@ export class TerminalProcessManager implements ITerminalProcessManager { } }); - this._process.onProcessIdReady(pid => { - this.shellProcessId = pid; - return this._process!.getInitialCwd().then(cwd => { - this._initialCwd = cwd; - this._onProcessReady.fire(); + this._process.onProcessReady((e: { pid: number, cwd: string }) => { + this.shellProcessId = e.pid; + this._initialCwd = e.cwd; + this._onProcessReady.fire(); - // Send any queued data that's waiting - if (this._preLaunchInputQueue.length > 0 && this._process) { - this._process.input(this._preLaunchInputQueue.join('')); - this._preLaunchInputQueue.length = 0; - } - }); + // Send any queued data that's waiting + if (this._preLaunchInputQueue.length > 0 && this._process) { + this._process.input(this._preLaunchInputQueue.join('')); + this._preLaunchInputQueue.length = 0; + } }); this._process.onProcessTitleChanged(title => this._onProcessTitle.fire(title)); diff --git a/src/vs/workbench/contrib/terminal/common/terminal.ts b/src/vs/workbench/contrib/terminal/common/terminal.ts index 424faa24985..b5ba60c4369 100644 --- a/src/vs/workbench/contrib/terminal/common/terminal.ts +++ b/src/vs/workbench/contrib/terminal/common/terminal.ts @@ -747,7 +747,7 @@ export interface IWindowsShellHelper extends IDisposable { export interface ITerminalChildProcess { onProcessData: Event; onProcessExit: Event; - onProcessIdReady: Event; + onProcessReady: Event<{ pid: number, cwd: string }>; onProcessTitleChanged: Event; /** diff --git a/src/vs/workbench/contrib/terminal/common/terminalProcessExtHostProxy.ts b/src/vs/workbench/contrib/terminal/common/terminalProcessExtHostProxy.ts index dc61c51298d..0c12352b58c 100644 --- a/src/vs/workbench/contrib/terminal/common/terminalProcessExtHostProxy.ts +++ b/src/vs/workbench/contrib/terminal/common/terminalProcessExtHostProxy.ts @@ -19,8 +19,8 @@ export class TerminalProcessExtHostProxy implements ITerminalChildProcess, ITerm public get onProcessData(): Event { return this._onProcessData.event; } private readonly _onProcessExit = new Emitter(); public get onProcessExit(): Event { return this._onProcessExit.event; } - private readonly _onProcessIdReady = new Emitter(); - public get onProcessIdReady(): Event { return this._onProcessIdReady.event; } + private readonly _onProcessReady = new Emitter<{ pid: number, cwd: string }>(); + public get onProcessReady(): Event<{ pid: number, cwd: string }> { return this._onProcessReady.event; } private readonly _onProcessTitleChanged = new Emitter(); public get onProcessTitleChanged(): Event { return this._onProcessTitleChanged.event; } @@ -77,7 +77,7 @@ export class TerminalProcessExtHostProxy implements ITerminalChildProcess, ITerm } public emitPid(pid: number): void { - this._onProcessIdReady.fire(pid); + this._onProcessReady.fire({ pid, cwd: '' }); } public emitExit(exitCode: number): void { diff --git a/src/vs/workbench/contrib/terminal/node/terminalProcess.ts b/src/vs/workbench/contrib/terminal/node/terminalProcess.ts index 3005784b6e9..4e35926b4f2 100644 --- a/src/vs/workbench/contrib/terminal/node/terminalProcess.ts +++ b/src/vs/workbench/contrib/terminal/node/terminalProcess.ts @@ -29,8 +29,8 @@ export class TerminalProcess implements ITerminalChildProcess, IDisposable { public get onProcessData(): Event { return this._onProcessData.event; } private readonly _onProcessExit = new Emitter(); public get onProcessExit(): Event { return this._onProcessExit.event; } - private readonly _onProcessIdReady = new Emitter(); - public get onProcessIdReady(): Event { return this._onProcessIdReady.event; } + private readonly _onProcessReady = new Emitter<{ pid: number, cwd: string }>(); + public get onProcessReady(): Event<{ pid: number, cwd: string }> { return this._onProcessReady.event; } private readonly _onProcessTitleChanged = new Emitter(); public get onProcessTitleChanged(): Event { return this._onProcessTitleChanged.event; } @@ -90,7 +90,7 @@ export class TerminalProcess implements ITerminalChildProcess, IDisposable { const ptyProcess = pty.spawn(shellLaunchConfig.executable!, args, options); this._ptyProcess = ptyProcess; this._processStartupComplete = new Promise(c => { - this.onProcessIdReady(() => c()); + this.onProcessReady(() => c()); }); ptyProcess.on('data', data => { this._onProcessData.fire(data); @@ -118,7 +118,7 @@ export class TerminalProcess implements ITerminalChildProcess, IDisposable { this._titleInterval = null; this._onProcessData.dispose(); this._onProcessExit.dispose(); - this._onProcessIdReady.dispose(); + this._onProcessReady.dispose(); this._onProcessTitleChanged.dispose(); } @@ -169,7 +169,7 @@ export class TerminalProcess implements ITerminalChildProcess, IDisposable { } private _sendProcessId(ptyProcess: pty.IPty) { - this._onProcessIdReady.fire(ptyProcess.pid); + this._onProcessReady.fire({ pid: ptyProcess.pid, cwd: this._initialCwd }); } private _sendProcessTitle(ptyProcess: pty.IPty): void {