Skip to content

Commit b8bd444

Browse files
committed
Updated keybindings (arduino/arduino-pro-ide#17), restore Output view on Verify / Upload
1 parent b8fdb03 commit b8bd444

File tree

4 files changed

+54
-48
lines changed

4 files changed

+54
-48
lines changed

arduino-ide-extension/src/browser/arduino-frontend-contribution.tsx

+39-45
Original file line numberDiff line numberDiff line change
@@ -9,29 +9,19 @@ import { BoardsService } from '../common/protocol/boards-service';
99
import { ArduinoCommands } from './arduino-commands';
1010
import { CoreService } from '../common/protocol/core-service';
1111
import { WorkspaceServiceExt } from './workspace-service-ext';
12-
import { ToolOutputServiceClient } from '../common/protocol/tool-output-service';
13-
import { QuickPickService } from '@theia/core/lib/common/quick-pick-service';
14-
import { BoardsListWidgetFrontendContribution } from './boards/boards-widget-frontend-contribution';
1512
import { BoardsServiceClientImpl } from './boards/boards-service-client-impl';
1613
import { WorkspaceRootUriAwareCommandHandler, WorkspaceCommands } from '@theia/workspace/lib/browser/workspace-commands';
1714
import { SelectionService, MenuContribution, MenuModelRegistry, MAIN_MENU_BAR, MenuPath } from '@theia/core';
1815
import { ArduinoToolbar } from './toolbar/arduino-toolbar';
1916
import { EditorManager, EditorMainMenu } from '@theia/editor/lib/browser';
2017
import {
21-
ContextMenuRenderer,
22-
OpenerService,
23-
Widget,
24-
StatusBar,
25-
StatusBarAlignment,
26-
QuickOpenService,
27-
ApplicationShell,
28-
FrontendApplicationContribution,
29-
FrontendApplication
18+
ContextMenuRenderer, Widget, StatusBar, StatusBarAlignment, FrontendApplicationContribution,
19+
FrontendApplication, KeybindingContribution, KeybindingRegistry
3020
} from '@theia/core/lib/browser';
3121
import { OpenFileDialogProps, FileDialogService } from '@theia/filesystem/lib/browser/file-dialog';
3222
import { FileSystem, FileStat } from '@theia/filesystem/lib/common';
3323
import { Sketch, SketchesService } from '../common/protocol/sketches-service';
34-
import { WindowService } from '@theia/core/lib/browser/window/window-service';
24+
import { ToolOutputServiceClient } from '../common/protocol/tool-output-service';
3525
import { CommonCommands, CommonMenus } from '@theia/core/lib/browser/common-frontend-contribution';
3626
import { FileSystemCommands } from '@theia/filesystem/lib/browser/filesystem-frontend-contribution';
3727
import { FileDownloadCommands } from '@theia/filesystem/lib/browser/download/file-download-command-contribution';
@@ -41,17 +31,16 @@ import { MaybePromise } from '@theia/core/lib/common/types';
4131
import { BoardsConfigDialog } from './boards/boards-config-dialog';
4232
import { BoardsToolBarItem } from './boards/boards-toolbar-item';
4333
import { BoardsConfig } from './boards/boards-config';
44-
import { ConfigService } from '../common/protocol/config-service';
4534
import { MonitorConnection } from './monitor/monitor-connection';
4635
import { MonitorViewContribution } from './monitor/monitor-view-contribution';
4736
import { ArduinoWorkspaceService } from './arduino-workspace-service';
4837
import { FileNavigatorContribution } from '@theia/navigator/lib/browser/navigator-contribution';
38+
import { OutputContribution } from '@theia/output/lib/browser/output-contribution';
4939
import { OutlineViewContribution } from '@theia/outline-view/lib/browser/outline-view-contribution';
5040
import { ProblemContribution } from '@theia/markers/lib/browser/problem/problem-contribution';
5141
import { ScmContribution } from '@theia/scm/lib/browser/scm-contribution';
5242
import { SearchInWorkspaceFrontendContribution } from '@theia/search-in-workspace/lib/browser/search-in-workspace-frontend-contribution';
5343
import { FileNavigatorCommands } from '@theia/navigator/lib/browser/navigator-contribution';
54-
import { ArduinoShellLayoutRestorer } from './shell/arduino-shell-layout-restorer';
5544
import { EditorMode } from './editor-mode';
5645

5746
export namespace ArduinoMenus {
@@ -67,7 +56,8 @@ export namespace ArduinoToolbarContextMenu {
6756
}
6857

6958
@injectable()
70-
export class ArduinoFrontendContribution implements FrontendApplicationContribution, TabBarToolbarContribution, CommandContribution, MenuContribution {
59+
export class ArduinoFrontendContribution implements FrontendApplicationContribution,
60+
TabBarToolbarContribution, CommandContribution, MenuContribution, KeybindingContribution {
7161

7262
@inject(MessageService)
7363
protected readonly messageService: MessageService;
@@ -84,12 +74,6 @@ export class ArduinoFrontendContribution implements FrontendApplicationContribut
8474
@inject(ToolOutputServiceClient)
8575
protected readonly toolOutputServiceClient: ToolOutputServiceClient;
8676

87-
@inject(QuickPickService)
88-
protected readonly quickPickService: QuickPickService;
89-
90-
@inject(BoardsListWidgetFrontendContribution)
91-
protected readonly boardsListWidgetFrontendContribution: BoardsListWidgetFrontendContribution;
92-
9377
@inject(BoardsServiceClientImpl)
9478
protected readonly boardsServiceClient: BoardsServiceClientImpl;
9579

@@ -108,12 +92,6 @@ export class ArduinoFrontendContribution implements FrontendApplicationContribut
10892
@inject(FileSystem)
10993
protected readonly fileSystem: FileSystem;
11094

111-
@inject(OpenerService)
112-
protected readonly openerService: OpenerService;
113-
114-
@inject(WindowService)
115-
protected readonly windowService: WindowService;
116-
11795
@inject(SketchesService)
11896
protected readonly sketchService: SketchesService;
11997

@@ -129,27 +107,18 @@ export class ArduinoFrontendContribution implements FrontendApplicationContribut
129107
@inject(StatusBar)
130108
protected readonly statusBar: StatusBar;
131109

132-
@inject(ArduinoShellLayoutRestorer)
133-
protected readonly layoutRestorer: ArduinoShellLayoutRestorer;
134-
135-
@inject(QuickOpenService)
136-
protected readonly quickOpenService: QuickOpenService;
137-
138110
@inject(ArduinoWorkspaceService)
139111
protected readonly workspaceService: ArduinoWorkspaceService;
140112

141-
@inject(ConfigService)
142-
protected readonly configService: ConfigService;
143-
144113
@inject(MonitorConnection)
145114
protected readonly monitorConnection: MonitorConnection;
146115

147-
@inject(ApplicationShell)
148-
protected readonly shell: ApplicationShell;
149-
150116
@inject(FileNavigatorContribution)
151117
protected readonly fileNavigatorContributions: FileNavigatorContribution;
152118

119+
@inject(OutputContribution)
120+
protected readonly outputContribution: OutputContribution;
121+
153122
@inject(OutlineViewContribution)
154123
protected readonly outlineContribution: OutlineViewContribution;
155124

@@ -195,6 +164,7 @@ export class ArduinoFrontendContribution implements FrontendApplicationContribut
195164
// Initialize all `pro-mode` widgets. This is a NOOP if in normal mode.
196165
for (const viewContribution of [
197166
this.fileNavigatorContributions,
167+
this.outputContribution,
198168
this.outlineContribution,
199169
this.problemContribution,
200170
this.scmContribution,
@@ -255,6 +225,7 @@ export class ArduinoFrontendContribution implements FrontendApplicationContribut
255225
registerCommands(registry: CommandRegistry): void {
256226
// TODO: use proper API https://github.com/eclipse-theia/theia/pull/6599
257227
const allHandlers: { [id: string]: CommandHandler[] } = (registry as any)._handlers;
228+
258229
// Make sure to reveal the `Explorer` before executing `New File` and `New Folder`.
259230
for (const command of [WorkspaceCommands.NEW_FILE, WorkspaceCommands.NEW_FOLDER]) {
260231
const { id } = command;
@@ -311,12 +282,15 @@ export class ArduinoFrontendContribution implements FrontendApplicationContribut
311282
if (!boardsConfig.selectedBoard.fqbn) {
312283
throw new Error(`No core is installed for ${boardsConfig.selectedBoard.name}. Please install the board.`);
313284
}
285+
// Reveal the Output view asynchronously (don't await it)
286+
this.outputContribution.openView({ reveal: true });
314287
await this.coreService.compile({ uri: uri.toString(), board: boardsConfig.selectedBoard });
315288
} catch (e) {
316289
await this.messageService.error(e.toString());
317290
}
318291
}
319292
});
293+
320294
registry.registerCommand(ArduinoCommands.UPLOAD, {
321295
isVisible: widget => ArduinoToolbar.is(widget) && widget.side === 'left',
322296
isEnabled: widget => true,
@@ -345,6 +319,8 @@ export class ArduinoFrontendContribution implements FrontendApplicationContribut
345319
if (!selectedPort) {
346320
throw new Error('No ports selected. Please select a port.');
347321
}
322+
// Reveal the Output view asynchronously (don't await it)
323+
this.outputContribution.openView({ reveal: true });
348324
await this.coreService.upload({ uri: uri.toString(), board: boardsConfig.selectedBoard, port: selectedPort.address });
349325
} catch (e) {
350326
await this.messageService.error(e.toString());
@@ -355,6 +331,7 @@ export class ArduinoFrontendContribution implements FrontendApplicationContribut
355331
}
356332
}
357333
});
334+
358335
registry.registerCommand(ArduinoCommands.SHOW_OPEN_CONTEXT_MENU, {
359336
isVisible: widget => ArduinoToolbar.is(widget) && widget.side === 'left',
360337
isEnabled: widget => ArduinoToolbar.is(widget) && widget.side === 'left',
@@ -372,23 +349,27 @@ export class ArduinoFrontendContribution implements FrontendApplicationContribut
372349
}
373350
}
374351
});
352+
375353
registry.registerCommand(ArduinoCommands.OPEN_FILE_NAVIGATOR, {
376354
isEnabled: () => true,
377355
execute: () => this.doOpenFile()
378-
})
356+
});
357+
379358
registry.registerCommand(ArduinoCommands.OPEN_SKETCH, {
380359
isEnabled: () => true,
381360
execute: async (sketch: Sketch) => {
382361
this.workspaceService.open(new URI(sketch.uri));
383362
}
384-
})
363+
});
364+
385365
registry.registerCommand(ArduinoCommands.SAVE_SKETCH, {
386366
isEnabled: widget => ArduinoToolbar.is(widget) && widget.side === 'left',
387367
isVisible: widget => ArduinoToolbar.is(widget) && widget.side === 'left',
388368
execute: async (sketch: Sketch) => {
389369
registry.executeCommand(CommonCommands.SAVE_ALL.id);
390370
}
391-
})
371+
});
372+
392373
registry.registerCommand(ArduinoCommands.NEW_SKETCH, new WorkspaceRootUriAwareCommandHandler(this.workspaceService, this.selectionService, {
393374
execute: async uri => {
394375
try {
@@ -404,6 +385,7 @@ export class ArduinoFrontendContribution implements FrontendApplicationContribut
404385
}
405386
}
406387
}));
388+
407389
registry.registerCommand(ArduinoCommands.OPEN_BOARDS_DIALOG, {
408390
isEnabled: () => true,
409391
execute: async () => {
@@ -412,12 +394,13 @@ export class ArduinoFrontendContribution implements FrontendApplicationContribut
412394
this.boardsServiceClient.boardsConfig = boardsConfig;
413395
}
414396
}
415-
})
397+
});
398+
416399
registry.registerCommand(ArduinoCommands.TOGGLE_ADVANCED_MODE, {
417400
execute: () => this.editorMode.toggle(),
418401
isVisible: widget => ArduinoToolbar.is(widget) && widget.side === 'right',
419402
isToggled: () => this.editorMode.proMode
420-
})
403+
});
421404
}
422405

