fileActions.contribution.ts 19.3 KB
Newer Older
E
Erich Gamma 已提交
1 2 3 4 5 6
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/
'use strict';

7
import * as nls from 'vs/nls';
8
import { Registry } from 'vs/platform/registry/common/platform';
B
Benjamin Pasero 已提交
9
import { ToggleAutoSaveAction, GlobalNewUntitledFileAction, ShowOpenedFileInNewWindow, CopyPathAction, FocusOpenEditorsView, 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 } from 'vs/workbench/parts/files/electron-browser/fileActions';
10
import { revertLocalChangesCommand, acceptLocalChangesCommand, CONFLICT_RESOLUTION_CONTEXT } from 'vs/workbench/parts/files/electron-browser/saveErrorHandler';
11
import { SyncActionDescriptor, MenuId, MenuRegistry } from 'vs/platform/actions/common/actions';
B
Benjamin Pasero 已提交
12
import { IWorkbenchActionRegistry, Extensions as ActionExtensions } from 'vs/workbench/common/actions';
J
Johannes Rieken 已提交
13
import { KeyMod, KeyChord, KeyCode } from 'vs/base/common/keyCodes';
14
import { openWindowCommand, REVEAL_IN_OS_COMMAND_ID, 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, REVEAL_IN_OS_LABEL, DirtyEditorContext, COMPARE_SELECTED_COMMAND_ID, REMOVE_ROOT_FOLDER_COMMAND_ID, REMOVE_ROOT_FOLDER_LABEL, SAVE_FILES_COMMAND_ID } from 'vs/workbench/parts/files/electron-browser/fileCommands';
15
import { CommandsRegistry, ICommandHandler } from 'vs/platform/commands/common/commands';
16 17
import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey';
import { KeybindingsRegistry } from 'vs/platform/keybinding/common/keybindingsRegistry';
18
import { isWindows, isMacintosh } from 'vs/base/common/platform';
19
import { FilesExplorerFocusCondition, ExplorerRootContext, ExplorerFolderContext } from 'vs/workbench/parts/files/common/files';
20
import { ADD_ROOT_FOLDER_COMMAND_ID, ADD_ROOT_FOLDER_LABEL } from 'vs/workbench/browser/actions/workspaceCommands';
21
import { CLOSE_SAVED_EDITORS_COMMAND_ID, CLOSE_EDITORS_IN_GROUP_COMMAND_ID, CLOSE_EDITOR_COMMAND_ID, CLOSE_OTHER_EDITORS_IN_GROUP_COMMAND_ID } from 'vs/workbench/browser/parts/editor/editorCommands';
I
isidor 已提交
22
import { OPEN_FOLDER_SETTINGS_COMMAND, OPEN_FOLDER_SETTINGS_LABEL } from 'vs/workbench/parts/preferences/browser/preferencesActions';
I
isidor 已提交
23
import { AutoSaveContext } from 'vs/workbench/services/textfile/common/textfiles';
24
import { ResourceContextKey } from 'vs/workbench/common/resources';
I
isidor 已提交
25
import { WorkbenchListDoubleSelection } from 'vs/platform/list/browser/listService';
B
Benjamin Pasero 已提交
26
import URI from 'vs/base/common/uri';
27
import { Schemas } from 'vs/base/common/network';
E
Erich Gamma 已提交
28 29

// Contribute Global Actions
B
Benjamin Pasero 已提交
30
const category = nls.localize('filesCategory', "File");
E
Erich Gamma 已提交
31

