mirror of
https://github.com/microsoft/vscode.git
synced 2026-07-13 15:35:20 +01:00
Force new terminal editor button to create in active group
Fixes #131156
This commit is contained in:
@@ -146,11 +146,10 @@ export function registerTerminalActions() {
|
||||
precondition: TerminalContextKeys.processSupported
|
||||
});
|
||||
}
|
||||
async run(accessor: ServicesAccessor) {
|
||||
async run(accessor: ServicesAccessor, args?: unknown) {
|
||||
const terminalService = accessor.get(ITerminalService);
|
||||
const instance = await terminalService.createTerminal({
|
||||
location: TerminalLocation.Editor
|
||||
});
|
||||
const options = (typeof args === 'object' && args && 'location' in args) ? args as ICreateTerminalOptions : { location: TerminalLocation.Editor };
|
||||
const instance = await terminalService.createTerminal(options);
|
||||
instance.focusWhenReady();
|
||||
}
|
||||
});
|
||||
|
||||
@@ -31,7 +31,7 @@ import { BrowserFeatures } from 'vs/base/browser/canIUse';
|
||||
import { INotificationService } from 'vs/platform/notification/common/notification';
|
||||
import { openContextMenu } from 'vs/workbench/contrib/terminal/browser/terminalContextMenu';
|
||||
import { ICommandService } from 'vs/platform/commands/common/commands';
|
||||
import { TerminalLocation } from 'vs/platform/terminal/common/terminal';
|
||||
import { ACTIVE_GROUP } from 'vs/workbench/services/editor/common/editorService';
|
||||
|
||||
const findWidgetSelector = '.simple-find-part-wrapper';
|
||||
|
||||
@@ -201,7 +201,8 @@ export class TerminalEditor extends EditorPane {
|
||||
override getActionViewItem(action: IAction): IActionViewItem | undefined {
|
||||
switch (action.id) {
|
||||
case TerminalCommandId.CreateWithProfileButton: {
|
||||
const actions = getTerminalActionBarArgs(TerminalLocation.Editor, this._terminalService.availableProfiles, this._getDefaultProfileName(), this._terminalContributionService.terminalProfiles, this._instantiationService, this._terminalService, this._contextKeyService, this._commandService, this._dropdownMenu);
|
||||
const location = { viewColumn: ACTIVE_GROUP };
|
||||
const actions = getTerminalActionBarArgs(location, this._terminalService.availableProfiles, this._getDefaultProfileName(), this._terminalContributionService.terminalProfiles, this._instantiationService, this._terminalService, this._contextKeyService, this._commandService, this._dropdownMenu);
|
||||
const button = this._instantiationService.createInstance(DropdownWithPrimaryActionViewItem, actions.primaryAction, actions.dropdownAction, actions.dropdownMenuActions, actions.className, this._contextMenuService, {});
|
||||
return button;
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ import { ContextKeyAndExpr, ContextKeyEqualsExpr, ContextKeyExpr, IContextKeySer
|
||||
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
||||
import { IExtensionTerminalProfile, ITerminalProfile, TerminalLocation, TerminalSettingId } from 'vs/platform/terminal/common/terminal';
|
||||
import { ResourceContextKey } from 'vs/workbench/common/resources';
|
||||
import { ICreateTerminalOptions, ITerminalService } from 'vs/workbench/contrib/terminal/browser/terminal';
|
||||
import { ICreateTerminalOptions, ITerminalLocationOptions, ITerminalService } from 'vs/workbench/contrib/terminal/browser/terminal';
|
||||
import { TerminalCommandId, TERMINAL_VIEW_ID } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||
import { TerminalContextKeys, TerminalContextKeyStrings } from 'vs/workbench/contrib/terminal/common/terminalContextKey';
|
||||
import { terminalStrings } from 'vs/workbench/contrib/terminal/common/terminalStrings';
|
||||
@@ -572,7 +572,7 @@ export function setupTerminalMenus(): void {
|
||||
});
|
||||
}
|
||||
|
||||
export function getTerminalActionBarArgs(location: TerminalLocation, profiles: ITerminalProfile[], defaultProfileName: string, contributedProfiles: readonly IExtensionTerminalProfile[], instantiationService: IInstantiationService, terminalService: ITerminalService, contextKeyService: IContextKeyService, commandService: ICommandService, dropdownMenu: IMenu): {
|
||||
export function getTerminalActionBarArgs(location: ITerminalLocationOptions, profiles: ITerminalProfile[], defaultProfileName: string, contributedProfiles: readonly IExtensionTerminalProfile[], instantiationService: IInstantiationService, terminalService: ITerminalService, contextKeyService: IContextKeyService, commandService: ICommandService, dropdownMenu: IMenu): {
|
||||
primaryAction: MenuItemAction,
|
||||
dropdownAction: IAction,
|
||||
dropdownMenuActions: IAction[],
|
||||
@@ -611,7 +611,7 @@ export function getTerminalActionBarArgs(location: TerminalLocation, profiles: I
|
||||
},
|
||||
location
|
||||
})));
|
||||
const splitLocation = location === TerminalLocation.Editor ? { viewColumn: SIDE_GROUP } : location;
|
||||
const splitLocation = (location === TerminalLocation.Editor || typeof location === 'object' && 'viewColumn' in location) ? { viewColumn: SIDE_GROUP } : location;
|
||||
submenuActions.push(new Action(TerminalCommandId.NewWithProfile, title, undefined, true, () => terminalService.createTerminal({
|
||||
config: {
|
||||
extensionIdentifier: contributed.extensionIdentifier,
|
||||
|
||||
@@ -48,6 +48,8 @@ import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/
|
||||
import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions';
|
||||
import { ILifecycleService, ShutdownReason, WillShutdownEvent } from 'vs/workbench/services/lifecycle/common/lifecycle';
|
||||
import { IRemoteAgentService } from 'vs/workbench/services/remote/common/remoteAgentService';
|
||||
import { ACTIVE_GROUP } from 'vs/workbench/services/editor/common/editorService';
|
||||
import { IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService';
|
||||
|
||||
export class TerminalService implements ITerminalService {
|
||||
declare _serviceBrand: undefined;
|
||||
@@ -173,6 +175,7 @@ export class TerminalService implements ITerminalService {
|
||||
@ITerminalGroupService private readonly _terminalGroupService: ITerminalGroupService,
|
||||
@ITerminalInstanceService private readonly _terminalInstanceService: ITerminalInstanceService,
|
||||
@IEditorResolverService editorResolverService: IEditorResolverService,
|
||||
@IEditorGroupsService private readonly _editorGroupsService: IEditorGroupsService,
|
||||
@IExtensionService private readonly _extensionService: IExtensionService,
|
||||
@INotificationService private readonly _notificationService: INotificationService,
|
||||
@IThemeService private readonly _themeService: IThemeService,
|
||||
@@ -1237,6 +1240,11 @@ export class TerminalService implements ITerminalService {
|
||||
|
||||
private _getEditorOptions(location?: ITerminalLocationOptions): TerminalEditorLocation | undefined {
|
||||
if (location && typeof location === 'object' && 'viewColumn' in location) {
|
||||
// When ACTIVE_GROUP is used, resolve it to an actual group to ensure the is created in
|
||||
// the active group even if it is locked
|
||||
if (location.viewColumn === ACTIVE_GROUP) {
|
||||
location.viewColumn = this._editorGroupsService.activeGroup.index;
|
||||
}
|
||||
return location;
|
||||
}
|
||||
return undefined;
|
||||
|
||||
Reference in New Issue
Block a user