Don't relaunch extension owned terminals (#117987)

Co-authored-by: Daniel Imms <daimms@microsoft.com>
This commit is contained in:
Megan Rogge
2021-03-02 16:55:38 -05:00
committed by GitHub
parent 6c6caf678f
commit cf3faa4046
6 changed files with 15 additions and 5 deletions
@@ -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 {
@@ -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);
@@ -459,6 +459,7 @@ export interface TerminalLaunchConfig {
hideFromUser?: boolean;
isExtensionTerminal?: boolean;
isFeatureTerminal?: boolean;
isExtensionOwnedTerminal?: boolean;
}
export interface MainThreadTerminalServiceShape extends IDisposable {
@@ -120,12 +120,13 @@ export class ExtHostTerminal {
waitOnExit?: boolean,
strictEnv?: boolean,
hideFromUser?: boolean,
isFeatureTerminal?: boolean
isFeatureTerminal?: boolean,
isExtensionOwnedTerminal?: boolean
): Promise<void> {
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<number> {
@@ -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;
}
@@ -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;
}