32
const registry = Registry.as<IWorkbenchActionRegistry>(ActionExtensions.WorkbenchActions);
B
Benjamin Pasero 已提交
33 34 35 36 37 38 39 40 41
registry.registerWorkbenchAction(new SyncActionDescriptor(SaveAllAction, SaveAllAction.ID, SaveAllAction.LABEL, { primary: void 0, mac: { primary: KeyMod.CtrlCmd | KeyMod.Alt | KeyCode.KEY_S }, win: { primary: KeyChord(KeyMod.CtrlCmd | KeyCode.KEY_K, KeyCode.KEY_S) } }), 'File: Save All', category);
registry.registerWorkbenchAction(new SyncActionDescriptor(GlobalCompareResourcesAction, GlobalCompareResourcesAction.ID, GlobalCompareResourcesAction.LABEL), 'File: Compare Active File With...', category);
registry.registerWorkbenchAction(new SyncActionDescriptor(FocusOpenEditorsView, FocusOpenEditorsView.ID, FocusOpenEditorsView.LABEL, { primary: KeyChord(KeyMod.CtrlCmd | KeyCode.KEY_K, KeyCode.KEY_E) }), 'File: Focus on Open Editors View', category);
registry.registerWorkbenchAction(new SyncActionDescriptor(FocusFilesExplorer, FocusFilesExplorer.ID, FocusFilesExplorer.LABEL), 'File: Focus on Files Explorer', category);
registry.registerWorkbenchAction(new SyncActionDescriptor(ShowActiveFileInExplorer, ShowActiveFileInExplorer.ID, ShowActiveFileInExplorer.LABEL), 'File: Reveal Active File in Side Bar', category);
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);
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);
M
Max Furman 已提交
42
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);
B
Benjamin Pasero 已提交
43
registry.registerWorkbenchAction(new SyncActionDescriptor(ToggleAutoSaveAction, ToggleAutoSaveAction.ID, ToggleAutoSaveAction.LABEL), 'File: Toggle Auto Save', category);
44

45 46 47
// Commands
CommandsRegistry.registerCommand('_files.windowOpen', openWindowCommand);

48 49
const explorerCommandsWeightBonus = 10; // give our commands a little bit more weight over other default list/tree commands

I
isidor 已提交
50
const RENAME_ID = 'renameFile';
51
KeybindingsRegistry.registerCommandAndKeybindingRule({
I
isidor 已提交
52
	id: RENAME_ID,
53
	weight: KeybindingsRegistry.WEIGHT.workbenchContrib(explorerCommandsWeightBonus),
I
isidor 已提交
54
	when: ContextKeyExpr.and(FilesExplorerFocusCondition, ExplorerRootContext.toNegated()),
55 56 57 58
	primary: KeyCode.F2,
	mac: {
		primary: KeyCode.Enter
	},
I
isidor 已提交
59
	handler: renameHandler
60 61
});

I
isidor 已提交
62
const MOVE_FILE_TO_TRASH_ID = 'moveFileToTrash';
63
KeybindingsRegistry.registerCommandAndKeybindingRule({
I
isidor 已提交
64
	id: MOVE_FILE_TO_TRASH_ID,
65
	weight: KeybindingsRegistry.WEIGHT.workbenchContrib(explorerCommandsWeightBonus),
I
isidor 已提交
66
	when: ContextKeyExpr.and(FilesExplorerFocusCondition, ExplorerRootContext.toNegated()),
67 68 69 70
	primary: KeyCode.Delete,
	mac: {
		primary: KeyMod.CtrlCmd | KeyCode.Backspace
	},
I
isidor 已提交
71
	handler: moveFileToTrashHandler
72 73
});

74
const DELETE_FILE_ID = 'deleteFile';
75
KeybindingsRegistry.registerCommandAndKeybindingRule({
76
	id: DELETE_FILE_ID,
77
	weight: KeybindingsRegistry.WEIGHT.workbenchContrib(explorerCommandsWeightBonus),
I
isidor 已提交
78
	when: ContextKeyExpr.and(FilesExplorerFocusCondition, ExplorerRootContext.toNegated()),
79 80 81 82
	primary: KeyMod.Shift | KeyCode.Delete,
	mac: {
		primary: KeyMod.CtrlCmd | KeyMod.Alt | KeyCode.Backspace
	},
I
isidor 已提交
83
	handler: deleteFileHandler
84 85
});

