diff --git a/src/vs/platform/terminal/common/terminal.ts b/src/vs/platform/terminal/common/terminal.ts index ee81e6ba5b4..54efdbe2c13 100644 --- a/src/vs/platform/terminal/common/terminal.ts +++ b/src/vs/platform/terminal/common/terminal.ts @@ -229,6 +229,11 @@ export interface IShellLaunchConfig { * Whether flow control is enabled for this terminal. */ flowControl?: boolean; + + /** + * Whether this terminal was created by an extension. + */ + isExtensionOwnedTerminal?: boolean; } export interface ITerminalEnvironment { diff --git a/src/vs/workbench/api/browser/mainThreadTerminalService.ts b/src/vs/workbench/api/browser/mainThreadTerminalService.ts index 5c833aa9eb7..77b5c4050f6 100644 --- a/src/vs/workbench/api/browser/mainThreadTerminalService.ts +++ b/src/vs/workbench/api/browser/mainThreadTerminalService.ts @@ -129,7 +129,8 @@ export class MainThreadTerminalService implements MainThreadTerminalServiceShape hideFromUser: launchConfig.hideFromUser, isExtensionTerminal: launchConfig.isExtensionTerminal, extHostTerminalId: extHostTerminalId, - isFeatureTerminal: launchConfig.isFeatureTerminal + isFeatureTerminal: launchConfig.isFeatureTerminal, + isExtensionOwnedTerminal: launchConfig.isExtensionOwnedTerminal }; const terminal = this._terminalService.createTerminal(shellLaunchConfig); this._extHostTerminalIds.set(extHostTerminalId, terminal.instanceId); diff --git a/src/vs/workbench/api/common/extHost.protocol.ts b/src/vs/workbench/api/common/extHost.protocol.ts index 7509513e300..0cd656af0cd 100644 --- a/src/vs/workbench/api/common/extHost.protocol.ts +++ b/src/vs/workbench/api/common/extHost.protocol.ts @@ -459,6 +459,7 @@ export interface TerminalLaunchConfig { hideFromUser?: boolean; isExtensionTerminal?: boolean; isFeatureTerminal?: boolean; + isExtensionOwnedTerminal?: boolean; } export interface MainThreadTerminalServiceShape extends IDisposable { diff --git a/src/vs/workbench/api/common/extHostTerminalService.ts b/src/vs/workbench/api/common/extHostTerminalService.ts index aeac665bd64..f04d05e483c 100644 --- a/src/vs/workbench/api/common/extHostTerminalService.ts +++ b/src/vs/workbench/api/common/extHostTerminalService.ts @@ -120,12 +120,13 @@ export class ExtHostTerminal { waitOnExit?: boolean, strictEnv?: boolean, hideFromUser?: boolean, - isFeatureTerminal?: boolean + isFeatureTerminal?: boolean, + isExtensionOwnedTerminal?: boolean ): Promise { if (typeof this._id !== 'string') { throw new Error('Terminal has already been created'); } - await this._proxy.$createTerminal(this._id, { name: this._name, shellPath, shellArgs, cwd, env, waitOnExit, strictEnv, hideFromUser, isFeatureTerminal }); + await this._proxy.$createTerminal(this._id, { name: this._name, shellPath, shellArgs, cwd, env, waitOnExit, strictEnv, hideFromUser, isFeatureTerminal, isExtensionOwnedTerminal }); } public async createExtensionTerminal(): Promise { diff --git a/src/vs/workbench/api/node/extHostTerminalService.ts b/src/vs/workbench/api/node/extHostTerminalService.ts index 4b14a68a9b5..d2b9958bfbd 100644 --- a/src/vs/workbench/api/node/extHostTerminalService.ts +++ b/src/vs/workbench/api/node/extHostTerminalService.ts @@ -66,7 +66,9 @@ export class ExtHostTerminalService extends BaseExtHostTerminalService { /*options.waitOnExit*/ undefined, withNullAsUndefined(options.strictEnv), withNullAsUndefined(options.hideFromUser), - withNullAsUndefined(isFeatureTerminal)); + withNullAsUndefined(isFeatureTerminal), + true + ); return terminal.value; } diff --git a/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts b/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts index 22e827825d4..ab483ff20ee 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts @@ -1591,7 +1591,7 @@ export class TerminalInstance extends Disposable implements ITerminalInstance { // Recreate the process if the terminal has not yet been interacted with and it's not a // special terminal (eg. task, extension terminal) - if (info.requiresAction && !this._processManager.hasWrittenData && !this._shellLaunchConfig.isFeatureTerminal && !this._shellLaunchConfig.isExtensionTerminal && !this._shellLaunchConfig.attachPersistentProcess) { + if (info.requiresAction && !this._processManager.hasWrittenData && !this._shellLaunchConfig.isFeatureTerminal && !this._shellLaunchConfig.isExtensionTerminal && !this._shellLaunchConfig.isExtensionOwnedTerminal && !this._shellLaunchConfig.attachPersistentProcess) { this.relaunch(); return; }