mirror of
https://github.com/microsoft/vscode.git
synced 2026-05-02 14:31:31 +01:00
Add terminal location API (#131028)
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { DisposableStore, Disposable, IDisposable } from 'vs/base/common/lifecycle';
|
||||
import { ExtHostContext, ExtHostTerminalServiceShape, MainThreadTerminalServiceShape, MainContext, IExtHostContext, TerminalLaunchConfig, ITerminalDimensionsDto, TerminalIdentifier } from 'vs/workbench/api/common/extHost.protocol';
|
||||
import { ExtHostContext, ExtHostTerminalServiceShape, MainThreadTerminalServiceShape, MainContext, IExtHostContext, TerminalLaunchConfig, ITerminalDimensionsDto, ExtHostTerminalIdentifier } from 'vs/workbench/api/common/extHost.protocol';
|
||||
import { extHostNamedCustomer } from 'vs/workbench/api/common/extHostCustomers';
|
||||
import { URI } from 'vs/base/common/uri';
|
||||
import { StopWatch } from 'vs/base/common/stopwatch';
|
||||
@@ -20,6 +20,7 @@ import { IStartExtensionTerminalRequest, ITerminalProcessExtHostProxy, ITerminal
|
||||
import { IRemoteAgentService } from 'vs/workbench/services/remote/common/remoteAgentService';
|
||||
import { withNullAsUndefined } from 'vs/base/common/types';
|
||||
import { OperatingSystem, OS } from 'vs/base/common/platform';
|
||||
import { TerminalEditorLocationOptions } from 'vscode';
|
||||
|
||||
@extHostNamedCustomer(MainContext.MainThreadTerminalService)
|
||||
export class MainThreadTerminalService implements MainThreadTerminalServiceShape {
|
||||
@@ -110,7 +111,7 @@ export class MainThreadTerminalService implements MainThreadTerminalServiceShape
|
||||
this._proxy.$acceptDefaultProfile(...await Promise.all([defaultProfile, defaultAutomationProfile]));
|
||||
}
|
||||
|
||||
private async _getTerminalInstance(id: TerminalIdentifier): Promise<ITerminalInstance | undefined> {
|
||||
private async _getTerminalInstance(id: ExtHostTerminalIdentifier): Promise<ITerminalInstance | undefined> {
|
||||
if (typeof id === 'string') {
|
||||
return this._extHostTerminals.get(id);
|
||||
}
|
||||
@@ -137,27 +138,26 @@ export class MainThreadTerminalService implements MainThreadTerminalServiceShape
|
||||
extHostTerminalId,
|
||||
isFeatureTerminal: launchConfig.isFeatureTerminal,
|
||||
isExtensionOwnedTerminal: launchConfig.isExtensionOwnedTerminal,
|
||||
useShellEnvironment: launchConfig.useShellEnvironment
|
||||
useShellEnvironment: launchConfig.useShellEnvironment,
|
||||
};
|
||||
this._extHostTerminals.set(extHostTerminalId, new Promise(async r => {
|
||||
let terminal: ITerminalInstance | undefined;
|
||||
if (launchConfig.isSplitTerminal) {
|
||||
const activeInstance = this._terminalService.getInstanceHost(launchConfig.target).activeInstance;
|
||||
if (activeInstance) {
|
||||
terminal = withNullAsUndefined(await this._terminalService.createTerminal({ instanceToSplit: activeInstance, config: shellLaunchConfig }));
|
||||
}
|
||||
}
|
||||
if (!terminal) {
|
||||
terminal = await this._terminalService.createTerminal({
|
||||
config: shellLaunchConfig,
|
||||
target: launchConfig.target
|
||||
});
|
||||
}
|
||||
const terminal = await this._terminalService.createTerminal({
|
||||
config: shellLaunchConfig,
|
||||
location: await this._deserializeParentTerminal(launchConfig.location)
|
||||
});
|
||||
r(terminal);
|
||||
}));
|
||||
}
|
||||
|
||||
public async $show(id: TerminalIdentifier, preserveFocus: boolean): Promise<void> {
|
||||
private async _deserializeParentTerminal(location?: TerminalLocation | TerminalEditorLocationOptions | { parentTerminal: ExtHostTerminalIdentifier } | { splitActiveTerminal: boolean }): Promise<TerminalLocation | TerminalEditorLocationOptions | { parentTerminal: ITerminalInstance } | { splitActiveTerminal: boolean } | undefined> {
|
||||
if (typeof location === 'object' && 'parentTerminal' in location) {
|
||||
const parentTerminal = await this._extHostTerminals.get(location.parentTerminal.toString());
|
||||
return parentTerminal ? { parentTerminal } : undefined;
|
||||
}
|
||||
return location;
|
||||
}
|
||||
|
||||
public async $show(id: ExtHostTerminalIdentifier, preserveFocus: boolean): Promise<void> {
|
||||
const terminalInstance = await this._getTerminalInstance(id);
|
||||
if (terminalInstance) {
|
||||
this._terminalService.setActiveInstance(terminalInstance);
|
||||
@@ -169,7 +169,7 @@ export class MainThreadTerminalService implements MainThreadTerminalServiceShape
|
||||
}
|
||||
}
|
||||
|
||||
public async $hide(id: TerminalIdentifier): Promise<void> {
|
||||
public async $hide(id: ExtHostTerminalIdentifier): Promise<void> {
|
||||
const instanceToHide = await this._getTerminalInstance(id);
|
||||
const activeInstance = this._terminalService.activeInstance;
|
||||
if (activeInstance && activeInstance.instanceId === instanceToHide?.instanceId && activeInstance.target !== TerminalLocation.Editor) {
|
||||
@@ -177,11 +177,11 @@ export class MainThreadTerminalService implements MainThreadTerminalServiceShape
|
||||
}
|
||||
}
|
||||
|
||||
public async $dispose(id: TerminalIdentifier): Promise<void> {
|
||||
public async $dispose(id: ExtHostTerminalIdentifier): Promise<void> {
|
||||
(await this._getTerminalInstance(id))?.dispose();
|
||||
}
|
||||
|
||||
public async $sendText(id: TerminalIdentifier, text: string, addNewLine: boolean): Promise<void> {
|
||||
public async $sendText(id: ExtHostTerminalIdentifier, text: string, addNewLine: boolean): Promise<void> {
|
||||
const instance = await this._getTerminalInstance(id);
|
||||
await instance?.sendText(text, addNewLine);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user