I
isidor 已提交
86
const COPY_FILE_ID = 'filesExplorer.copy';
B
Benjamin Pasero 已提交
87
KeybindingsRegistry.registerCommandAndKeybindingRule({
I
isidor 已提交
88
	id: COPY_FILE_ID,
B
Benjamin Pasero 已提交
89
	weight: KeybindingsRegistry.WEIGHT.workbenchContrib(explorerCommandsWeightBonus),
I
isidor 已提交
90
	when: ContextKeyExpr.and(FilesExplorerFocusCondition, ExplorerRootContext.toNegated()),
B
Benjamin Pasero 已提交
91
	primary: KeyMod.CtrlCmd | KeyCode.KEY_C,
I
isidor 已提交
92
	handler: copyFileHandler,
93 94
});

I
isidor 已提交
95 96
const PASTE_FILE_ID = 'filesExplorer.paste';

97
KeybindingsRegistry.registerCommandAndKeybindingRule({
I
isidor 已提交
98
	id: PASTE_FILE_ID,
99
	weight: KeybindingsRegistry.WEIGHT.workbenchContrib(explorerCommandsWeightBonus),
100
	when: ContextKeyExpr.and(FilesExplorerFocusCondition),
101
	primary: KeyMod.CtrlCmd | KeyCode.KEY_V,
I
isidor 已提交
102
	handler: pasteFileHandler
B
Benjamin Pasero 已提交
103 104
});

105
// Editor Title Context Menu
B
Benjamin Pasero 已提交
106
appendEditorTitleContextMenuItem(REVEAL_IN_OS_COMMAND_ID, REVEAL_IN_OS_LABEL, ResourceContextKey.Scheme.isEqualTo(Schemas.file));
B
Benjamin Pasero 已提交
107 108
appendEditorTitleContextMenuItem(COPY_PATH_COMMAND_ID, CopyPathAction.LABEL, ResourceContextKey.IsFile);
appendEditorTitleContextMenuItem(REVEAL_IN_EXPLORER_COMMAND_ID, nls.localize('revealInSideBar', "Reveal in Side Bar"), ResourceContextKey.IsFile);
109

B
Benjamin Pasero 已提交
110
function appendEditorTitleContextMenuItem(id: string, title: string, when: ContextKeyExpr): void {
111 112 113 114

	// Menu
	MenuRegistry.appendMenuItem(MenuId.EditorTitleContext, {
		command: { id, title },
B
Benjamin Pasero 已提交
115
		when,
116 117
		group: '2_files'
	});
118 119 120
}

// Editor Title Menu for Conflict Resolution
B
Benjamin Pasero 已提交
121
appendSaveConflictEditorTitleAction('workbench.files.action.acceptLocalChanges', nls.localize('acceptLocalChanges', "Use your changes and overwrite disk contents"), {
122 123
	light: URI.parse(require.toUrl(`vs/workbench/parts/files/electron-browser/media/check.svg`)),
	dark: URI.parse(require.toUrl(`vs/workbench/parts/files/electron-browser/media/check-inverse.svg`))
B
Benjamin Pasero 已提交
124 125
}, -10, acceptLocalChangesCommand);
appendSaveConflictEditorTitleAction('workbench.files.action.revertLocalChanges', nls.localize('revertLocalChanges', "Discard your changes and revert to content on disk"), {
126 127
	light: URI.parse(require.toUrl(`vs/workbench/parts/files/electron-browser/media/undo.svg`)),
	dark: URI.parse(require.toUrl(`vs/workbench/parts/files/electron-browser/media/undo-inverse.svg`))
B
Benjamin Pasero 已提交
128
}, -9, revertLocalChangesCommand);
129

130
function appendSaveConflictEditorTitleAction(id: string, title: string, iconLocation: { dark: URI; light?: URI; }, order: number, command: ICommandHandler): void {
131 132 133 134 135 136

	// Command
	CommandsRegistry.registerCommand(id, command);

	// Action
	MenuRegistry.appendMenuItem(MenuId.EditorTitle, {
137
		command: { id, title, iconLocation },
138
		when: ContextKeyExpr.equals(CONFLICT_RESOLUTION_CONTEXT, true),
I
isidor 已提交
139
		group: 'navigation',
140 141
		order
	});
142
}
I
isidor 已提交
143

