diff --git a/src/vs/workbench/parts/terminal/common/terminal.ts b/src/vs/workbench/parts/terminal/common/terminal.ts index 6074e9ca3aac5e9df51b3b50ee7cb2df435b8ee2..f472a98dbd57f11f10cdf9faea7ce0ceb512b565 100644 --- a/src/vs/workbench/parts/terminal/common/terminal.ts +++ b/src/vs/workbench/parts/terminal/common/terminal.ts @@ -462,6 +462,7 @@ export interface ITerminalProcessManager extends IDisposable { process: any; processState: ProcessState; ptyProcessReady: TPromise; + shellProcessId: number; addDisposable(disposable: IDisposable); } diff --git a/src/vs/workbench/parts/terminal/electron-browser/terminalInstance.ts b/src/vs/workbench/parts/terminal/electron-browser/terminalInstance.ts index bb5dadf1a4363f7e9180630d51291d64cf6de7b9..403709876d385409cbe3f4c2abc3e7625bba0887 100644 --- a/src/vs/workbench/parts/terminal/electron-browser/terminalInstance.ts +++ b/src/vs/workbench/parts/terminal/electron-browser/terminalInstance.ts @@ -86,7 +86,7 @@ export class TerminalInstance implements ITerminalInstance { private readonly _onProcessIdReady: Emitter; private readonly _onTitleChanged: Emitter; // private _process: cp.ChildProcess; - private _processId: number; + // private _processId: number; private _skipTerminalCommands: string[]; private _title: string; // TODO: Rename to "_disposables" @@ -112,7 +112,8 @@ export class TerminalInstance implements ITerminalInstance { public disableLayout: boolean; public get id(): number { return this._id; } // TODO: Ideally processId would be merged into processReady - public get processId(): number { return this._processId; } + public get processId(): number { return this._processManager.shellProcessId; } + // TODO: Should this be an event as it can fire twice? public get processReady(): TPromise { return this._processManager.ptyProcessReady; } public get onDisposed(): Event { return this._onDisposed.event; } public get onFocused(): Event { return this._onFocused.event; } @@ -169,7 +170,7 @@ export class TerminalInstance implements ITerminalInstance { if (platform.isWindows) { this._processManager.ptyProcessReady.then(() => { if (!this._isDisposed) { - this._windowsShellHelper = new WindowsShellHelper(this._processId, this, this._xterm); + this._windowsShellHelper = new WindowsShellHelper(this._processManager.shellProcessId, this, this._xterm); } }); } @@ -314,7 +315,7 @@ export class TerminalInstance implements ITerminalInstance { this._xterm.on('linefeed', () => this._onLineFeed()); this._processManager.process.on('message', (message) => this._sendPtyDataToXterm(message)); this._xterm.on('data', (data) => { - if (this._processId) { + if (this._processManager.shellProcessId) { // Send data if the pty is ready this._processManager.process.send({ event: 'input', @@ -730,7 +731,7 @@ export class TerminalInstance implements ITerminalInstance { } this._processManager.process.on('message', (message) => { if (message.type === 'pid') { - this._processId = message.content; + this._processManager.shellProcessId = message.content; // Send any queued data that's waiting if (this._preLaunchInputQueue.length > 0) { diff --git a/src/vs/workbench/parts/terminal/electron-browser/terminalProcessManager.ts b/src/vs/workbench/parts/terminal/electron-browser/terminalProcessManager.ts index 8779a51875f69954a7bd07003cc8a77536d275a5..2c7148f04b39ce7eedb45c0e91f6ab1779a8350b 100644 --- a/src/vs/workbench/parts/terminal/electron-browser/terminalProcessManager.ts +++ b/src/vs/workbench/parts/terminal/electron-browser/terminalProcessManager.ts @@ -22,7 +22,7 @@ export class TerminalProcessManager implements ITerminalProcessManager { public process: ChildProcess; public ptyProcessReady: TPromise; - // private _shellProcessId: number; + public shellProcessId: number; private _disposables: IDisposable[] = [];