Add keymaps customization support

This commit is contained in:
Francesco Stasi 2021-03-17 10:04:46 +01:00 committed by Francesco Stasi
parent cdd5cfdfc1
commit 562b77aec3
9 changed files with 1050 additions and 860 deletions

View File

@ -23,6 +23,7 @@
"@theia/editor": "next", "@theia/editor": "next",
"@theia/filesystem": "next", "@theia/filesystem": "next",
"@theia/git": "next", "@theia/git": "next",
"@theia/keymaps": "next",
"@theia/markers": "next", "@theia/markers": "next",
"@theia/monaco": "next", "@theia/monaco": "next",
"@theia/navigator": "next", "@theia/navigator": "next",

View File

@ -24,6 +24,8 @@ import { ProblemContribution as TheiaProblemContribution } from '@theia/markers/
import { ProblemContribution } from './theia/markers/problem-contribution'; import { ProblemContribution } from './theia/markers/problem-contribution';
import { FileNavigatorContribution } from './theia/navigator/navigator-contribution'; import { FileNavigatorContribution } from './theia/navigator/navigator-contribution';
import { FileNavigatorContribution as TheiaFileNavigatorContribution } from '@theia/navigator/lib/browser/navigator-contribution'; import { FileNavigatorContribution as TheiaFileNavigatorContribution } from '@theia/navigator/lib/browser/navigator-contribution';
import { KeymapsFrontendContribution } from './theia/keymaps/keymaps-frontend-contribution';
import { KeymapsFrontendContribution as TheiaKeymapsFrontendContribution } from '@theia/keymaps/lib/browser/keymaps-frontend-contribution';
import { ArduinoToolbarContribution } from './toolbar/arduino-toolbar-contribution'; import { ArduinoToolbarContribution } from './toolbar/arduino-toolbar-contribution';
import { EditorContribution as TheiaEditorContribution } from '@theia/editor/lib/browser/editor-contribution'; import { EditorContribution as TheiaEditorContribution } from '@theia/editor/lib/browser/editor-contribution';
import { EditorContribution } from './theia/editor/editor-contribution'; import { EditorContribution } from './theia/editor/editor-contribution';
@ -279,6 +281,7 @@ export default new ContainerModule((bind, unbind, isBound, rebind) => {
rebind(TheiaOutlineViewContribution).to(OutlineViewContribution).inSingletonScope(); rebind(TheiaOutlineViewContribution).to(OutlineViewContribution).inSingletonScope();
rebind(TheiaProblemContribution).to(ProblemContribution).inSingletonScope(); rebind(TheiaProblemContribution).to(ProblemContribution).inSingletonScope();
rebind(TheiaFileNavigatorContribution).to(FileNavigatorContribution).inSingletonScope(); rebind(TheiaFileNavigatorContribution).to(FileNavigatorContribution).inSingletonScope();
rebind(TheiaKeymapsFrontendContribution).to(KeymapsFrontendContribution).inSingletonScope();
rebind(TheiaEditorContribution).to(EditorContribution).inSingletonScope(); rebind(TheiaEditorContribution).to(EditorContribution).inSingletonScope();
rebind(TheiaMonacoStatusBarContribution).to(MonacoStatusBarContribution).inSingletonScope(); rebind(TheiaMonacoStatusBarContribution).to(MonacoStatusBarContribution).inSingletonScope();
rebind(TheiaApplicationShell).to(ApplicationShell).inSingletonScope(); rebind(TheiaApplicationShell).to(ApplicationShell).inSingletonScope();

View File

@ -33,11 +33,12 @@ export class Settings extends SketchContribution {
} }
registerMenus(registry: MenuModelRegistry): void { registerMenus(registry: MenuModelRegistry): void {
registry.registerMenuAction(ArduinoMenus.FILE__SETTINGS_GROUP, { registry.registerMenuAction(ArduinoMenus.FILE__PREFERENCES_GROUP, {
commandId: Settings.Commands.OPEN.id, commandId: Settings.Commands.OPEN.id,
label: 'Preferences...', label: 'Preferences...',
order: '0' order: '0'
}); });
registry.registerSubmenu(ArduinoMenus.FILE__ADVANCED_SUBMENU, 'Advanced');
} }
registerKeybindings(registry: KeybindingRegistry): void { registerKeybindings(registry: KeybindingRegistry): void {

View File

@ -8,8 +8,12 @@ export namespace ArduinoMenus {
// -- File // -- File
export const FILE__SKETCH_GROUP = [...CommonMenus.FILE, '0_sketch']; export const FILE__SKETCH_GROUP = [...CommonMenus.FILE, '0_sketch'];
export const FILE__PRINT_GROUP = [...CommonMenus.FILE, '1_print']; export const FILE__PRINT_GROUP = [...CommonMenus.FILE, '1_print'];
// XXX: on macOS, the settings group is not under `File` // XXX: on macOS, the "Preferences" and "Advanced" group is not under `File`
export const FILE__SETTINGS_GROUP = [...(isOSX ? MAIN_MENU_BAR : CommonMenus.FILE), '2_settings']; // The empty path ensures no top level menu is created for the preferences, even if they contains sub menus
export const FILE__PREFERENCES_GROUP = [...(isOSX ? [''] : CommonMenus.FILE), '2_preferences'];
export const FILE__ADVANCED_GROUP = [...(isOSX ? [''] : CommonMenus.FILE), '3_advanced'];
export const FILE__ADVANCED_SUBMENU = [...FILE__ADVANCED_GROUP, '0_advanced_sub'];
export const FILE__QUIT_GROUP = [...CommonMenus.FILE, '3_quit']; export const FILE__QUIT_GROUP = [...CommonMenus.FILE, '3_quit'];
// -- File / Open Recent // -- File / Open Recent

View File

@ -0,0 +1,16 @@
import { injectable } from 'inversify';
import { MenuModelRegistry } from '@theia/core';
import { KeymapsFrontendContribution as TheiaKeymapsFrontendContribution, KeymapsCommands } from '@theia/keymaps/lib/browser/keymaps-frontend-contribution';
import { ArduinoMenus } from '../../menu/arduino-menus';
@injectable()
export class KeymapsFrontendContribution extends TheiaKeymapsFrontendContribution {
registerMenus(menus: MenuModelRegistry): void {
menus.registerMenuAction(ArduinoMenus.FILE__ADVANCED_SUBMENU, {
commandId: KeymapsCommands.OPEN_KEYMAPS.id,
label: 'Keyboard Shortcuts',
order: '1'
});
}
}

View File

@ -26,15 +26,17 @@ export class ElectronMainMenuFactory extends TheiaElectronMainMenuFactory {
const { submenu } = super.createOSXMenu(); const { submenu } = super.createOSXMenu();
const label = 'Arduino IDE'; const label = 'Arduino IDE';
if (!!submenu && !(submenu instanceof remote.Menu)) { if (!!submenu && !(submenu instanceof remote.Menu)) {
const [/* about */, /* settings */, ...rest] = submenu; const [/* about */, /* preferences */, ...rest] = submenu;
const about = this.fillMenuTemplate([], this.menuProvider.getMenu(ArduinoMenus.HELP__ABOUT_GROUP)); const about = this.fillMenuTemplate([], this.menuProvider.getMenu(ArduinoMenus.HELP__ABOUT_GROUP));
const settings = this.fillMenuTemplate([], this.menuProvider.getMenu(ArduinoMenus.FILE__SETTINGS_GROUP)); const preferences = this.fillMenuTemplate([], this.menuProvider.getMenu(ArduinoMenus.FILE__PREFERENCES_GROUP));
const advanced = this.fillMenuTemplate([], this.menuProvider.getMenu(ArduinoMenus.FILE__ADVANCED_GROUP));
return { return {
label, label,
submenu: [ submenu: [
...about, ...about,
{ type: 'separator' }, { type: 'separator' },
...settings, ...preferences,
...advanced,
{ type: 'separator' }, { type: 'separator' },
...rest ...rest
] ]

View File

@ -9,6 +9,7 @@
"@theia/editor": "next", "@theia/editor": "next",
"@theia/file-search": "next", "@theia/file-search": "next",
"@theia/filesystem": "next", "@theia/filesystem": "next",
"@theia/keymaps": "next",
"@theia/messages": "next", "@theia/messages": "next",
"@theia/monaco": "next", "@theia/monaco": "next",
"@theia/navigator": "next", "@theia/navigator": "next",

View File

@ -11,6 +11,7 @@
"@theia/electron": "next", "@theia/electron": "next",
"@theia/file-search": "next", "@theia/file-search": "next",
"@theia/filesystem": "next", "@theia/filesystem": "next",
"@theia/keymaps": "next",
"@theia/messages": "next", "@theia/messages": "next",
"@theia/monaco": "next", "@theia/monaco": "next",
"@theia/navigator": "next", "@theia/navigator": "next",

1869
yarn.lock

File diff suppressed because it is too large Load Diff