144 145
// Menu registration - command palette

146
function appendToCommandPalette(id: string, title: string, category: string): void {
I
polish  
isidor 已提交
147 148 149 150 151
	MenuRegistry.appendMenuItem(MenuId.CommandPalette, {
		command: {
			id,
			title,
			category
152
		}
I
polish  
isidor 已提交
153 154
	});
}
I
isidor 已提交
155 156 157
appendToCommandPalette(COPY_PATH_COMMAND_ID, nls.localize('copyPathOfActive', "Copy Path of Active File"), category);
appendToCommandPalette(SAVE_FILE_COMMAND_ID, SAVE_FILE_LABEL, category);
appendToCommandPalette(SAVE_ALL_IN_GROUP_COMMAND_ID, nls.localize('saveAllInGroup', "Save All in Group"), category);
158
appendToCommandPalette(SAVE_FILES_COMMAND_ID, nls.localize('saveFiles', "Save All Files"), category);
I
isidor 已提交
159 160 161 162 163
appendToCommandPalette(REVERT_FILE_COMMAND_ID, nls.localize('revert', "Revert File"), category);
appendToCommandPalette(COMPARE_WITH_SAVED_COMMAND_ID, nls.localize('compareActiveWithSaved', "Compare Active File with Saved"), category);
appendToCommandPalette(REVEAL_IN_OS_COMMAND_ID, REVEAL_IN_OS_LABEL, category);
appendToCommandPalette(SAVE_FILE_AS_COMMAND_ID, SAVE_FILE_AS_LABEL, category);
appendToCommandPalette(CLOSE_EDITOR_COMMAND_ID, nls.localize('closeEditor', "Close Editor"), nls.localize('view', "View"));
164 165
appendToCommandPalette(NEW_FILE_COMMAND_ID, NEW_FILE_LABEL, category);
appendToCommandPalette(NEW_FOLDER_COMMAND_ID, NEW_FOLDER_LABEL, category);
I
isidor 已提交
166

I
isidor 已提交
167

168

169 170 171 172 173 174 175
// Menu registration - open editors

const openToSideCommand = {
	id: OPEN_TO_SIDE_COMMAND_ID,
	title: nls.localize('openToSide', "Open to the Side")
};
MenuRegistry.appendMenuItem(MenuId.OpenEditorsContext, {
I
isidor 已提交
176
	group: 'navigation',
177 178
	order: 10,
	command: openToSideCommand,
179
	when: ResourceContextKey.IsFile
180 181 182 183 184 185 186
});

const revealInOsCommand = {
	id: REVEAL_IN_OS_COMMAND_ID,
	title: isWindows ? nls.localize('revealInWindows', "Reveal in Explorer") : isMacintosh ? nls.localize('revealInMac', "Reveal in Finder") : nls.localize('openContainer', "Open Containing Folder")
};
MenuRegistry.appendMenuItem(MenuId.OpenEditorsContext, {
I
isidor 已提交
187
	group: 'navigation',
188 189
	order: 20,
	command: revealInOsCommand,
B
Benjamin Pasero 已提交
190
	when: ResourceContextKey.Scheme.isEqualTo(Schemas.file)
191 192 193 194 195 196 197
});

const copyPathCommand = {
	id: COPY_PATH_COMMAND_ID,
	title: nls.localize('copyPath', "Copy Path")
};
MenuRegistry.appendMenuItem(MenuId.OpenEditorsContext, {
I
isidor 已提交
198
	group: 'navigation',
199 200
	order: 40,
	command: copyPathCommand,
201
	when: ResourceContextKey.IsFile
202 203 204 205 206 207 208
});

MenuRegistry.appendMenuItem(MenuId.OpenEditorsContext, {
	group: '2_save',
	order: 10,
	command: {
		id: SAVE_FILE_COMMAND_ID,
209 210
		title: SAVE_FILE_LABEL,
		precondition: DirtyEditorContext
211
	},
212
	when: ContextKeyExpr.and(ResourceContextKey.IsFile, AutoSaveContext.notEqualsTo('afterDelay') && AutoSaveContext.notEqualsTo(''))
213 214 215 216 217 218 219
});

