-
Notifications
You must be signed in to change notification settings - Fork 2.5k
/
quick-command-frontend-contribution.ts
84 lines (78 loc) · 3.45 KB
/
quick-command-frontend-contribution.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
// *****************************************************************************
// Copyright (C) 2017 TypeFox and others.
//
// This program and the accompanying materials are made available under the
// terms of the Eclipse Public License v. 2.0 which is available at
// http://www.eclipse.org/legal/epl-2.0.
//
// This Source Code may also be made available under the following Secondary
// Licenses when the conditions for such availability set forth in the Eclipse
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
// with the GNU Classpath Exception which is available at
// https://www.gnu.org/software/classpath/license.html.
//
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
// *****************************************************************************
import { injectable, inject, optional } from 'inversify';
import { CommandRegistry, CommandContribution, MenuContribution, MenuModelRegistry, nls } from '../../common';
import { KeybindingRegistry, KeybindingContribution } from '../keybinding';
import { CommonMenus } from '../common-frontend-contribution';
import { CLOSE_QUICK_OPEN, CLEAR_COMMAND_HISTORY, quickCommand, QuickCommandService } from './quick-command-service';
import { QuickInputService } from './quick-input-service';
import { ConfirmDialog, Dialog } from '../dialogs';
@injectable()
export class QuickCommandFrontendContribution implements CommandContribution, KeybindingContribution, MenuContribution {
@inject(QuickInputService) @optional()
protected readonly quickInputService: QuickInputService;
@inject(QuickCommandService) @optional()
protected readonly quickCommandService: QuickCommandService;
registerCommands(commands: CommandRegistry): void {
commands.registerCommand(quickCommand, {
execute: () => {
this.quickInputService?.open('>');
}
});
commands.registerCommand(CLEAR_COMMAND_HISTORY, {
execute: async () => {
const shouldClear = await new ConfirmDialog({
title: nls.localizeByDefault('Clear Command History'),
msg: nls.localizeByDefault('Do you want to clear the history of recently used commands?'),
ok: nls.localizeByDefault('Clear'),
cancel: Dialog.CANCEL,
}).open();
if (shouldClear) {
commands.clearCommandHistory();
}
}
});
commands.registerCommand(CLOSE_QUICK_OPEN, {
execute: () => this.quickInputService?.hide()
});
}
registerMenus(menus: MenuModelRegistry): void {
menus.registerMenuAction(CommonMenus.VIEW_PRIMARY, {
commandId: quickCommand.id,
label: nls.localizeByDefault('Command Palette...')
});
}
registerKeybindings(keybindings: KeybindingRegistry): void {
keybindings.registerKeybinding({
command: quickCommand.id,
keybinding: 'f1'
});
keybindings.registerKeybinding({
command: quickCommand.id,
keybinding: 'ctrlcmd+shift+p'
});
keybindings.registerKeybinding({
command: CLOSE_QUICK_OPEN.id,
keybinding: 'esc',
when: 'inQuickOpen'
});
keybindings.registerKeybinding({
command: CLOSE_QUICK_OPEN.id,
keybinding: 'shift+esc',
when: 'inQuickOpen'
});
}
}