diff --git a/src/vs/platform/terminal/common/terminal.ts b/src/vs/platform/terminal/common/terminal.ts index e10c028a2b3..dd49a43c6f1 100644 --- a/src/vs/platform/terminal/common/terminal.ts +++ b/src/vs/platform/terminal/common/terminal.ts @@ -463,6 +463,11 @@ export interface IShellLaunchConfig { * or via Size to Content Width */ fixedDimensions?: IFixedTerminalDimensions; + + /** + * Opt-out of the default terminal persistence on restart and reload + */ + disablePersistence?: boolean; } export interface ICreateContributedTerminalProfileOptions { diff --git a/src/vs/workbench/api/browser/mainThreadTerminalService.ts b/src/vs/workbench/api/browser/mainThreadTerminalService.ts index 4e8435e598e..433c8e4312d 100644 --- a/src/vs/workbench/api/browser/mainThreadTerminalService.ts +++ b/src/vs/workbench/api/browser/mainThreadTerminalService.ts @@ -141,6 +141,7 @@ export class MainThreadTerminalService implements MainThreadTerminalServiceShape isFeatureTerminal: launchConfig.isFeatureTerminal, isExtensionOwnedTerminal: launchConfig.isExtensionOwnedTerminal, useShellEnvironment: launchConfig.useShellEnvironment, + disablePersistence: launchConfig.disablePersistence }; const terminal = Promises.withAsyncBody(async r => { const terminal = await this._terminalService.createTerminal({ diff --git a/src/vs/workbench/api/common/extHost.protocol.ts b/src/vs/workbench/api/common/extHost.protocol.ts index f8ac5bec2fe..79aa6b416e0 100644 --- a/src/vs/workbench/api/common/extHost.protocol.ts +++ b/src/vs/workbench/api/common/extHost.protocol.ts @@ -486,6 +486,7 @@ export interface TerminalLaunchConfig { isExtensionOwnedTerminal?: boolean; useShellEnvironment?: boolean; location?: TerminalLocation | { viewColumn: number, preserveFocus?: boolean } | { parentTerminal: ExtHostTerminalIdentifier } | { splitActiveTerminal: boolean }; + disablePersistence?: 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 47452b0060b..1573b96578b 100644 --- a/src/vs/workbench/api/common/extHostTerminalService.ts +++ b/src/vs/workbench/api/common/extHostTerminalService.ts @@ -152,7 +152,8 @@ export class ExtHostTerminal { isFeatureTerminal: withNullAsUndefined(internalOptions?.isFeatureTerminal), isExtensionOwnedTerminal: true, useShellEnvironment: withNullAsUndefined(internalOptions?.useShellEnvironment), - location: internalOptions?.location || this._serializeParentTerminal(options.location, internalOptions?.resolvedExtHostIdentifier) + location: internalOptions?.location || this._serializeParentTerminal(options.location, internalOptions?.resolvedExtHostIdentifier), + disablePersistence: withNullAsUndefined(options.disablePersistence) }); } diff --git a/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts b/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts index b9a34618336..fd3840e93ae 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts @@ -550,7 +550,7 @@ export class TerminalInstance extends Disposable implements ITerminalInstance { } get persistentProcessId(): number | undefined { return this._processManager.persistentProcessId; } - get shouldPersist(): boolean { return this._processManager.shouldPersist; } + get shouldPersist(): boolean { return this._processManager.shouldPersist && !this.shellLaunchConfig.disablePersistence; } /** * Create xterm.js instance and attach data listeners. diff --git a/src/vs/workbench/services/extensions/common/extensionsApiProposals.ts b/src/vs/workbench/services/extensions/common/extensionsApiProposals.ts index 2c734e5a0d2..0a1c1f9dcfb 100644 --- a/src/vs/workbench/services/extensions/common/extensionsApiProposals.ts +++ b/src/vs/workbench/services/extensions/common/extensionsApiProposals.ts @@ -49,6 +49,7 @@ export const allApiProposals = Object.freeze({ taskPresentationGroup: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.taskPresentationGroup.d.ts', terminalDataWriteEvent: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.terminalDataWriteEvent.d.ts', terminalDimensions: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.terminalDimensions.d.ts', + terminalDisablePersistence: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.terminalDisablePersistence.d.ts', terminalNameChangeEvent: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.terminalNameChangeEvent.d.ts', testCoverage: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.testCoverage.d.ts', testObserver: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.testObserver.d.ts', diff --git a/src/vscode-dts/vscode.proposed.terminalDisablePersistence.d.ts b/src/vscode-dts/vscode.proposed.terminalDisablePersistence.d.ts new file mode 100644 index 00000000000..3c2f9d89e7f --- /dev/null +++ b/src/vscode-dts/vscode.proposed.terminalDisablePersistence.d.ts @@ -0,0 +1,19 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +declare module 'vscode' { + export interface TerminalOptions { + /** + * Opt-out of the default terminal persistence on restart and reload + */ + disablePersistence?: boolean; + } + export interface ExtensionTerminalOptions { + /** + * Opt-out of the default terminal persistence on restart and reload + */ + disablePersistence?: boolean; + } +}