MenuRegistry.appendMenuItem(MenuId.OpenEditorsContext, {
	group: '2_save',
	order: 20,
	command: {
		id: REVERT_FILE_COMMAND_ID,
220 221
		title: nls.localize('revert', "Revert File"),
		precondition: DirtyEditorContext
222
	},
223
	when: ContextKeyExpr.and(ResourceContextKey.IsFile, AutoSaveContext.notEqualsTo('afterDelay') && AutoSaveContext.notEqualsTo(''))
224 225 226 227 228 229 230 231
});

MenuRegistry.appendMenuItem(MenuId.OpenEditorsContext, {
	group: '2_save',
	command: {
		id: SAVE_FILE_AS_COMMAND_ID,
		title: SAVE_FILE_AS_LABEL
	},
232
	when: ResourceContextKey.Scheme.isEqualTo(Schemas.untitled)
233 234 235 236 237 238 239 240
});

MenuRegistry.appendMenuItem(MenuId.OpenEditorsContext, {
	group: '2_save',
	command: {
		id: SAVE_ALL_IN_GROUP_COMMAND_ID,
		title: nls.localize('saveAll', "Save All")
	},
241
	when: ContextKeyExpr.and(OpenEditorsGroupContext, AutoSaveContext.notEqualsTo('afterDelay') && AutoSaveContext.notEqualsTo(''))
242 243 244 245 246 247 248
});

MenuRegistry.appendMenuItem(MenuId.OpenEditorsContext, {
	group: '3_compare',
	order: 10,
	command: {
		id: COMPARE_WITH_SAVED_COMMAND_ID,
249 250
		title: nls.localize('compareWithSaved', "Compare with Saved"),
		precondition: DirtyEditorContext
251
	},
252
	when: ContextKeyExpr.and(ResourceContextKey.IsFile, AutoSaveContext.notEqualsTo('afterDelay') && AutoSaveContext.notEqualsTo(''), WorkbenchListDoubleSelection.toNegated())
253 254 255 256
});

const compareResourceCommand = {
	id: COMPARE_RESOURCE_COMMAND_ID,
I
isidor 已提交
257
	title: nls.localize('compareWithSelected', "Compare with Selected")
258 259 260 261 262
};
MenuRegistry.appendMenuItem(MenuId.OpenEditorsContext, {
	group: '3_compare',
	order: 20,
	command: compareResourceCommand,
I
isidor 已提交
263
	when: ContextKeyExpr.and(ResourceContextKey.HasResource, ResourceSelectedForCompareContext, WorkbenchListDoubleSelection.toNegated())
264 265 266 267 268 269 270 271 272 273
});

const selectForCompareCommand = {
	id: SELECT_FOR_COMPARE_COMMAND_ID,
	title: nls.localize('compareSource', "Select for Compare")
};
MenuRegistry.appendMenuItem(MenuId.OpenEditorsContext, {
	group: '3_compare',
	order: 30,
	command: selectForCompareCommand,
I
isidor 已提交
274
	when: ContextKeyExpr.and(ResourceContextKey.HasResource, WorkbenchListDoubleSelection.toNegated())
I
isidor 已提交
275 276 277 278 279 280 281 282 283 284
});

const compareSelectedCommand = {
	id: COMPARE_SELECTED_COMMAND_ID,
	title: nls.localize('compareSelected', "Compare Selected")
};
MenuRegistry.appendMenuItem(MenuId.OpenEditorsContext, {
	group: '3_compare',
	order: 30,
	command: compareSelectedCommand,
I
isidor 已提交
285
	when: ContextKeyExpr.and(ResourceContextKey.HasResource, WorkbenchListDoubleSelection)
286 287 288 289 290 291 292 293 294
});

MenuRegistry.appendMenuItem(MenuId.OpenEditorsContext, {
	group: '4_close',
	order: 10,
	command: {
		id: CLOSE_EDITOR_COMMAND_ID,
		title: nls.localize('close', "Close")
	},
B
Benjamin Pasero 已提交
295
	when: OpenEditorsGroupContext.toNegated()
296 297 298 299 300 301 302 303 304
});

