fix #127114
This commit is contained in:
meganrogge 2021-07-01 09:14:52 -07:00
parent 8d64371a57
commit 2da2d5e5cf
No known key found for this signature in database
GPG key ID: 3155C8B2F0428C81
3 changed files with 13 additions and 30 deletions

View file

@ -138,8 +138,6 @@ export interface ITerminalService extends ITerminalInstanceHost {
/**
* Creates a raw terminal instance, this should not be used outside of the terminal part.
*/
createInstance(profile: ITerminalProfile): ITerminalInstance;
createInstance(shellLaunchConfig: IShellLaunchConfig): ITerminalInstance;
getInstanceFromId(terminalId: number): ITerminalInstance | undefined;
getInstanceFromIndex(terminalIndex: number): ITerminalInstance;
getInstanceFromResource(resource: URI | undefined): ITerminalInstance | undefined;

View file

@ -9,7 +9,7 @@ import { IDisposable, Disposable, DisposableStore, dispose } from 'vs/base/commo
import { SplitView, Orientation, IView, Sizing } from 'vs/base/browser/ui/splitview/splitview';
import { IWorkbenchLayoutService, Parts, Position } from 'vs/workbench/services/layout/browser/layoutService';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { ITerminalInstance, Direction, ITerminalGroup, ITerminalService } from 'vs/workbench/contrib/terminal/browser/terminal';
import { ITerminalInstance, Direction, ITerminalGroup, ITerminalService, ITerminalInstanceService } from 'vs/workbench/contrib/terminal/browser/terminal';
import { ViewContainerLocation, IViewDescriptorService } from 'vs/workbench/common/views';
import { IShellLaunchConfig, ITerminalTabLayoutInfoById } from 'vs/platform/terminal/common/terminal';
@ -259,6 +259,7 @@ export class TerminalGroup extends Disposable implements ITerminalGroup {
private _container: HTMLElement | undefined,
shellLaunchConfigOrInstance: IShellLaunchConfig | ITerminalInstance | undefined,
@ITerminalService private readonly _terminalService: ITerminalService,
@ITerminalInstanceService private readonly _terminalInstanceService: ITerminalInstanceService,
@IWorkbenchLayoutService private readonly _layoutService: IWorkbenchLayoutService,
@IViewDescriptorService private readonly _viewDescriptorService: IViewDescriptorService,
@IInstantiationService private readonly _instantiationService: IInstantiationService
@ -278,7 +279,7 @@ export class TerminalGroup extends Disposable implements ITerminalGroup {
if ('instanceId' in shellLaunchConfigOrInstance) {
instance = shellLaunchConfigOrInstance;
} else {
instance = this._terminalService.createInstance(shellLaunchConfigOrInstance);
instance = this._terminalInstanceService.createInstance(shellLaunchConfigOrInstance);
}
if (this._terminalInstances.length === 0) {
this._terminalInstances.push(instance);
@ -489,7 +490,7 @@ export class TerminalGroup extends Disposable implements ITerminalGroup {
}
split(shellLaunchConfig: IShellLaunchConfig): ITerminalInstance {
const instance = this._terminalService.createInstance(shellLaunchConfig);
const instance = this._terminalInstanceService.createInstance(shellLaunchConfig);
this.addInstance(instance);
this._setActiveInstance(instance);
return instance;

View file

@ -37,9 +37,8 @@ import { TerminalConfigHelper } from 'vs/workbench/contrib/terminal/browser/term
import { TerminalEditor } from 'vs/workbench/contrib/terminal/browser/terminalEditor';
import { getColorClass, getUriClasses } from 'vs/workbench/contrib/terminal/browser/terminalIcon';
import { configureTerminalProfileIcon } from 'vs/workbench/contrib/terminal/browser/terminalIcons';
import { TerminalInstance } from 'vs/workbench/contrib/terminal/browser/terminalInstance';
import { TerminalViewPane } from 'vs/workbench/contrib/terminal/browser/terminalView';
import { IRemoteTerminalAttachTarget, IStartExtensionTerminalRequest, ITerminalConfigHelper, ITerminalProcessExtHostProxy, ITerminalProfileContribution, KEYBINDING_CONTEXT_TERMINAL_ALT_BUFFER_ACTIVE, KEYBINDING_CONTEXT_TERMINAL_FOCUS, KEYBINDING_CONTEXT_TERMINAL_IS_OPEN, KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED, KEYBINDING_CONTEXT_TERMINAL_SHELL_TYPE, TERMINAL_VIEW_ID } from 'vs/workbench/contrib/terminal/common/terminal';
import { IRemoteTerminalAttachTarget, IStartExtensionTerminalRequest, ITerminalConfigHelper, ITerminalProcessExtHostProxy, ITerminalProfileContribution, KEYBINDING_CONTEXT_TERMINAL_IS_OPEN, KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED, TERMINAL_VIEW_ID } from 'vs/workbench/contrib/terminal/common/terminal';
import { ITerminalContributionService } from 'vs/workbench/contrib/terminal/common/terminalExtensionPoints';
import { formatMessageForTerminal, terminalStrings } from 'vs/workbench/contrib/terminal/common/terminalStrings';
import { IEditorOverrideService, RegisteredEditorPriority } from 'vs/workbench/services/editor/common/editorOverrideService';
@ -54,9 +53,6 @@ export class TerminalService implements ITerminalService {
private _hostActiveTerminals: Map<ITerminalInstanceHost, ITerminalInstance | undefined> = new Map();
private _isShuttingDown: boolean;
private _terminalFocusContextKey: IContextKey<boolean>;
private _terminalShellTypeContextKey: IContextKey<string>;
private _terminalAltBufferActiveContextKey: IContextKey<boolean>;
private _backgroundedTerminalInstances: ITerminalInstance[] = [];
private _backgroundedTerminalDisposables: Map<number, IDisposable[]> = new Map();
private _findState: FindReplaceState;
@ -147,7 +143,7 @@ export class TerminalService implements ITerminalService {
@ITerminalContributionService private readonly _terminalContributionService: ITerminalContributionService,
@ITerminalEditorService private readonly _terminalEditorService: ITerminalEditorService,
@ITerminalGroupService private readonly _terminalGroupService: ITerminalGroupService,
@ITerminalInstanceService terminalInstanceService: ITerminalInstanceService,
@ITerminalInstanceService private readonly _terminalInstanceService: ITerminalInstanceService,
@IEditorOverrideService editorOverrideService: IEditorOverrideService,
@IExtensionService private readonly _extensionService: IExtensionService,
@INotificationService private readonly _notificationService: INotificationService,
@ -156,9 +152,6 @@ export class TerminalService implements ITerminalService {
this._localTerminalService = localTerminalService;
this._isShuttingDown = false;
this._findState = new FindReplaceState();
this._terminalFocusContextKey = KEYBINDING_CONTEXT_TERMINAL_FOCUS.bindTo(this._contextKeyService);
this._terminalShellTypeContextKey = KEYBINDING_CONTEXT_TERMINAL_SHELL_TYPE.bindTo(this._contextKeyService);
this._terminalAltBufferActiveContextKey = KEYBINDING_CONTEXT_TERMINAL_ALT_BUFFER_ACTIVE.bindTo(this._contextKeyService);
this._configHelper = _instantiationService.createInstance(TerminalConfigHelper);
editorOverrideService.registerEditor(
@ -181,7 +174,7 @@ export class TerminalService implements ITerminalService {
sourceGroup.removeInstance(instance);
}
} else {
instance = this.createInstance({});
instance = _terminalInstanceService.createInstance({});
}
return {
editor: this._terminalEditorService.getOrCreateEditorInput(instance),
@ -197,7 +190,10 @@ export class TerminalService implements ITerminalService {
this._forwardInstanceHostEvents(this._terminalGroupService);
this._forwardInstanceHostEvents(this._terminalEditorService);
this._terminalGroupService.onDidChangeActiveGroup(this._onActiveGroupChanged.fire, this._onActiveGroupChanged);
terminalInstanceService.onDidCreateInstance(this._onDidCreateInstance.fire, this._onDidCreateInstance);
_terminalInstanceService.onDidCreateInstance(instance => {
this._initInstanceListeners(instance);
this._onDidCreateInstance.fire(instance);
});
// the below avoids having to poll routinely.
// we update detected profiles when an instance is created so that,
@ -995,18 +991,6 @@ export class TerminalService implements ITerminalService {
return { label, description: profile.path, profile, buttons };
}
createInstance(shellLaunchConfig: IShellLaunchConfig): ITerminalInstance {
const instance = this._instantiationService.createInstance(TerminalInstance,
this._terminalFocusContextKey,
this._terminalShellTypeContextKey,
this._terminalAltBufferActiveContextKey,
this._configHelper,
shellLaunchConfig
);
this._onDidCreateInstance.fire(instance);
return instance;
}
private _convertProfileToShellLaunchConfig(shellLaunchConfigOrProfile?: IShellLaunchConfig | ITerminalProfile, cwd?: string | URI): IShellLaunchConfig {
// Profile was provided
if (shellLaunchConfigOrProfile && 'profileName' in shellLaunchConfigOrProfile) {
@ -1045,7 +1029,7 @@ export class TerminalService implements ITerminalService {
throw new Error('Could not create terminal when process support is not registered');
}
if (shellLaunchConfig.hideFromUser) {
const instance = this.createInstance(shellLaunchConfig);
const instance = this._terminalInstanceService.createInstance(shellLaunchConfig);
this._backgroundedTerminalInstances.push(instance);
this._backgroundedTerminalDisposables.set(instance.instanceId, [
instance.onDisposed(this._onDidDisposeInstance.fire, this._onDidDisposeInstance)
@ -1059,7 +1043,7 @@ export class TerminalService implements ITerminalService {
let instance: ITerminalInstance;
const target = options?.target || this.configHelper.config.defaultLocation;
if (target === TerminalLocation.Editor) {
instance = this.createInstance(shellLaunchConfig);
instance = this._terminalInstanceService.createInstance(shellLaunchConfig);
instance.target = TerminalLocation.Editor;
this._terminalEditorService.openEditor(instance);
} else {