mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-25 11:08:51 +01:00
@@ -151,7 +151,7 @@ export class ExtHostTerminal {
|
||||
isFeatureTerminal: withNullAsUndefined(internalOptions?.isFeatureTerminal),
|
||||
isExtensionOwnedTerminal: true,
|
||||
useShellEnvironment: withNullAsUndefined(internalOptions?.useShellEnvironment),
|
||||
location: internalOptions?.location || this._serializeParentTerminal(options.location, internalOptions?.resolvedExtHostIdentifier, internalOptions?.location)
|
||||
location: internalOptions?.location || this._serializeParentTerminal(options.location, internalOptions?.resolvedExtHostIdentifier)
|
||||
});
|
||||
}
|
||||
|
||||
@@ -174,12 +174,19 @@ export class ExtHostTerminal {
|
||||
return this._id;
|
||||
}
|
||||
|
||||
private _serializeParentTerminal(location?: TerminalLocation | vscode.TerminalEditorLocationOptions | vscode.TerminalSplitLocationOptions | { splitActiveTerminal: boolean }, parentTerminal?: ExtHostTerminalIdentifier, internalLocation?: TerminalLocation | { viewColumn: number, preserveState?: boolean } | { splitActiveTerminal: boolean }): TerminalLocation | vscode.TerminalEditorLocationOptions | { parentTerminal: ExtHostTerminalIdentifier } | { splitActiveTerminal: boolean } | vscode.TerminalEditorLocationOptions | undefined {
|
||||
if (typeof location === 'object' && 'parentTerminal' in location) {
|
||||
return parentTerminal ? { parentTerminal } : undefined;
|
||||
} else if (internalLocation) {
|
||||
location = internalLocation;
|
||||
private _serializeParentTerminal(location?: TerminalLocation | vscode.TerminalEditorLocationOptions | vscode.TerminalSplitLocationOptions, parentTerminal?: ExtHostTerminalIdentifier): TerminalLocation | vscode.TerminalEditorLocationOptions | { parentTerminal: ExtHostTerminalIdentifier } | undefined {
|
||||
if (typeof location === 'object') {
|
||||
if ('parentTerminal' in location && location.parentTerminal && parentTerminal) {
|
||||
return { parentTerminal };
|
||||
}
|
||||
|
||||
if ('viewColumn' in location) {
|
||||
return { viewColumn: location.viewColumn, preserveFocus: location.preserveFocus };
|
||||
}
|
||||
|
||||
return undefined;
|
||||
}
|
||||
|
||||
return location;
|
||||
}
|
||||
|
||||
@@ -414,7 +421,7 @@ export abstract class BaseExtHostTerminalService extends Disposable implements I
|
||||
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(this._resolveLocation(options.location), internalOptions?.resolvedExtHostIdentifier, asTerminalIcon(options.iconPath), asTerminalColor(options.color)).then(id => {
|
||||
terminal.createExtensionTerminal(options.location, this._serializeParentTerminal(options, internalOptions).resolvedExtHostIdentifier, asTerminalIcon(options.iconPath), asTerminalColor(options.color)).then(id => {
|
||||
const disposable = this._setupExtHostProcessListeners(id, p);
|
||||
this._terminalProcessDisposables[id] = disposable;
|
||||
});
|
||||
@@ -422,17 +429,22 @@ export abstract class BaseExtHostTerminalService extends Disposable implements I
|
||||
return terminal.value;
|
||||
}
|
||||
|
||||
private _resolveLocation(location?: TerminalLocation | vscode.TerminalEditorLocationOptions | vscode.TerminalSplitLocationOptions): undefined | TerminalLocation | vscode.TerminalEditorLocationOptions {
|
||||
if (typeof location === 'object' && 'viewColumn' in location && location.viewColumn !== undefined) {
|
||||
return { viewColumn: location.viewColumn, preserveFocus: location.preserveFocus };
|
||||
} else if (typeof location === 'object' && 'parentTerminal' in location) {
|
||||
// parent terminal exthost ID is passed in internal options
|
||||
// for conversion to TerminalInstance in mainThreadTerminalService
|
||||
return undefined;
|
||||
} else if (location === TerminalLocation.Editor || location === TerminalLocation.Panel) {
|
||||
return location;
|
||||
protected _serializeParentTerminal(options: vscode.TerminalOptions, internalOptions?: ITerminalInternalOptions): ITerminalInternalOptions {
|
||||
internalOptions = internalOptions ? internalOptions : {};
|
||||
if (options.location && typeof options.location === 'object' && 'parentTerminal' in options.location) {
|
||||
const parentTerminal = options.location.parentTerminal;
|
||||
if (parentTerminal) {
|
||||
const parentExtHostTerminal = this._terminals.find(t => t.value === parentTerminal);
|
||||
if (parentExtHostTerminal) {
|
||||
internalOptions.resolvedExtHostIdentifier = parentExtHostTerminal._id;
|
||||
}
|
||||
}
|
||||
} else if (options.location && typeof options.location !== 'object') {
|
||||
internalOptions.location = options.location;
|
||||
} else if (internalOptions.location && typeof internalOptions.location === 'object' && 'splitActiveTerminal' in internalOptions.location) {
|
||||
internalOptions.location = { splitActiveTerminal: true };
|
||||
}
|
||||
return location;
|
||||
return internalOptions;
|
||||
}
|
||||
|
||||
public attachPtyToTerminal(id: number, pty: vscode.Pseudoterminal): void {
|
||||
|
||||
Reference in New Issue
Block a user