MenuRegistry.appendMenuItem(MenuId.OpenEditorsContext, {
	group: '4_close',
	order: 20,
	command: {
		id: CLOSE_OTHER_EDITORS_IN_GROUP_COMMAND_ID,
		title: nls.localize('closeOthers', "Close Others")
	},
B
Benjamin Pasero 已提交
305
	when: OpenEditorsGroupContext.toNegated()
306 307 308 309 310 311
});

MenuRegistry.appendMenuItem(MenuId.OpenEditorsContext, {
	group: '4_close',
	order: 30,
	command: {
312
		id: CLOSE_SAVED_EDITORS_COMMAND_ID,
313
		title: nls.localize('closeSaved', "Close Saved")
314 315 316 317 318 319 320 321 322 323 324 325 326 327
	}
});

MenuRegistry.appendMenuItem(MenuId.OpenEditorsContext, {
	group: '4_close',
	order: 40,
	command: {
		id: CLOSE_EDITORS_IN_GROUP_COMMAND_ID,
		title: nls.localize('closeAll', "Close All")
	}
});

// Menu registration - explorer

I
isidor 已提交
328
MenuRegistry.appendMenuItem(MenuId.ExplorerContext, {
I
isidor 已提交
329
	group: 'navigation',
I
isidor 已提交
330 331 332 333 334
	order: 4,
	command: {
		id: NEW_FILE_COMMAND_ID,
		title: NEW_FILE_LABEL
	},
I
isidor 已提交
335
	when: ExplorerFolderContext
I
isidor 已提交
336 337 338
});

MenuRegistry.appendMenuItem(MenuId.ExplorerContext, {
I
isidor 已提交
339
	group: 'navigation',
I
isidor 已提交
340 341 342 343 344
	order: 6,
	command: {
		id: NEW_FOLDER_COMMAND_ID,
		title: NEW_FOLDER_LABEL
	},
I
isidor 已提交
345
	when: ExplorerFolderContext
I
isidor 已提交
346 347
});

348
MenuRegistry.appendMenuItem(MenuId.ExplorerContext, {
I
isidor 已提交
349
	group: 'navigation',
350 351
	order: 10,
	command: openToSideCommand,
352
	when: ContextKeyExpr.and(ExplorerFolderContext.toNegated(), ResourceContextKey.HasResource)
353 354 355
});

MenuRegistry.appendMenuItem(MenuId.ExplorerContext, {
I
isidor 已提交
356
	group: 'navigation',
357 358
	order: 20,
	command: revealInOsCommand,
B
Benjamin Pasero 已提交
359
	when: ResourceContextKey.Scheme.isEqualTo(Schemas.file)
360 361 362 363 364 365
});

MenuRegistry.appendMenuItem(MenuId.ExplorerContext, {
	group: '3_compare',
	order: 20,
	command: compareResourceCommand,
I
isidor 已提交
366
	when: ContextKeyExpr.and(ExplorerFolderContext.toNegated(), ResourceContextKey.IsFile, ResourceSelectedForCompareContext, WorkbenchListDoubleSelection.toNegated())
367 368 369 370 371 372
});

MenuRegistry.appendMenuItem(MenuId.ExplorerContext, {
	group: '3_compare',
	order: 30,
	command: selectForCompareCommand,
I
isidor 已提交
373 374 375 376 377 378
	when: ContextKeyExpr.and(ExplorerFolderContext.toNegated(), ResourceContextKey.IsFile, WorkbenchListDoubleSelection.toNegated())
});

MenuRegistry.appendMenuItem(MenuId.ExplorerContext, {
	group: '3_compare',
	order: 30,
I
isidor 已提交
379
	command: compareSelectedCommand,
I
isidor 已提交
380
	when: ContextKeyExpr.and(ExplorerFolderContext.toNegated(), ResourceContextKey.IsFile, WorkbenchListDoubleSelection)
381
});
I
isidor 已提交
382

