diff --git a/src/vs/workbench/api/browser/mainThreadTerminalService.ts b/src/vs/workbench/api/browser/mainThreadTerminalService.ts index 46707154776..7b52f5c75d1 100644 --- a/src/vs/workbench/api/browser/mainThreadTerminalService.ts +++ b/src/vs/workbench/api/browser/mainThreadTerminalService.ts @@ -214,7 +214,7 @@ export class MainThreadTerminalService implements MainThreadTerminalServiceShape public $registerProfileProvider(id: string): void { // Proxy profile provider requests through the extension host this._profileProviders.set(id, this._terminalService.registerTerminalProfileProvider(id, { - createContributedTerminalProfile: async () => this._proxy.$createContributedProfileTerminal(id) + createContributedTerminalProfile: async (isSplitTerminal) => this._proxy.$createContributedProfileTerminal(id, isSplitTerminal) })); } diff --git a/src/vs/workbench/api/common/extHost.protocol.ts b/src/vs/workbench/api/common/extHost.protocol.ts index 0a14ba69172..10988c02e04 100644 --- a/src/vs/workbench/api/common/extHost.protocol.ts +++ b/src/vs/workbench/api/common/extHost.protocol.ts @@ -1714,7 +1714,7 @@ export interface ExtHostTerminalServiceShape { $activateLink(id: number, linkId: number): void; $initEnvironmentVariableCollections(collections: [string, ISerializableEnvironmentVariableCollection][]): void; $acceptDefaultProfile(profile: ITerminalProfile, automationProfile: ITerminalProfile): void; - $createContributedProfileTerminal(id: string): Promise; + $createContributedProfileTerminal(id: string, isSplitTerminal: boolean): Promise; } export interface ExtHostSCMShape { diff --git a/src/vs/workbench/api/common/extHostTerminalService.ts b/src/vs/workbench/api/common/extHostTerminalService.ts index a668867287e..ac5bd4c4e63 100644 --- a/src/vs/workbench/api/common/extHostTerminalService.ts +++ b/src/vs/workbench/api/common/extHostTerminalService.ts @@ -144,11 +144,16 @@ export class ExtHostTerminal { }); } - public async createExtensionTerminal(iconPath?: URI | { light: URI; dark: URI } | ThemeIcon): Promise { + public async createExtensionTerminal(isSplitTerminal?: boolean, iconPath?: URI | { light: URI; dark: URI } | ThemeIcon): Promise { if (typeof this._id !== 'string') { throw new Error('Terminal has already been created'); } - await this._proxy.$createTerminal(this._id, { name: this._name, isExtensionCustomPtyTerminal: true, icon: iconPath }); + await this._proxy.$createTerminal(this._id, { + name: this._name, + isExtensionCustomPtyTerminal: true, + icon: iconPath, + isSplitTerminal + }); // At this point, the id has been set via `$acceptTerminalOpened` if (typeof this._id === 'string') { throw new Error('Terminal creation failed'); @@ -361,10 +366,10 @@ export abstract class BaseExtHostTerminalService extends Disposable implements I return profile?.args || []; } - public createExtensionTerminal(options: vscode.ExtensionTerminalOptions): vscode.Terminal { + public createExtensionTerminal(options: vscode.ExtensionTerminalOptions, internalOptions?: ITerminalInternalOptions): vscode.Terminal { const terminal = new ExtHostTerminal(this._proxy, generateUuid(), options, options.name); const p = new ExtHostPseudoterminal(options.pty); - terminal.createExtensionTerminal(options.iconPath).then(id => { + terminal.createExtensionTerminal(internalOptions?.isSplitTerminal, options.iconPath).then(id => { const disposable = this._setupExtHostProcessListeners(id, p); this._terminalProcessDisposables[id] = disposable; }); @@ -592,7 +597,7 @@ export abstract class BaseExtHostTerminalService extends Disposable implements I }); } - public async $createContributedProfileTerminal(id: string): Promise { + public async $createContributedProfileTerminal(id: string, isSplitTerminal: boolean): Promise { // TODO: Use cancellation token const options = await this._profileProviders.get(id)?.provideProfileOptions(new CancellationTokenSource().token); if (!options) { @@ -600,12 +605,12 @@ export abstract class BaseExtHostTerminalService extends Disposable implements I } if ('pty' in options) { // TODO: Pass in split terminal option - this.createExtensionTerminal(options); + this.createExtensionTerminal(options, { isSplitTerminal }); } // if (options.iconPath) { // checkProposedApiEnabled(extension); // } - this.createTerminalFromOptions(options, { isSplitTerminal: true }); + this.createTerminalFromOptions(options, { isSplitTerminal }); } public async $provideLinks(terminalId: number, line: string): Promise {