From 7b88800c629c29eba42867139626ca89981efc56 Mon Sep 17 00:00:00 2001 From: Karl Burtram Date: Tue, 2 Jul 2019 13:29:47 -0700 Subject: [PATCH] Add a New File menu item for plain text files (#6240) * Add a New File menu item for plain text files * Correct handling of saved files * Fix command palette text to avoid duplicate entry --- .../workbench/common/customInputConverter.ts | 6 ++++-- .../files/browser/fileActions.contribution.ts | 19 ++++++++++++++--- .../contrib/files/browser/fileActions.ts | 21 +++++++++++++++++++ 3 files changed, 41 insertions(+), 5 deletions(-) diff --git a/src/sql/workbench/common/customInputConverter.ts b/src/sql/workbench/common/customInputConverter.ts index 86fc0fdf0a..7786782a1c 100644 --- a/src/sql/workbench/common/customInputConverter.ts +++ b/src/sql/workbench/common/customInputConverter.ts @@ -36,8 +36,10 @@ export const notebookModeId = 'notebook'; * @param instantiationService The instantiation service to use to create the new input types */ export function convertEditorInput(input: EditorInput, options: IQueryEditorOptions, instantiationService: IInstantiationService): EditorInput { - let denyQueryEditor = options && options.denyQueryEditor; - if (input && !denyQueryEditor) { + let denyQueryEditor: boolean = options && options.denyQueryEditor; + let untitledEditorInput: UntitledEditorInput = input as UntitledEditorInput; + let mode: string = (untitledEditorInput && untitledEditorInput.getMode) ? untitledEditorInput.getMode() : 'sql'; + if (input && !denyQueryEditor && mode === 'sql') { //QueryInput let uri: URI = getQueryEditorFileUri(input); if (uri) { diff --git a/src/vs/workbench/contrib/files/browser/fileActions.contribution.ts b/src/vs/workbench/contrib/files/browser/fileActions.contribution.ts index fd4f8a0ec1..a9bed878de 100644 --- a/src/vs/workbench/contrib/files/browser/fileActions.contribution.ts +++ b/src/vs/workbench/contrib/files/browser/fileActions.contribution.ts @@ -5,7 +5,7 @@ import * as nls from 'vs/nls'; import { Registry } from 'vs/platform/registry/common/platform'; -import { ToggleAutoSaveAction, GlobalNewUntitledFileAction, ShowOpenedFileInNewWindow, 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 } from 'vs/workbench/contrib/files/browser/fileActions'; +import { ToggleAutoSaveAction, GlobalNewUntitledFileAction, GlobalNewUntitledPlainFileAction, ShowOpenedFileInNewWindow, 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 } from 'vs/workbench/contrib/files/browser/fileActions'; import { revertLocalChangesCommand, acceptLocalChangesCommand, CONFLICT_RESOLUTION_CONTEXT } from 'vs/workbench/contrib/files/browser/saveErrorHandler'; import { SyncActionDescriptor, MenuId, MenuRegistry, ILocalizedString } from 'vs/platform/actions/common/actions'; import { IWorkbenchActionRegistry, Extensions as ActionExtensions } from 'vs/workbench/common/actions'; @@ -37,6 +37,8 @@ registry.registerWorkbenchAction(new SyncActionDescriptor(ShowActiveFileInExplor registry.registerWorkbenchAction(new SyncActionDescriptor(CollapseExplorerView, CollapseExplorerView.ID, CollapseExplorerView.LABEL), 'File: Collapse Folders in Explorer', category); registry.registerWorkbenchAction(new SyncActionDescriptor(RefreshExplorerView, RefreshExplorerView.ID, RefreshExplorerView.LABEL), 'File: Refresh Explorer', category); registry.registerWorkbenchAction(new SyncActionDescriptor(GlobalNewUntitledFileAction, GlobalNewUntitledFileAction.ID, GlobalNewUntitledFileAction.LABEL, { primary: KeyMod.CtrlCmd | KeyCode.KEY_N }), 'File: New Untitled File', category); +// {{SQL CARBON EDIT}} -- Add 'New File' command for plain untitled files +registry.registerWorkbenchAction(new SyncActionDescriptor(GlobalNewUntitledPlainFileAction, GlobalNewUntitledPlainFileAction.ID, GlobalNewUntitledPlainFileAction.LABEL), 'File: New Plain Text File', category); registry.registerWorkbenchAction(new SyncActionDescriptor(ShowOpenedFileInNewWindow, ShowOpenedFileInNewWindow.ID, ShowOpenedFileInNewWindow.LABEL, { primary: KeyChord(KeyMod.CtrlCmd | KeyCode.KEY_K, KeyCode.KEY_O) }), 'File: Open Active File in New Window', category); registry.registerWorkbenchAction(new SyncActionDescriptor(CompareWithClipboardAction, CompareWithClipboardAction.ID, CompareWithClipboardAction.LABEL, { primary: KeyChord(KeyMod.CtrlCmd | KeyCode.KEY_K, KeyCode.KEY_C) }), 'File: Compare Active File with Clipboard', category); registry.registerWorkbenchAction(new SyncActionDescriptor(ToggleAutoSaveAction, ToggleAutoSaveAction.ID, ToggleAutoSaveAction.LABEL), 'File: Toggle Auto Save', category); @@ -534,11 +536,12 @@ MenuRegistry.appendMenuItem(MenuId.ExplorerContext, { // Empty Editor Group Context Menu // {{SQL CARBON EDIT}} - Use "New Query" instead of "New File" MenuRegistry.appendMenuItem(MenuId.EmptyEditorGroupContext, { command: { id: GlobalNewUntitledFileAction.ID, title: nls.localize('newFile', "New Query") }, group: '1_file', order: 10 }); +MenuRegistry.appendMenuItem(MenuId.EmptyEditorGroupContext, { command: { id: GlobalNewUntitledPlainFileAction.ID, title: nls.localize('newPlainFile', "New File") }, group: '1_file', order: 15 }); MenuRegistry.appendMenuItem(MenuId.EmptyEditorGroupContext, { command: { id: 'workbench.action.quickOpen', title: nls.localize('openFile', "Open File...") }, group: '1_file', order: 20 }); // File menu -// {{SQL CARBON EDIT}} - Use "New Query" instead of "New File" +// {{SQL CARBON EDIT}} - Use "New Query" MenuRegistry.appendMenuItem(MenuId.MenubarFileMenu, { group: '1_new', command: { @@ -548,6 +551,16 @@ MenuRegistry.appendMenuItem(MenuId.MenubarFileMenu, { order: 1 }); +// {{SQL CARBON EDIT}} - Use "New File" +MenuRegistry.appendMenuItem(MenuId.MenubarFileMenu, { + group: '1_new', + command: { + id: GlobalNewUntitledPlainFileAction.ID, + title: nls.localize({ key: 'miNewPlainFile', comment: ['&& denotes a mnemonic'] }, "New &&File") + }, + order: 1.1 +}); + // {{SQL CARBON EDIT}} - Add "New Notebook" item MenuRegistry.appendMenuItem(MenuId.MenubarFileMenu, { group: '1_new', @@ -555,7 +568,7 @@ MenuRegistry.appendMenuItem(MenuId.MenubarFileMenu, { id: 'notebook.command.new', title: nls.localize({ key: 'miNewNotebook', comment: ['&& denotes a mnemonic'] }, "&&New Notebook") }, - order: 1.1 + order: 1.2 }); // {{SQL CARBON EDIT}} - End diff --git a/src/vs/workbench/contrib/files/browser/fileActions.ts b/src/vs/workbench/contrib/files/browser/fileActions.ts index 34b7c1c196..f4fd867704 100644 --- a/src/vs/workbench/contrib/files/browser/fileActions.ts +++ b/src/vs/workbench/contrib/files/browser/fileActions.ts @@ -143,6 +143,27 @@ export class NewFolderAction extends Action { } } +/* Create new file from anywhere: Open untitled */ +// {{SQL CARBON EDIT}} +export class GlobalNewUntitledPlainFileAction extends Action { + // {{SQL CARBON EDIT}} - Use different command name to reserve original name for SQL files + public static readonly ID = 'workbench.action.files.newUntitledPlainFile'; + public static readonly LABEL = nls.localize('newPlainTextFile', "New Plain Text File"); + + constructor( + id: string, + label: string, + @IEditorService private readonly editorService: IEditorService + ) { + super(id, label); + } + + public run(): Promise { + // {{SQL CARBON EDIT}} - set as plain text + return this.editorService.openEditor({ options: { pinned: true }, mode: 'txt' }); // untitled are always pinned + } +} + /* Create new file from anywhere: Open untitled */ export class GlobalNewUntitledFileAction extends Action { public static readonly ID = 'workbench.action.files.newUntitledFile';