diff --git a/src/vs/workbench/parts/preferences/browser/keybindingsEditor.ts b/src/vs/workbench/parts/preferences/browser/keybindingsEditor.ts index a3ad1d49643f138b5af6c8f4b76bea666499e73a..833035b4ff5f214ea117cf2ca6c52fd6c46dfc67 100644 --- a/src/vs/workbench/parts/preferences/browser/keybindingsEditor.ts +++ b/src/vs/workbench/parts/preferences/browser/keybindingsEditor.ts @@ -26,7 +26,7 @@ import { DefineKeybindingWidget, KeybindingsSearchWidget, KeybindingsSearchOptio import { IKeybindingsEditor, CONTEXT_KEYBINDING_FOCUS, CONTEXT_KEYBINDINGS_EDITOR, CONTEXT_KEYBINDINGS_SEARCH_FOCUS, KEYBINDINGS_EDITOR_COMMAND_REMOVE, KEYBINDINGS_EDITOR_COMMAND_COPY, KEYBINDINGS_EDITOR_COMMAND_RESET, KEYBINDINGS_EDITOR_COMMAND_COPY_COMMAND, KEYBINDINGS_EDITOR_COMMAND_DEFINE, KEYBINDINGS_EDITOR_COMMAND_SHOW_SIMILAR, - KEYBINDINGS_EDITOR_COMMAND_RECORD_SEARCH_KEYS, KEYBINDINGS_EDITOR_COMMAND_SORTBY_PRECEDENCE + KEYBINDINGS_EDITOR_COMMAND_RECORD_SEARCH_KEYS, KEYBINDINGS_EDITOR_COMMAND_SORTBY_PRECEDENCE, CONTEXT_KEYBINDINGS_SEARCH_VALUE } from 'vs/workbench/parts/preferences/common/preferences'; import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; import { IKeybindingEditingService } from 'vs/workbench/services/keybinding/common/keybindingEditing'; @@ -41,7 +41,6 @@ import { IEditorService } from 'vs/workbench/services/editor/common/editorServic import { EditorExtensionsRegistry } from 'vs/editor/browser/editorExtensions'; import { WorkbenchList } from 'vs/platform/list/browser/listService'; import { INotificationService } from 'vs/platform/notification/common/notification'; -import { IPreferencesService } from 'vs/workbench/services/preferences/common/preferences'; import { KeybindingsEditorInput } from 'vs/workbench/services/preferences/common/preferencesEditorInput'; import { CancellationToken } from 'vs/base/common/cancellation'; import { attachStylerCallback } from 'vs/platform/theme/common/styler'; @@ -72,6 +71,7 @@ export class KeybindingsEditor extends BaseEditor implements IKeybindingsEditor private keybindingsEditorContextKey: IContextKey; private keybindingFocusContextKey: IContextKey; private searchFocusContextKey: IContextKey; + private searchValueContextKey: IContextKey; private actionBar: ActionBar; private sortByPrecedenceAction: Action; @@ -84,7 +84,6 @@ export class KeybindingsEditor extends BaseEditor implements IKeybindingsEditor @IThemeService themeService: IThemeService, @IKeybindingService private keybindingsService: IKeybindingService, @IContextMenuService private contextMenuService: IContextMenuService, - @IPreferencesService private preferencesService: IPreferencesService, @IKeybindingEditingService private keybindingEditingService: IKeybindingEditingService, @IContextKeyService private contextKeyService: IContextKeyService, @INotificationService private notificationService: INotificationService, @@ -98,6 +97,7 @@ export class KeybindingsEditor extends BaseEditor implements IKeybindingsEditor this.keybindingsEditorContextKey = CONTEXT_KEYBINDINGS_EDITOR.bindTo(this.contextKeyService); this.searchFocusContextKey = CONTEXT_KEYBINDINGS_SEARCH_FOCUS.bindTo(this.contextKeyService); + this.searchValueContextKey = CONTEXT_KEYBINDINGS_SEARCH_VALUE.bindTo(this.contextKeyService); this.keybindingFocusContextKey = CONTEXT_KEYBINDING_FOCUS.bindTo(this.contextKeyService); this.delayedFilterLogging = new Delayer(1000); } @@ -288,7 +288,10 @@ export class KeybindingsEditor extends BaseEditor implements IKeybindingsEditor ariaLabelledBy: 'keybindings-editor-aria-label-element', recordEnter: true })); - this._register(this.searchWidget.onDidChange(searchValue => this.delayedFiltering.trigger(() => this.filterKeybindings()))); + this._register(this.searchWidget.onDidChange(searchValue => { + this.searchValueContextKey.set(!!searchValue); + this.delayedFiltering.trigger(() => this.filterKeybindings()); + })); this._register(this.searchWidget.onEscape(() => this.recordKeysAction.checked = false)); const actionsContainer = DOM.append(searchContainer, DOM.$('.keybindings-search-actions-container')); @@ -338,9 +341,6 @@ export class KeybindingsEditor extends BaseEditor implements IKeybindingsEditor } })); this.actionBar.push([this.recordKeysAction, this.sortByPrecedenceAction]); - - - this.createOpenKeybindingsElement(this.headerContainer); } private createRecordingBadge(container: HTMLElement): HTMLElement { @@ -369,25 +369,6 @@ export class KeybindingsEditor extends BaseEditor implements IKeybindingsEditor } } - private createOpenKeybindingsElement(parent: HTMLElement): void { - const openKeybindingsContainer = DOM.append(parent, $('.open-keybindings-container')); - DOM.append(openKeybindingsContainer, $('', null, localize('header-message', "For advanced customizations open and edit"))); - const fileElement = DOM.append(openKeybindingsContainer, $('.file-name', null, localize('keybindings-file-name', "keybindings.json"))); - fileElement.tabIndex = 0; - - this._register(DOM.addDisposableListener(fileElement, DOM.EventType.CLICK, () => this.preferencesService.openGlobalKeybindingSettings(true))); - this._register(DOM.addDisposableListener(fileElement, DOM.EventType.KEY_UP, e => { - let keyboardEvent = new StandardKeyboardEvent(e); - switch (keyboardEvent.keyCode) { - case KeyCode.Enter: - this.preferencesService.openGlobalKeybindingSettings(true); - keyboardEvent.preventDefault(); - keyboardEvent.stopPropagation(); - return; - } - })); - } - private createBody(parent: HTMLElement): void { const bodyContainer = DOM.append(parent, $('.keybindings-body')); this.createList(bodyContainer); diff --git a/src/vs/workbench/parts/preferences/browser/media/clear-inverse.svg b/src/vs/workbench/parts/preferences/browser/media/clear-inverse.svg new file mode 100644 index 0000000000000000000000000000000000000000..85e7ec4bdafd2f12132fb1ebb523bbddb8b6909f --- /dev/null +++ b/src/vs/workbench/parts/preferences/browser/media/clear-inverse.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/vs/workbench/parts/preferences/browser/media/clear.svg b/src/vs/workbench/parts/preferences/browser/media/clear.svg new file mode 100644 index 0000000000000000000000000000000000000000..ef02703e10b10781fdc2237cca344412a5907268 --- /dev/null +++ b/src/vs/workbench/parts/preferences/browser/media/clear.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/vs/workbench/parts/preferences/common/preferences.ts b/src/vs/workbench/parts/preferences/common/preferences.ts index 9292ca431ea8a41e5c9f713074d14c072bf9243f..2867b1c20e1afaa7d062059b9f6e45c70d49d013 100644 --- a/src/vs/workbench/parts/preferences/common/preferences.ts +++ b/src/vs/workbench/parts/preferences/common/preferences.ts @@ -67,6 +67,7 @@ export const CONTEXT_SETTINGS_SEARCH_FOCUS = new RawContextKey('inSetti export const CONTEXT_TOC_ROW_FOCUS = new RawContextKey('settingsTocRowFocus', false); export const CONTEXT_KEYBINDINGS_EDITOR = new RawContextKey('inKeybindings', false); export const CONTEXT_KEYBINDINGS_SEARCH_FOCUS = new RawContextKey('inKeybindingsSearch', false); +export const CONTEXT_KEYBINDINGS_SEARCH_VALUE = new RawContextKey('hasKeybindingsSearchValue', false); export const CONTEXT_KEYBINDING_FOCUS = new RawContextKey('keybindingFocus', false); export const SETTINGS_EDITOR_COMMAND_SEARCH = 'settings.action.search'; @@ -90,6 +91,7 @@ export const KEYBINDINGS_EDITOR_COMMAND_COPY = 'keybindings.editor.copyKeybindin export const KEYBINDINGS_EDITOR_COMMAND_COPY_COMMAND = 'keybindings.editor.copyCommandKeybindingEntry'; export const KEYBINDINGS_EDITOR_COMMAND_SHOW_SIMILAR = 'keybindings.editor.showConflicts'; export const KEYBINDINGS_EDITOR_COMMAND_FOCUS_KEYBINDINGS = 'keybindings.editor.focusKeybindings'; +export const KEYBINDINGS_EDITOR_CLEAR_INPUT = 'keybindings.editor.showDefaultKeybindings'; export const KEYBINDINGS_EDITOR_SHOW_DEFAULT_KEYBINDINGS = 'keybindings.editor.showDefaultKeybindings'; export const KEYBINDINGS_EDITOR_SHOW_USER_KEYBINDINGS = 'keybindings.editor.showUserKeybindings'; diff --git a/src/vs/workbench/parts/preferences/electron-browser/preferences.contribution.ts b/src/vs/workbench/parts/preferences/electron-browser/preferences.contribution.ts index 688f2b910ab251b35d75e49e8bf23466f6df7f30..d6b721b3909b3087dd88f287100ca0253f8a1dcf 100644 --- a/src/vs/workbench/parts/preferences/electron-browser/preferences.contribution.ts +++ b/src/vs/workbench/parts/preferences/electron-browser/preferences.contribution.ts @@ -22,7 +22,9 @@ import { KeybindingsEditor } from 'vs/workbench/parts/preferences/browser/keybin import { OpenDefaultKeybindingsFileAction, OpenRawDefaultSettingsAction, OpenSettingsAction, OpenGlobalSettingsAction, OpenGlobalKeybindingsFileAction, OpenWorkspaceSettingsAction, OpenFolderSettingsAction, ConfigureLanguageBasedSettingsAction, OPEN_FOLDER_SETTINGS_COMMAND, OpenGlobalKeybindingsAction, OpenSettings2Action, OpenSettingsJsonAction } from 'vs/workbench/parts/preferences/browser/preferencesActions'; import { IKeybindingsEditor, IPreferencesSearchService, CONTEXT_KEYBINDING_FOCUS, CONTEXT_KEYBINDINGS_EDITOR, CONTEXT_KEYBINDINGS_SEARCH_FOCUS, KEYBINDINGS_EDITOR_COMMAND_DEFINE, KEYBINDINGS_EDITOR_COMMAND_REMOVE, KEYBINDINGS_EDITOR_COMMAND_SEARCH, KEYBINDINGS_EDITOR_COMMAND_RECORD_SEARCH_KEYS, KEYBINDINGS_EDITOR_COMMAND_SORTBY_PRECEDENCE, - KEYBINDINGS_EDITOR_COMMAND_COPY, KEYBINDINGS_EDITOR_COMMAND_RESET, KEYBINDINGS_EDITOR_COMMAND_COPY_COMMAND, KEYBINDINGS_EDITOR_COMMAND_SHOW_SIMILAR, KEYBINDINGS_EDITOR_COMMAND_FOCUS_KEYBINDINGS, KEYBINDINGS_EDITOR_COMMAND_CLEAR_SEARCH_RESULTS, SETTINGS_EDITOR_COMMAND_SEARCH, CONTEXT_SETTINGS_EDITOR, SETTINGS_EDITOR_COMMAND_FOCUS_FILE, CONTEXT_SETTINGS_SEARCH_FOCUS, SETTINGS_EDITOR_COMMAND_CLEAR_SEARCH_RESULTS, SETTINGS_EDITOR_COMMAND_FOCUS_NEXT_SETTING, SETTINGS_EDITOR_COMMAND_FOCUS_PREVIOUS_SETTING, SETTINGS_EDITOR_COMMAND_EDIT_FOCUSED_SETTING, SETTINGS_EDITOR_COMMAND_FOCUS_SETTINGS_FROM_SEARCH, CONTEXT_TOC_ROW_FOCUS, SETTINGS_EDITOR_COMMAND_FOCUS_SETTINGS_LIST, SETTINGS_EDITOR_COMMAND_SHOW_CONTEXT_MENU, KEYBINDINGS_EDITOR_SHOW_DEFAULT_KEYBINDINGS, KEYBINDINGS_EDITOR_SHOW_USER_KEYBINDINGS + KEYBINDINGS_EDITOR_COMMAND_COPY, KEYBINDINGS_EDITOR_COMMAND_RESET, KEYBINDINGS_EDITOR_COMMAND_COPY_COMMAND, KEYBINDINGS_EDITOR_COMMAND_SHOW_SIMILAR, KEYBINDINGS_EDITOR_COMMAND_FOCUS_KEYBINDINGS, KEYBINDINGS_EDITOR_COMMAND_CLEAR_SEARCH_RESULTS, SETTINGS_EDITOR_COMMAND_SEARCH, CONTEXT_SETTINGS_EDITOR, SETTINGS_EDITOR_COMMAND_FOCUS_FILE, + CONTEXT_SETTINGS_SEARCH_FOCUS, SETTINGS_EDITOR_COMMAND_CLEAR_SEARCH_RESULTS, SETTINGS_EDITOR_COMMAND_FOCUS_NEXT_SETTING, SETTINGS_EDITOR_COMMAND_FOCUS_PREVIOUS_SETTING, SETTINGS_EDITOR_COMMAND_EDIT_FOCUSED_SETTING, SETTINGS_EDITOR_COMMAND_FOCUS_SETTINGS_FROM_SEARCH, CONTEXT_TOC_ROW_FOCUS, SETTINGS_EDITOR_COMMAND_FOCUS_SETTINGS_LIST, + SETTINGS_EDITOR_COMMAND_SHOW_CONTEXT_MENU, KEYBINDINGS_EDITOR_SHOW_DEFAULT_KEYBINDINGS, KEYBINDINGS_EDITOR_SHOW_USER_KEYBINDINGS, CONTEXT_KEYBINDINGS_SEARCH_VALUE } from 'vs/workbench/parts/preferences/common/preferences'; import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; import { IWorkbenchContributionsRegistry, Extensions as WorkbenchExtensions } from 'vs/workbench/common/contributions'; @@ -343,19 +345,6 @@ KeybindingsRegistry.registerCommandAndKeybindingRule({ } }); -KeybindingsRegistry.registerCommandAndKeybindingRule({ - id: KEYBINDINGS_EDITOR_COMMAND_CLEAR_SEARCH_RESULTS, - weight: KeybindingWeight.WorkbenchContrib, - when: ContextKeyExpr.and(CONTEXT_KEYBINDINGS_EDITOR, CONTEXT_KEYBINDINGS_SEARCH_FOCUS), - primary: KeyCode.Escape, - handler: (accessor, args: any) => { - const control = accessor.get(IEditorService).activeControl as IKeybindingsEditor; - if (control) { - control.clearSearchResults(); - } - } -}); - Registry.as(WorkbenchExtensions.Workbench).registerWorkbenchContribution(PreferencesContribution, LifecyclePhase.Starting); CommandsRegistry.registerCommand(OPEN_FOLDER_SETTINGS_COMMAND, function (accessor: ServicesAccessor, resource: URI) { @@ -400,6 +389,33 @@ MenuRegistry.appendMenuItem(MenuId.EditorTitle, { group: '1_keyboard_preferences_actions' }); +KeybindingsRegistry.registerCommandAndKeybindingRule({ + id: KEYBINDINGS_EDITOR_COMMAND_CLEAR_SEARCH_RESULTS, + weight: KeybindingWeight.WorkbenchContrib, + when: ContextKeyExpr.and(CONTEXT_KEYBINDINGS_EDITOR, CONTEXT_KEYBINDINGS_SEARCH_FOCUS), + primary: KeyCode.Escape, + handler: (accessor, args: any) => { + const control = accessor.get(IEditorService).activeControl as IKeybindingsEditor; + if (control) { + control.clearSearchResults(); + } + } +}); + +MenuRegistry.appendMenuItem(MenuId.EditorTitle, { + command: { + id: KEYBINDINGS_EDITOR_COMMAND_CLEAR_SEARCH_RESULTS, + title: nls.localize('clearInput', "Clear Keybindings Search Input"), + iconLocation: { + light: URI.parse(require.toUrl(`vs/workbench/parts/preferences/browser/media/clear.svg`)), + dark: URI.parse(require.toUrl(`vs/workbench/parts/preferences/browser/media/clear-inverse.svg`)) + }, + precondition: ContextKeyExpr.and(CONTEXT_KEYBINDINGS_SEARCH_VALUE) + }, + when: ContextKeyExpr.and(CONTEXT_KEYBINDINGS_EDITOR), + group: 'navigation', +}); + CommandsRegistry.registerCommand(KEYBINDINGS_EDITOR_SHOW_USER_KEYBINDINGS, serviceAccessor => { const control = serviceAccessor.get(IEditorService).activeControl as IKeybindingsEditor; if (control) { @@ -415,6 +431,18 @@ MenuRegistry.appendMenuItem(MenuId.EditorTitle, { group: '1_keyboard_preferences_actions' }); +CommandsRegistry.registerCommand(OpenGlobalKeybindingsFileAction.ID, serviceAccessor => { + serviceAccessor.get(IInstantiationService).createInstance(OpenGlobalKeybindingsFileAction, OpenGlobalKeybindingsFileAction.ID, OpenGlobalKeybindingsFileAction.LABEL).run(); +}); +MenuRegistry.appendMenuItem(MenuId.EditorTitle, { + command: { + id: OpenGlobalKeybindingsFileAction.ID, + title: OpenGlobalKeybindingsFileAction.LABEL, + }, + when: ContextKeyExpr.and(CONTEXT_KEYBINDINGS_EDITOR), + group: '2_keyboard_preferences_actions' +}); + abstract class SettingsCommand extends Command {