Skip to content

Commit 86d1a94

Browse files
authored
Merge pull request microsoft#201325 from microsoft/tyriar/199845
Add move terminal into new window action/menu item
2 parents 17e3076 + 5764957 commit 86d1a94

File tree

6 files changed

+38
-6
lines changed

6 files changed

+38
-6
lines changed

src/vs/workbench/contrib/terminal/browser/terminal.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,12 @@ import { IEditableData } from 'vs/workbench/common/views';
2222
import { ITerminalStatusList } from 'vs/workbench/contrib/terminal/browser/terminalStatusList';
2323
import { XtermTerminal } from 'vs/workbench/contrib/terminal/browser/xterm/xtermTerminal';
2424
import { IRegisterContributedProfileArgs, IRemoteTerminalAttachTarget, IStartExtensionTerminalRequest, ITerminalConfiguration, ITerminalFont, ITerminalProcessExtHostProxy, ITerminalProcessInfo } from 'vs/workbench/contrib/terminal/common/terminal';
25-
import { EditorGroupColumn } from 'vs/workbench/services/editor/common/editorGroupColumn';
2625
import { ISimpleSelectedSuggestion } from 'vs/workbench/services/suggest/browser/simpleSuggestWidget';
2726
import type { IMarker, ITheme, Terminal as RawXtermTerminal } from '@xterm/xterm';
2827
import { ScrollPosition } from 'vs/workbench/contrib/terminal/browser/xterm/markNavigationAddon';
2928
import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
29+
import { GroupIdentifier } from 'vs/workbench/common/editor';
30+
import { ACTIVE_GROUP_TYPE, AUX_WINDOW_GROUP_TYPE, SIDE_GROUP_TYPE } from 'vs/workbench/services/editor/common/editorService';
3031

3132
export const ITerminalService = createDecorator<ITerminalService>('terminalService');
3233
export const ITerminalEditorService = createDecorator<ITerminalEditorService>('terminalEditorService');
@@ -297,7 +298,8 @@ export interface ITerminalService extends ITerminalInstanceHost {
297298

298299
getActiveOrCreateInstance(options?: { acceptsInput?: boolean }): Promise<ITerminalInstance>;
299300
revealActiveTerminal(preserveFocus?: boolean): Promise<void>;
300-
moveToEditor(source: ITerminalInstance): void;
301+
moveToEditor(source: ITerminalInstance, group?: GroupIdentifier | SIDE_GROUP_TYPE | ACTIVE_GROUP_TYPE | AUX_WINDOW_GROUP_TYPE): void;
302+
moveIntoNewEditor(source: ITerminalInstance): void;
301303
moveToTerminalView(source: ITerminalInstance | URI): Promise<void>;
302304
getPrimaryBackend(): ITerminalBackend | undefined;
303305

@@ -419,7 +421,7 @@ export interface ICreateTerminalOptions {
419421
}
420422

421423
export interface TerminalEditorLocation {
422-
viewColumn: EditorGroupColumn;
424+
viewColumn: GroupIdentifier | SIDE_GROUP_TYPE | ACTIVE_GROUP_TYPE | AUX_WINDOW_GROUP_TYPE;
423425
preserveFocus?: boolean;
424426
}
425427

src/vs/workbench/contrib/terminal/browser/terminalActions.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -366,6 +366,14 @@ export function registerTerminalActions() {
366366
runAfter: (instances) => instances.at(-1)?.focus()
367367
});
368368