I
isidor 已提交
383
MenuRegistry.appendMenuItem(MenuId.ExplorerContext, {
I
isidor 已提交
384
	group: '5_cutcopypaste',
I
isidor 已提交
385 386 387 388 389 390 391 392 393
	order: 10,
	command: {
		id: COPY_FILE_ID,
		title: COPY_FILE_LABEL
	},
	when: ExplorerRootContext.toNegated()
});

MenuRegistry.appendMenuItem(MenuId.ExplorerContext, {
I
isidor 已提交
394
	group: '5_cutcopypaste',
I
isidor 已提交
395 396 397
	order: 20,
	command: {
		id: PASTE_FILE_ID,
398 399
		title: PASTE_FILE_LABEL,
		precondition: FileCopiedContext
I
isidor 已提交
400
	},
401
	when: ExplorerFolderContext
I
isidor 已提交
402 403 404
});

MenuRegistry.appendMenuItem(MenuId.ExplorerContext, {
I
isidor 已提交
405
	group: '5_cutcopypaste',
I
isidor 已提交
406 407
	order: 30,
	command: copyPathCommand,
408
	when: ResourceContextKey.IsFile
I
isidor 已提交
409 410
});

I
isidor 已提交
411 412 413 414 415 416 417 418 419
MenuRegistry.appendMenuItem(MenuId.ExplorerContext, {
	group: '2_workspace',
	order: 10,
	command: {
		id: ADD_ROOT_FOLDER_COMMAND_ID,
		title: ADD_ROOT_FOLDER_LABEL
	},
	when: ExplorerRootContext
});
I
isidor 已提交
420 421 422 423 424 425 426 427 428 429

MenuRegistry.appendMenuItem(MenuId.ExplorerContext, {
	group: '2_workspace',
	order: 20,
	command: {
		id: OPEN_FOLDER_SETTINGS_COMMAND,
		title: OPEN_FOLDER_SETTINGS_LABEL
	},
	when: ContextKeyExpr.and(ExplorerRootContext, ExplorerFolderContext)
});
I
isidor 已提交
430 431 432 433 434 435 436 437 438 439

MenuRegistry.appendMenuItem(MenuId.ExplorerContext, {
	group: '2_workspace',
	order: 30,
	command: {
		id: REMOVE_ROOT_FOLDER_COMMAND_ID,
		title: REMOVE_ROOT_FOLDER_LABEL
	},
	when: ContextKeyExpr.and(ExplorerRootContext, ExplorerFolderContext)
});
I
isidor 已提交
440 441

MenuRegistry.appendMenuItem(MenuId.ExplorerContext, {
I
isidor 已提交
442
	group: '7_modification',
I
isidor 已提交
443 444
	order: 10,
	command: {
I
isidor 已提交
445
		id: RENAME_ID,
I
isidor 已提交
446 447 448 449
		title: TRIGGER_RENAME_LABEL
	},
	when: ExplorerRootContext.toNegated()
});
I
isidor 已提交
450 451

MenuRegistry.appendMenuItem(MenuId.ExplorerContext, {
I
isidor 已提交
452
	group: '7_modification',
I
isidor 已提交
453 454 455 456 457
	order: 20,
	command: {
		id: MOVE_FILE_TO_TRASH_ID,
		title: MOVE_FILE_TO_TRASH_LABEL
	},
458 459
	alt: {
		id: DELETE_FILE_ID,
460
		title: nls.localize('deleteFile', "Delete Permanently")
461
	},
I
isidor 已提交
462 463
	when: ExplorerRootContext.toNegated()
});
464 465 466 467

// Empty Editor Group Context Menu
MenuRegistry.appendMenuItem(MenuId.EmptyEditorGroupContext, { command: { id: 'workbench.action.files.newUntitledFile', title: nls.localize('newFile', "New File") }, group: '1_file', order: 10 });
MenuRegistry.appendMenuItem(MenuId.EmptyEditorGroupContext, { command: { id: 'workbench.action.quickOpen', title: nls.localize('openFile', "Open File...") }, group: '1_file', order: 20 });