未验证 提交 ae0ec56d 编写于 作者: J Jean Pierre 提交者: GitHub

Fixes #133044 (#133046)

上级 94071236
......@@ -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 {
......
......@@ -26,22 +26,4 @@ export class ExtHostTerminalService extends BaseExtHostTerminalService {
terminal.create(options, this._serializeParentTerminal(options, internalOptions));
return terminal.value;
}
private _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 internalOptions;
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册