369+
registerContextualInstanceAction({
370+
id: TerminalCommandId.MoveIntoNewWindow,
371+
title: terminalStrings.moveIntoNewWindow,
372+
precondition: sharedWhenClause.terminalAvailable_and_opened,
373+
run: (instance, c) => c.service.moveIntoNewEditor(instance),
374+
runAfter: (instances) => instances.at(-1)?.focus()
375+
});
376+
369377
registerTerminalAction({
370378
id: TerminalCommandId.MoveToTerminalPanel,
371379
title: terminalStrings.moveToTerminalPanel,

src/vs/workbench/contrib/terminal/browser/terminalMenus.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -576,6 +576,17 @@ export function setupTerminalMenus(): void {
576576
order: 2
577577
}
578578
},
579+
{
580+
id: MenuId.TerminalTabContext,
581+
item: {
582+
command: {
583+
id: TerminalCommandId.MoveIntoNewWindow,
584+
title: terminalStrings.moveIntoNewWindow.value
585+
},
586+
group: ContextMenuGroup.Create,
587+
order: 2
588+
}
589+
},
579590
{
580591
id: MenuId.TerminalTabContext,
581592
item: {

src/vs/workbench/contrib/terminal/browser/terminalService.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ import { IRemoteTerminalAttachTarget, IStartExtensionTerminalRequest, ITerminalP
4141
import { TerminalContextKeys } from 'vs/workbench/contrib/terminal/common/terminalContextKey';
4242
import { columnToEditorGroup } from 'vs/workbench/services/editor/common/editorGroupColumn';
4343
import { IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService';
44-
import { IEditorService, SIDE_GROUP } from 'vs/workbench/services/editor/common/editorService';
44+
import { ACTIVE_GROUP_TYPE, AUX_WINDOW_GROUP, AUX_WINDOW_GROUP_TYPE, IEditorService, SIDE_GROUP, SIDE_GROUP_TYPE } from 'vs/workbench/services/editor/common/editorService';
4545
import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService';
4646
import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions';
4747
import { ILifecycleService, ShutdownReason, StartupKind, WillShutdownEvent } from 'vs/workbench/services/lifecycle/common/lifecycle';
@@ -56,6 +56,7 @@ import { DetachedTerminal } from 'vs/workbench/contrib/terminal/browser/detached
5656
import { ITerminalCapabilityImplMap, TerminalCapability } from 'vs/platform/terminal/common/capabilities/capabilities';
5757
import { createInstanceCapabilityEventMultiplexer } from 'vs/workbench/contrib/terminal/browser/terminalEvents';
5858
import { mainWindow } from 'vs/base/browser/window';
59+
import { GroupIdentifier } from 'vs/workbench/common/editor';
5960

6061
export class TerminalService extends Disposable implements ITerminalService {
6162
declare _serviceBrand: undefined;
@@ -762,7 +763,7 @@ export class TerminalService extends Disposable implements ITerminalService {
762763
return this.instances.some(term => term.processId === remoteTerm.pid);
763764
}
764765

765-
moveToEditor(source: ITerminalInstance): void {
766+
moveToEditor(source: ITerminalInstance, group?: GroupIdentifier | SIDE_GROUP_TYPE | ACTIVE_GROUP_TYPE | AUX_WINDOW_GROUP_TYPE): void {
766767
if (source.target === TerminalLocation.Editor) {
767768
return;
768769
}
@@ -771,7 +772,12 @@ export class TerminalService extends Disposable implements ITerminalService {
771772
return;
772773
}
773774
sourceGroup.removeInstance(source);
774-
this._terminalEditorService.openEditor(source);
775+
this._terminalEditorService.openEditor(source, group ? { viewColumn: group } : undefined);
776+
777+
}
778+
779+
moveIntoNewEditor(source: ITerminalInstance): void {
780+
this.moveToEditor(source, AUX_WINDOW_GROUP);
775781
}
776782

777783
async moveToTerminalView(source?: ITerminalInstance | URI, target?: ITerminalInstance, side?: 'before' | 'after'): Promise<void> {

src/vs/workbench/contrib/terminal/common/terminal.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -481,6 +481,7 @@ export const enum TerminalCommandId {
481481
DetachSession = 'workbench.action.terminal.detachSession',
482482
MoveToEditor = 'workbench.action.terminal.moveToEditor',
483483
MoveToTerminalPanel = 'workbench.action.terminal.moveToTerminalPanel',
484+
MoveIntoNewWindow = 'workbench.action.terminal.moveIntoNewWindow',
484485
SetDimensions = 'workbench.action.terminal.setDimensions',
485486
ClearPreviousSessionHistory = 'workbench.action.terminal.clearPreviousSessionHistory',
486487
SelectPrevSuggestion = 'workbench.action.terminal.selectPrevSuggestion',

src/vs/workbench/contrib/terminal/common/terminalStrings.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,10 @@ export const terminalStrings = {
3737
value: localize('moveToEditor', "Move Terminal into Editor Area"),
3838
original: 'Move Terminal into Editor Area',
3939
},
40+
moveIntoNewWindow: {
41+
value: localize('moveIntoNewWindow', "Move Terminal into New Window"),
42+
original: 'Move Terminal into New Window',
43+
},
4044
moveToTerminalPanel: {
4145
value: localize('workbench.action.terminal.moveToTerminalPanel', "Move Terminal into Panel"),
4246
original: 'Move Terminal into Panel'

0 commit comments

Comments
 (0)