(function registerDeveloperActions(): void { const developerCategory = nls.localize('developer', "Developer"); registry.registerWorkbenchAction(new SyncActionDescriptor(ToggleSharedProcessAction, ToggleSharedProcessAction.ID, ToggleSharedProcessAction.LABEL), 'Developer: Toggle Shared Process', developerCategory); registry.registerWorkbenchAction(new SyncActionDescriptor(InspectContextKeysAction, InspectContextKeysAction.ID, InspectContextKeysAction.LABEL), 'Developer: Inspect Context Keys', developerCategory); registry.registerWorkbenchAction(new SyncActionDescriptor(ToggleScreencastModeAction, ToggleScreencastModeAction.ID, ToggleScreencastModeAction.LABEL), 'Developer: Toggle Mouse Clicks', developerCategory); registry.registerWorkbenchAction(new SyncActionDescriptor(ReloadWindowWithExtensionsDisabledAction, ReloadWindowWithExtensionsDisabledAction.ID, ReloadWindowWithExtensionsDisabledAction.LABEL), 'Developer: Reload Window Without Extensions', developerCategory); registry.registerWorkbenchAction(new SyncActionDescriptor(LogStorageAction, LogStorageAction.ID, LogStorageAction.LABEL), 'Developer: Log Storage', developerCategory); registry.registerWorkbenchAction(new SyncActionDescriptor(ReloadWindowAction, ReloadWindowAction.ID, ReloadWindowAction.LABEL), 'Developer: Reload Window', developerCategory); registry.registerWorkbenchAction(new SyncActionDescriptor(ToggleDevToolsAction, ToggleDevToolsAction.ID, ToggleDevToolsAction.LABEL), 'Developer: Toggle Developer Tools', developerCategory); KeybindingsRegistry.registerKeybindingRule({ id: ReloadWindowAction.ID, weight: KeybindingWeight.WorkbenchContrib + 50, when: IsDevelopmentContext, primary: KeyMod.CtrlCmd | KeyCode.KEY_R }); KeybindingsRegistry.registerKeybindingRule({ id: ToggleDevToolsAction.ID, weight: KeybindingWeight.WorkbenchContrib + 50, when: IsDevelopmentContext, primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KEY_I, mac: { primary: KeyMod.CtrlCmd | KeyMod.Alt | KeyCode.KEY_I } }); })();
(function registerWindowActions(): void { registry.registerWorkbenchAction(new SyncActionDescriptor(NewWindowAction, NewWindowAction.ID, NewWindowAction.LABEL, { primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KEY_N }), 'New Window'); registry.registerWorkbenchAction(new SyncActionDescriptor(CloseCurrentWindowAction, CloseCurrentWindowAction.ID, CloseCurrentWindowAction.LABEL, { primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KEY_W }), 'Close Window'); registry.registerWorkbenchAction(new SyncActionDescriptor(SwitchWindow, SwitchWindow.ID, SwitchWindow.LABEL, { primary: 0, mac: { primary: KeyMod.WinCtrl | KeyCode.KEY_W } }), 'Switch Window...'); registry.registerWorkbenchAction(new SyncActionDescriptor(QuickSwitchWindow, QuickSwitchWindow.ID, QuickSwitchWindow.LABEL), 'Quick Switch Window...'); KeybindingsRegistry.registerCommandAndKeybindingRule({ id: 'workbench.action.closeWindow', // close the window when the last editor is closed by reusing the same keybinding weight: KeybindingWeight.WorkbenchContrib, when: ContextKeyExpr.and(NoEditorsVisibleContext, SingleEditorGroupsContext), primary: KeyMod.CtrlCmd | KeyCode.KEY_W, handler: accessor => { const windowService = accessor.get(IWindowService); windowService.closeWindow(); } }); KeybindingsRegistry.registerCommandAndKeybindingRule({ id: 'workbench.action.quit', weight: KeybindingWeight.WorkbenchContrib, handler(accessor: ServicesAccessor) { const windowsService = accessor.get(IWindowsService); windowsService.quit(); }, when: undefined, mac: { primary: KeyMod.CtrlCmd | KeyCode.KEY_Q }, linux: { primary: KeyMod.CtrlCmd | KeyCode.KEY_Q } }); })();
function registerMenubarCommands() { KeybindingsRegistry.registerCommandAndKeybindingRule({ id: FILE_MENU_FAKE_OPEN_FILE_COMMAND_ID, weight: KeybindingsRegistry.WEIGHT.workbenchContrib(), when: void 0, primary: KeyMod.CtrlCmd | KeyCode.F6, win: { primary: KeyMod.CtrlCmd | KeyCode.F6 }, handler: (accessor, resource: URI | object) => { alert('fake open successful'); console.log('fake open triggered'); } }); }
(function registerFileActions(): void { const fileCategory = nls.localize('file', "File"); if (isMacintosh) { registry.registerWorkbenchAction(new SyncActionDescriptor(OpenFileFolderAction, OpenFileFolderAction.ID, OpenFileFolderAction.LABEL, { primary: KeyMod.CtrlCmd | KeyCode.KEY_O }), 'File: Open...', fileCategory); registry.registerWorkbenchAction(new SyncActionDescriptor(OpenLocalFileFolderAction, OpenLocalFileFolderAction.ID, OpenLocalFileFolderAction.LABEL, { primary: KeyMod.CtrlCmd | KeyCode.KEY_O }, RemoteFileDialogContext), 'File: Open Local...', fileCategory, RemoteFileDialogContext); } else { registry.registerWorkbenchAction(new SyncActionDescriptor(OpenFileAction, OpenFileAction.ID, OpenFileAction.LABEL, { primary: KeyMod.CtrlCmd | KeyCode.KEY_O }), 'File: Open File...', fileCategory); registry.registerWorkbenchAction(new SyncActionDescriptor(OpenFolderAction, OpenFolderAction.ID, OpenFolderAction.LABEL, { primary: KeyChord(KeyMod.CtrlCmd | KeyCode.KEY_K, KeyMod.CtrlCmd | KeyCode.KEY_O) }), 'File: Open Folder...', fileCategory); registry.registerWorkbenchAction(new SyncActionDescriptor(OpenLocalFileAction, OpenLocalFileAction.ID, OpenLocalFileAction.LABEL, { primary: KeyMod.CtrlCmd | KeyCode.KEY_O }, RemoteFileDialogContext), 'File: Open Local File...', fileCategory, RemoteFileDialogContext); registry.registerWorkbenchAction(new SyncActionDescriptor(OpenLocalFolderAction, OpenLocalFolderAction.ID, OpenLocalFolderAction.LABEL, { primary: KeyChord(KeyMod.CtrlCmd | KeyCode.KEY_K, KeyMod.CtrlCmd | KeyCode.KEY_O) }, RemoteFileDialogContext), 'File: Open Local Folder...', fileCategory, RemoteFileDialogContext); } registry.registerWorkbenchAction(new SyncActionDescriptor(QuickOpenRecentAction, QuickOpenRecentAction.ID, QuickOpenRecentAction.LABEL), 'File: Quick Open Recent...', fileCategory); registry.registerWorkbenchAction(new SyncActionDescriptor(OpenRecentAction, OpenRecentAction.ID, OpenRecentAction.LABEL, { primary: KeyMod.CtrlCmd | KeyCode.KEY_R, mac: { primary: KeyMod.WinCtrl | KeyCode.KEY_R } }), 'File: Open Recent...', fileCategory); registry.registerWorkbenchAction(new SyncActionDescriptor(CloseWorkspaceAction, CloseWorkspaceAction.ID, CloseWorkspaceAction.LABEL, { primary: KeyChord(KeyMod.CtrlCmd | KeyCode.KEY_K, KeyCode.KEY_F) }), 'File: Close Workspace', fileCategory); const recentFilesPickerContext = ContextKeyExpr.and(inQuickOpenContext, ContextKeyExpr.has(inRecentFilesPickerContextKey)); const quickOpenNavigateNextInRecentFilesPickerId = 'workbench.action.quickOpenNavigateNextInRecentFilesPicker'; KeybindingsRegistry.registerCommandAndKeybindingRule({ id: quickOpenNavigateNextInRecentFilesPickerId, weight: KeybindingWeight.WorkbenchContrib + 50, handler: getQuickNavigateHandler(quickOpenNavigateNextInRecentFilesPickerId, true), when: recentFilesPickerContext, primary: KeyMod.CtrlCmd | KeyCode.KEY_R, mac: { primary: KeyMod.WinCtrl | KeyCode.KEY_R } }); const quickOpenNavigatePreviousInRecentFilesPicker = 'workbench.action.quickOpenNavigatePreviousInRecentFilesPicker'; KeybindingsRegistry.registerCommandAndKeybindingRule({ id: quickOpenNavigatePreviousInRecentFilesPicker, weight: KeybindingWeight.WorkbenchContrib + 50, handler: getQuickNavigateHandler(quickOpenNavigatePreviousInRecentFilesPicker, false), when: recentFilesPickerContext, primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KEY_R, mac: { primary: KeyMod.WinCtrl | KeyMod.Shift | KeyCode.KEY_R } }); })();
private _registerWorkbenchCommandFromAction(descriptor: SyncActionDescriptor, alias: string, category?: string): IDisposable { let registrations: IDisposable[] = []; // command registrations.push(CommandsRegistry.registerCommand(descriptor.id, this._createCommandHandler(descriptor))); // keybinding const when = descriptor.keybindingContext; const weight = (typeof descriptor.keybindingWeight === 'undefined' ? KeybindingsRegistry.WEIGHT.workbenchContrib() : descriptor.keybindingWeight); const keybindings = descriptor.keybindings; KeybindingsRegistry.registerKeybindingRule({ id: descriptor.id, weight: weight, when: when, primary: keybindings && keybindings.primary, secondary: keybindings && keybindings.secondary, win: keybindings && keybindings.win, mac: keybindings && keybindings.mac, linux: keybindings && keybindings.linux }); // menu item // TODO@Rob slightly weird if-check required because of // https://github.com/Microsoft/vscode/blob/master/src/vs/workbench/parts/search/electron-browser/search.contribution.ts#L266 if (descriptor.label) { let idx = alias.indexOf(': '); let categoryOriginal; if (idx > 0) { categoryOriginal = alias.substr(0, idx); alias = alias.substr(idx + 2); } const command = { id: descriptor.id, title: { value: descriptor.label, original: alias }, category: category && { value: category, original: categoryOriginal } }; MenuRegistry.addCommand(command); registrations.push(MenuRegistry.appendMenuItem(MenuId.CommandPalette, { command })); } // TODO@alex,joh // support removal of keybinding rule // support removal of command-ui return combinedDisposable(registrations); }
private registerWorkbenchCommandFromAction(descriptor: SyncActionDescriptor, alias: string, category?: string, when?: ContextKeyExpr): IDisposable { const registrations = new DisposableStore(); // command registrations.add(CommandsRegistry.registerCommand(descriptor.id, this.createCommandHandler(descriptor))); // keybinding const weight = (typeof descriptor.keybindingWeight === 'undefined' ? KeybindingWeight.WorkbenchContrib : descriptor.keybindingWeight); const keybindings = descriptor.keybindings; KeybindingsRegistry.registerKeybindingRule({ id: descriptor.id, weight: weight, when: (descriptor.keybindingContext || when ? ContextKeyExpr.and(descriptor.keybindingContext, when) : null), primary: keybindings ? keybindings.primary : 0, secondary: keybindings && keybindings.secondary, win: keybindings && keybindings.win, mac: keybindings && keybindings.mac, linux: keybindings && keybindings.linux }); // menu item // TODO@Rob slightly weird if-check required because of // https://github.com/Microsoft/vscode/blob/master/src/vs/workbench/contrib/search/electron-browser/search.contribution.ts#L266 if (descriptor.label) { let idx = alias.indexOf(': '); let categoryOriginal = ''; if (idx > 0) { categoryOriginal = alias.substr(0, idx); alias = alias.substr(idx + 2); } const command: ICommandAction = { id: descriptor.id, title: { value: descriptor.label, original: alias }, category: category ? { value: category, original: categoryOriginal } : undefined }; MenuRegistry.addCommand(command); registrations.add(MenuRegistry.appendMenuItem(MenuId.CommandPalette, { command, when })); } // TODO@alex,joh // support removal of keybinding rule // support removal of command-ui return registrations; }
function registerOpenTerminalAtIndexCommands(): void { for (let i = 0; i < 9; i++) { const terminalIndex = i; const visibleIndex = i + 1; KeybindingsRegistry.registerCommandAndKeybindingRule({ id: `workbench.action.terminal.focusAtIndex${visibleIndex}`, weight: KeybindingWeight.WorkbenchContrib, when: undefined, primary: 0, handler: accessor => { const terminalService = accessor.get(ITerminalService); terminalService.setActiveInstanceByIndex(terminalIndex); return terminalService.showPanel(true); } }); } }
function registerWorkbenchCommandFromAction(descriptor: SyncActionDescriptor): void { const when = descriptor.keybindingContext; const weight = (typeof descriptor.keybindingWeight === 'undefined' ? KeybindingsRegistry.WEIGHT.workbenchContrib() : descriptor.keybindingWeight); const keybindings = descriptor.keybindings; const desc: ICommandAndKeybindingRule = { id: descriptor.id, handler: createCommandHandler(descriptor), weight: weight, when: when, primary: keybindings && keybindings.primary, secondary: keybindings && keybindings.secondary, win: keybindings && keybindings.win, mac: keybindings && keybindings.mac, linux: keybindings && keybindings.linux }; KeybindingsRegistry.registerCommandAndKeybindingRule(desc); }
function registerAction(desc: IActionDescriptor) { const { id, handler, title, category, iconClass, f1, menu, keybinding } = desc; // 1) register as command CommandsRegistry.registerCommand(id, handler); // 2) command palette let command = { id, title, iconClass, category }; if (f1) { MenuRegistry.addCommand(command); } // 3) menus if (menu) { let { menuId, when, group } = menu; MenuRegistry.appendMenuItem(menuId, { command, when, group }); } // 4) keybindings if (keybinding) { let { when, weight, keys } = keybinding; KeybindingsRegistry.registerKeybindingRule({ id, when, weight, primary: keys.primary, secondary: keys.secondary, linux: keys.linux, mac: keys.mac, win: keys.win }); } }
private _handleKeybinding(isBuiltin: boolean, idx:number, keybindings:ContributedKeyBinding, collector:IMessageCollector): boolean { let rejects: string[] = []; let commandAdded = false; if (isValidContributedKeyBinding(keybindings, rejects)) { let rule = this._asCommandRule(isBuiltin, idx++, keybindings); if (rule) { KeybindingsRegistry.registerCommandRule(rule); commandAdded = true; } } if (rejects.length > 0) { collector.error(nls.localize( 'invalid.keybindings', "Invalid `contributes.{0}`: {1}", keybindingsExtPoint.name, rejects.join('\n') )); } return commandAdded; }