Skip to content

Commit b95c725

Browse files
rebornixBenjamin Pasero
andauthored
Support view type for creating new untitled file. (microsoft#100034)
* Support view type for creating new untitled file. Co-authored-by: Benjamin Pasero <benjpas@microsoft.com>
1 parent 350507a commit b95c725

6 files changed

Lines changed: 41 additions & 26 deletions

File tree

src/vs/workbench/contrib/files/browser/fileActions.contribution.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@
55

66
import * as nls from 'vs/nls';
77
import { Registry } from 'vs/platform/registry/common/platform';
8-
import { ToggleAutoSaveAction, GlobalNewUntitledFileAction, FocusFilesExplorer, GlobalCompareResourcesAction, SaveAllAction, ShowActiveFileInExplorer, CollapseExplorerView, RefreshExplorerView, CompareWithClipboardAction, NEW_FILE_COMMAND_ID, NEW_FILE_LABEL, NEW_FOLDER_COMMAND_ID, NEW_FOLDER_LABEL, TRIGGER_RENAME_LABEL, MOVE_FILE_TO_TRASH_LABEL, COPY_FILE_LABEL, PASTE_FILE_LABEL, FileCopiedContext, renameHandler, moveFileToTrashHandler, copyFileHandler, pasteFileHandler, deleteFileHandler, cutFileHandler, DOWNLOAD_COMMAND_ID, openFilePreserveFocusHandler, DOWNLOAD_LABEL, ShowOpenedFileInNewWindow, ReopenResourcesAction, ToggleEditorTypeCommand as ToggleEditorTypeAction } from 'vs/workbench/contrib/files/browser/fileActions';
8+
import { ToggleAutoSaveAction, FocusFilesExplorer, GlobalCompareResourcesAction, SaveAllAction, ShowActiveFileInExplorer, CollapseExplorerView, RefreshExplorerView, CompareWithClipboardAction, NEW_FILE_COMMAND_ID, NEW_FILE_LABEL, NEW_FOLDER_COMMAND_ID, NEW_FOLDER_LABEL, TRIGGER_RENAME_LABEL, MOVE_FILE_TO_TRASH_LABEL, COPY_FILE_LABEL, PASTE_FILE_LABEL, FileCopiedContext, renameHandler, moveFileToTrashHandler, copyFileHandler, pasteFileHandler, deleteFileHandler, cutFileHandler, DOWNLOAD_COMMAND_ID, openFilePreserveFocusHandler, DOWNLOAD_LABEL, ShowOpenedFileInNewWindow, ReopenResourcesAction, ToggleEditorTypeCommand as ToggleEditorTypeAction } from 'vs/workbench/contrib/files/browser/fileActions';
99
import { revertLocalChangesCommand, acceptLocalChangesCommand, CONFLICT_RESOLUTION_CONTEXT } from 'vs/workbench/contrib/files/browser/editors/textFileSaveErrorHandler';
1010
import { SyncActionDescriptor, MenuId, MenuRegistry, ILocalizedString } from 'vs/platform/actions/common/actions';
1111
import { IWorkbenchActionRegistry, Extensions as ActionExtensions } from 'vs/workbench/common/actions';
1212
import { KeyMod, KeyChord, KeyCode } from 'vs/base/common/keyCodes';
13-
import { openWindowCommand, COPY_PATH_COMMAND_ID, REVEAL_IN_EXPLORER_COMMAND_ID, OPEN_TO_SIDE_COMMAND_ID, REVERT_FILE_COMMAND_ID, SAVE_FILE_COMMAND_ID, SAVE_FILE_LABEL, SAVE_FILE_AS_COMMAND_ID, SAVE_FILE_AS_LABEL, SAVE_ALL_IN_GROUP_COMMAND_ID, OpenEditorsGroupContext, COMPARE_WITH_SAVED_COMMAND_ID, COMPARE_RESOURCE_COMMAND_ID, SELECT_FOR_COMPARE_COMMAND_ID, ResourceSelectedForCompareContext, DirtyEditorContext, COMPARE_SELECTED_COMMAND_ID, REMOVE_ROOT_FOLDER_COMMAND_ID, REMOVE_ROOT_FOLDER_LABEL, SAVE_FILES_COMMAND_ID, COPY_RELATIVE_PATH_COMMAND_ID, SAVE_FILE_WITHOUT_FORMATTING_COMMAND_ID, SAVE_FILE_WITHOUT_FORMATTING_LABEL, newWindowCommand, ReadonlyEditorContext, OPEN_WITH_EXPLORER_COMMAND_ID } from 'vs/workbench/contrib/files/browser/fileCommands';
13+
import { openWindowCommand, COPY_PATH_COMMAND_ID, REVEAL_IN_EXPLORER_COMMAND_ID, OPEN_TO_SIDE_COMMAND_ID, REVERT_FILE_COMMAND_ID, SAVE_FILE_COMMAND_ID, SAVE_FILE_LABEL, SAVE_FILE_AS_COMMAND_ID, SAVE_FILE_AS_LABEL, SAVE_ALL_IN_GROUP_COMMAND_ID, OpenEditorsGroupContext, COMPARE_WITH_SAVED_COMMAND_ID, COMPARE_RESOURCE_COMMAND_ID, SELECT_FOR_COMPARE_COMMAND_ID, ResourceSelectedForCompareContext, DirtyEditorContext, COMPARE_SELECTED_COMMAND_ID, REMOVE_ROOT_FOLDER_COMMAND_ID, REMOVE_ROOT_FOLDER_LABEL, SAVE_FILES_COMMAND_ID, COPY_RELATIVE_PATH_COMMAND_ID, SAVE_FILE_WITHOUT_FORMATTING_COMMAND_ID, SAVE_FILE_WITHOUT_FORMATTING_LABEL, newWindowCommand, ReadonlyEditorContext, OPEN_WITH_EXPLORER_COMMAND_ID, NEW_UNTITLED_FILE_COMMAND_ID, NEW_UNTITLED_FILE_LABEL } from 'vs/workbench/contrib/files/browser/fileCommands';
1414
import { CommandsRegistry, ICommandHandler } from 'vs/platform/commands/common/commands';
1515
import { ContextKeyExpr, ContextKeyExpression } from 'vs/platform/contextkey/common/contextkey';
1616
import { KeybindingsRegistry, KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry';
@@ -42,7 +42,6 @@ registry.registerWorkbenchAction(SyncActionDescriptor.from(FocusFilesExplorer),
4242
registry.registerWorkbenchAction(SyncActionDescriptor.from(ShowActiveFileInExplorer), 'File: Reveal Active File in Side Bar', category.value);
4343
registry.registerWorkbenchAction(SyncActionDescriptor.from(CollapseExplorerView), 'File: Collapse Folders in Explorer', category.value);
4444
registry.registerWorkbenchAction(SyncActionDescriptor.from(RefreshExplorerView), 'File: Refresh Explorer', category.value);
45-
registry.registerWorkbenchAction(SyncActionDescriptor.from(GlobalNewUntitledFileAction, { primary: KeyMod.CtrlCmd | KeyCode.KEY_N }), 'File: New Untitled File', category.value);
4645
registry.registerWorkbenchAction(SyncActionDescriptor.from(CompareWithClipboardAction, { primary: KeyChord(KeyMod.CtrlCmd | KeyCode.KEY_K, KeyCode.KEY_C) }), 'File: Compare Active File with Clipboard', category.value);
4746
registry.registerWorkbenchAction(SyncActionDescriptor.from(ToggleAutoSaveAction), 'File: Toggle Auto Save', category.value);
4847
registry.registerWorkbenchAction(SyncActionDescriptor.from(ShowOpenedFileInNewWindow, { primary: KeyChord(KeyMod.CtrlCmd | KeyCode.KEY_K, KeyCode.KEY_O) }), 'File: Open Active File in New Window', category.value);
@@ -240,6 +239,7 @@ appendToCommandPalette(CLOSE_EDITOR_COMMAND_ID, { value: nls.localize('closeEdit
240239
appendToCommandPalette(NEW_FILE_COMMAND_ID, { value: NEW_FILE_LABEL, original: 'New File' }, category, WorkspaceFolderCountContext.notEqualsTo('0'));
241240
appendToCommandPalette(NEW_FOLDER_COMMAND_ID, { value: NEW_FOLDER_LABEL, original: 'New Folder' }, category, WorkspaceFolderCountContext.notEqualsTo('0'));
242241
appendToCommandPalette(DOWNLOAD_COMMAND_ID, { value: DOWNLOAD_LABEL, original: 'Download' }, category, ContextKeyExpr.and(ResourceContextKey.Scheme.notEqualsTo(Schemas.file)));
242+
appendToCommandPalette(NEW_UNTITLED_FILE_COMMAND_ID, { value: NEW_UNTITLED_FILE_LABEL, original: 'New Untitled File' }, category);
243243

244244
// Menu registration - open editors
245245

@@ -581,15 +581,15 @@ MenuRegistry.appendMenuItem(MenuId.ExplorerContext, {
581581
});
582582

583583
// Empty Editor Group Context Menu
584-
MenuRegistry.appendMenuItem(MenuId.EmptyEditorGroupContext, { command: { id: GlobalNewUntitledFileAction.ID, title: nls.localize('newFile', "New File") }, group: '1_file', order: 10 });
584+
MenuRegistry.appendMenuItem(MenuId.EmptyEditorGroupContext, { command: { id: NEW_UNTITLED_FILE_COMMAND_ID, title: nls.localize('newFile', "New File") }, group: '1_file', order: 10 });
585585
MenuRegistry.appendMenuItem(MenuId.EmptyEditorGroupContext, { command: { id: 'workbench.action.quickOpen', title: nls.localize('openFile', "Open File...") }, group: '1_file', order: 20 });
586586

587587
// File menu
588588

589589
MenuRegistry.appendMenuItem(MenuId.MenubarFileMenu, {
590590
group: '1_new',
591591
command: {
592-
id: GlobalNewUntitledFileAction.ID,
592+
id: NEW_UNTITLED_FILE_COMMAND_ID,
593593
title: nls.localize({ key: 'miNewFile', comment: ['&& denotes a mnemonic'] }, "&&New File")
594594
},
595595
order: 1

src/vs/workbench/contrib/files/browser/fileActions.ts

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -121,24 +121,6 @@ export class NewFolderAction extends Action {
121121
}
122122
}
123123

124-
/* Create new file from anywhere: Open untitled */
125-
export class GlobalNewUntitledFileAction extends Action {
126-
static readonly ID = 'workbench.action.files.newUntitledFile';
127-
static readonly LABEL = nls.localize('newUntitledFile', "New Untitled File");
128-
129-
constructor(
130-
id: string,
131-
label: string,
132-
@IEditorService private readonly editorService: IEditorService
133-
) {
134-
super(id, label);
135-
}
136-
137-
async run(): Promise<void> {
138-
await this.editorService.openEditor({ options: { pinned: true } }); // untitled are always pinned
139-
}
140-
}
141-
142124
async function deleteFiles(workingCopyFileService: IWorkingCopyFileService, dialogService: IDialogService, configurationService: IConfigurationService, elements: ExplorerItem[], useTrash: boolean, skipConfirm = false): Promise<void> {
143125
let primaryButton: string;
144126
if (useTrash) {

src/vs/workbench/contrib/files/browser/fileCommands.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,8 @@ export const PREVIOUS_COMPRESSED_FOLDER = 'previousCompressedFolder';
8585
export const NEXT_COMPRESSED_FOLDER = 'nextCompressedFolder';
8686
export const FIRST_COMPRESSED_FOLDER = 'firstCompressedFolder';
8787
export const LAST_COMPRESSED_FOLDER = 'lastCompressedFolder';
88+
export const NEW_UNTITLED_FILE_COMMAND_ID = 'workbench.action.files.newUntitledFile';
89+
export const NEW_UNTITLED_FILE_LABEL = nls.localize('newUntitledFile', "New Untitled File");
8890

8991
export const openWindowCommand = (accessor: ServicesAccessor, toOpen: IWindowOpenable[], options?: IOpenWindowOptions) => {
9092
if (Array.isArray(toOpen)) {
@@ -597,3 +599,25 @@ KeybindingsRegistry.registerCommandAndKeybindingRule({
597599
view.lastCompressedStat();
598600
}
599601
});
602+
603+
KeybindingsRegistry.registerCommandAndKeybindingRule({
604+
weight: KeybindingWeight.WorkbenchContrib,
605+
when: null,
606+
primary: KeyMod.CtrlCmd | KeyCode.KEY_N,
607+
id: NEW_UNTITLED_FILE_COMMAND_ID,
608+
handler: async (accessor, viewType?: string) => {
609+
const editorService = accessor.get(IEditorService);
610+
611+
if (viewType) {
612+
const editorGroupsService = accessor.get(IEditorGroupsService);
613+
const configurationService = accessor.get(IConfigurationService);
614+
const quickInputService = accessor.get(IQuickInputService);
615+
616+
const textInput = editorService.createEditorInput({ options: { pinned: true } });
617+
const group = editorGroupsService.activeGroup;
618+
await openEditorWith(textInput, viewType, { pinned: true }, group, editorService, configurationService, quickInputService);
619+
} else {
620+
await editorService.openEditor({ options: { pinned: true } }); // untitled are always pinned
621+
}
622+
}
623+
});

src/vs/workbench/contrib/notebook/browser/notebook.contribution.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,7 @@ export class NotebookContribution extends Disposable implements IWorkbenchContri
175175

176176
this._register(this.editorService.overrideOpenEditor({
177177
getEditorOverrides: (resource: URI, options: IEditorOptions | undefined, group: IEditorGroup | undefined) => {
178+
178179
const currentEditorForResource = group?.editors.find(editor => isEqual(editor.resource, resource));
179180

180181
const associatedEditors = distinct([
@@ -251,6 +252,10 @@ export class NotebookContribution extends Disposable implements IWorkbenchContri
251252
}
252253

253254
private onEditorOpening(originalInput: IEditorInput, options: IEditorOptions | ITextEditorOptions | undefined, group: IEditorGroup, context: OpenEditorContext, id: string | undefined): IOpenEditorOverride | undefined {
255+
if (id === undefined && originalInput.isUntitled()) {
256+
return;
257+
}
258+
254259
if (originalInput instanceof NotebookEditorInput) {
255260
if ((originalInput.group === group.id || originalInput.group === undefined) && (originalInput.viewType === id || typeof id !== 'string')) {
256261
// No need to do anything
@@ -344,6 +349,10 @@ export class NotebookContribution extends Disposable implements IWorkbenchContri
344349
const infos = this.notebookService.getContributedNotebookProviders(resource);
345350
info = id === undefined ? infos[0] : infos.find(info => info.id === id);
346351

352+
if (!info && id !== undefined) {
353+
info = this.notebookService.getContributedNotebookProvider(id);
354+
}
355+
347356
if (!info) {
348357
return undefined;
349358
}

src/vs/workbench/contrib/notebook/browser/notebookServiceImpl.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ export class NotebookProviderInfoStore implements IDisposable {
104104
}
105105

106106
getContributedNotebook(resource: URI): readonly NotebookProviderInfo[] {
107-
return [...Iterable.filter(this.contributedEditors.values(), customEditor => customEditor.matches(resource))];
107+
return [...Iterable.filter(this.contributedEditors.values(), customEditor => resource.scheme === 'untitled' || customEditor.matches(resource))];
108108
}
109109

110110
public [Symbol.iterator](): Iterator<NotebookProviderInfo> {

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import { IWorkspaceContextService, WorkbenchState } from 'vs/platform/workspace/
1515
import { IWorkbenchContribution, IWorkbenchContributionsRegistry, Extensions as WorkbenchExtensions } from 'vs/workbench/common/contributions';
1616
import { ILifecycleService, LifecyclePhase } from 'vs/platform/lifecycle/common/lifecycle';
1717
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
18-
import { GlobalNewUntitledFileAction } from 'vs/workbench/contrib/files/browser/fileActions';
1918
import { OpenFolderAction, OpenFileFolderAction, OpenFileAction } from 'vs/workbench/browser/actions/workspaceActions';
2019
import { ShowAllCommandsAction } from 'vs/workbench/contrib/quickaccess/browser/commandsQuickAccess';
2120
import { Parts, IWorkbenchLayoutService } from 'vs/workbench/services/layout/browser/layoutService';
@@ -28,6 +27,7 @@ import { CommandsRegistry } from 'vs/platform/commands/common/commands';
2827
import { TERMINAL_COMMAND_ID } from 'vs/workbench/contrib/terminal/common/terminal';
2928
import { assertIsDefined } from 'vs/base/common/types';
3029
import { workbenchConfigurationNodeBase } from 'vs/workbench/common/configuration';
30+
import { NEW_UNTITLED_FILE_COMMAND_ID } from 'vs/workbench/contrib/files/browser/fileCommands';
3131

3232
const $ = dom.$;
3333

@@ -43,7 +43,7 @@ const openFileNonMacOnly: WatermarkEntry = { text: nls.localize('watermark.openF
4343
const openFolderNonMacOnly: WatermarkEntry = { text: nls.localize('watermark.openFolder', "Open Folder"), id: OpenFolderAction.ID, mac: false };
4444
const openFileOrFolderMacOnly: WatermarkEntry = { text: nls.localize('watermark.openFileFolder', "Open File or Folder"), id: OpenFileFolderAction.ID, mac: true };
4545
const openRecent: WatermarkEntry = { text: nls.localize('watermark.openRecent', "Open Recent"), id: 'workbench.action.openRecent' };
46-
const newUntitledFile: WatermarkEntry = { text: nls.localize('watermark.newUntitledFile', "New Untitled File"), id: GlobalNewUntitledFileAction.ID };
46+
const newUntitledFile: WatermarkEntry = { text: nls.localize('watermark.newUntitledFile', "New Untitled File"), id: NEW_UNTITLED_FILE_COMMAND_ID };
4747
const newUntitledFileMacOnly: WatermarkEntry = assign({ mac: true }, newUntitledFile);
4848
const toggleTerminal: WatermarkEntry = { text: nls.localize({ key: 'watermark.toggleTerminal', comment: ['toggle is a verb here'] }, "Toggle Terminal"), id: TERMINAL_COMMAND_ID.TOGGLE };
4949
const findInFiles: WatermarkEntry = { text: nls.localize('watermark.findInFiles', "Find in Files"), id: FindInFilesActionId };

0 commit comments

Comments
 (0)