423406
registerMenus(registry: MenuModelRegistry) {
@@ -485,6 +468,17 @@ export class ArduinoFrontendContribution implements FrontendApplicationContribut
485468
return menuId;
486469
}
487470

471+
registerKeybindings(keybindings: KeybindingRegistry): void {
472+
keybindings.registerKeybinding({
473+
command: ArduinoCommands.VERIFY.id,
474+
keybinding: 'ctrlcmd+alt+v'
475+
});
476+
keybindings.registerKeybinding({
477+
command: ArduinoCommands.UPLOAD.id,
478+
keybinding: 'ctrlcmd+alt+u'
479+
});
480+
}
481+
488482
protected async registerSketchesInMenu(registry: MenuModelRegistry): Promise<void> {
489483
this.sketchService.getSketches().then(sketches => {
490484
this.wsSketchCount = sketches.length;

arduino-ide-extension/src/browser/arduino-frontend-module.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ import { WorkspaceService } from '@theia/workspace/lib/browser/workspace-service
2828
import { ArduinoWorkspaceService } from './arduino-workspace-service';
2929
import { ThemeService } from '@theia/core/lib/browser/theming';
3030
import { ArduinoTheme } from './arduino-theme';
31-
import { MenuContribution } from '@theia/core';
3231
import { OutlineViewContribution } from '@theia/outline-view/lib/browser/outline-view-contribution';
3332
import { ArduinoOutlineViewContribution } from './customization/arduino-outline-contribution';
3433
import { ProblemContribution } from '@theia/markers/lib/browser/problem/problem-contribution';
@@ -42,7 +41,8 @@ import { EditorContribution } from '@theia/editor/lib/browser/editor-contributio
4241
import { ArduinoEditorContribution } from './customization/arduino-editor-contribution';
4342
import { MonacoStatusBarContribution } from '@theia/monaco/lib/browser/monaco-status-bar-contribution';
4443
import { ArduinoMonacoStatusBarContribution } from './customization/arduino-monaco-status-bar-contribution';
45-
import { ApplicationShell, ShellLayoutRestorer } from '@theia/core/lib/browser';
44+
import { ApplicationShell, ShellLayoutRestorer, KeybindingContribution } from '@theia/core/lib/browser';
45+
import { MenuContribution } from '@theia/core/lib/common/menu';
4646
import { ArduinoApplicationShell } from './customization/arduino-application-shell';
4747
import { ArduinoFrontendApplication } from './customization/arduino-frontend-application';
4848
import { BoardsConfigDialog, BoardsConfigDialogProps } from './boards/boards-config-dialog';
@@ -71,6 +71,7 @@ import { ArduinoAboutDialog } from './customization/arduino-about-dialog';
7171
import { ArduinoShellLayoutRestorer } from './shell/arduino-shell-layout-restorer';
7272
import { EditorMode } from './editor-mode';
7373
import { ListItemRenderer } from './components/component-list/list-item-renderer';
74+
7475
const ElementQueries = require('css-element-queries/src/ElementQueries');
7576

7677
export default new ContainerModule((bind: interfaces.Bind, unbind: interfaces.Unbind, isBound: interfaces.IsBound, rebind: interfaces.Rebind) => {
@@ -82,6 +83,7 @@ export default new ContainerModule((bind: interfaces.Bind, unbind: interfaces.Un
8283
bind(CommandContribution).toService(ArduinoFrontendContribution);
8384
bind(MenuContribution).toService(ArduinoFrontendContribution);
8485
bind(TabBarToolbarContribution).toService(ArduinoFrontendContribution);
86+
bind(KeybindingContribution).toService(ArduinoFrontendContribution);
8587
bind(FrontendApplicationContribution).toService(ArduinoFrontendContribution);
8688

8789
bind(ArduinoToolbarContribution).toSelf().inSingletonScope();

arduino-ide-extension/src/browser/customization/arduino-problem-contribution.ts

+10
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { inject, injectable } from 'inversify';
2+
import { KeybindingRegistry } from '@theia/core/lib/browser';
23
import { ProblemStat } from '@theia/markers/lib/browser/problem/problem-manager';
34
import { FrontendApplication } from '@theia/core/lib/browser/frontend-application';
45
import { ProblemContribution } from '@theia/markers/lib/browser/problem/problem-contribution';
@@ -22,4 +23,13 @@ export class ArduinoProblemContribution extends ProblemContribution {
2223
}
2324
}
2425

26+
registerKeybindings(keybindings: KeybindingRegistry): void {
27+
if (this.toggleCommand) {
28+
keybindings.registerKeybinding({
29+
command: this.toggleCommand.id,
30+
keybinding: 'ctrlcmd+alt+shift+m'
31+
});
32+
}
33+
}
34+
2535
}

arduino-ide-extension/src/browser/monitor/monitor-view-contribution.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ export class MonitorViewContribution extends AbstractViewContribution<MonitorWid
4141
area: 'bottom'
4242
},
4343
toggleCommandId: MonitorViewContribution.OPEN_SERIAL_MONITOR,
44-
toggleKeybinding: 'ctrl+shift+m'
44+
toggleKeybinding: 'ctrlcmd+shift+m'
4545
})
4646
}
4747

0 commit comments

Comments
 (0)