diff --git a/src/vs/workbench/parts/preferences/browser/keybindingsEditor.ts b/src/vs/workbench/parts/preferences/browser/keybindingsEditor.ts index a74f63bd48ab8b40781624a5d7fdbe09a0036c3e..4d91fd39cb5f0e8f082ea588d8df3ca2633014c1 100644 --- a/src/vs/workbench/parts/preferences/browser/keybindingsEditor.ts +++ b/src/vs/workbench/parts/preferences/browser/keybindingsEditor.ts @@ -247,8 +247,12 @@ export class KeybindingsEditor extends BaseEditor implements IKeybindingsEditor return TPromise.as(null); } - search(filter: string): void { + focusSearch(): void { this.searchWidget.focus(); + } + + search(filter: string): void { + this.focusSearch(); this.searchWidget.setValue(filter); } diff --git a/src/vs/workbench/parts/preferences/common/preferences.ts b/src/vs/workbench/parts/preferences/common/preferences.ts index 232b6d0b8d4f6b687235a9d496691499bbe665eb..efbbd723b00c04f44e6cd4ac4b68904ea37f138a 100644 --- a/src/vs/workbench/parts/preferences/common/preferences.ts +++ b/src/vs/workbench/parts/preferences/common/preferences.ts @@ -48,6 +48,7 @@ export interface IKeybindingsEditor extends IEditor { activeKeybindingEntry: IKeybindingItemEntry; search(filter: string): void; + focusSearch(): void; clearSearchResults(): void; focusKeybindings(): void; defineKeybinding(keybindingEntry: IKeybindingItemEntry): TPromise; 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 683bcd616f2bddded0b35b9615c6e9511f023034..a38ea158de6481e23407b75ba788448397cda53d 100644 --- a/src/vs/workbench/parts/preferences/electron-browser/preferences.contribution.ts +++ b/src/vs/workbench/parts/preferences/electron-browser/preferences.contribution.ts @@ -239,7 +239,7 @@ KeybindingsRegistry.registerCommandAndKeybindingRule({ weight: KeybindingsRegistry.WEIGHT.workbenchContrib(), when: ContextKeyExpr.and(CONTEXT_KEYBINDINGS_EDITOR, CONTEXT_KEYBINDING_FOCUS), primary: KeyMod.CtrlCmd | KeyCode.KEY_F, - handler: (accessor, args: any) => (accessor.get(IEditorService).activeControl as IKeybindingsEditor).search('') + handler: (accessor, args: any) => (accessor.get(IEditorService).activeControl as IKeybindingsEditor).focusSearch() }); KeybindingsRegistry.registerCommandAndKeybindingRule({ diff --git a/src/vs/workbench/services/keybinding/common/keybindingEditing.ts b/src/vs/workbench/services/keybinding/common/keybindingEditing.ts index 49bfd52badaa1ff9e697e954ba1e892ba7ad0faf..6673d26b1d2eb30a2ab674f75631dc689796de87 100644 --- a/src/vs/workbench/services/keybinding/common/keybindingEditing.ts +++ b/src/vs/workbench/services/keybinding/common/keybindingEditing.ts @@ -160,8 +160,8 @@ export class KeybindingsEditingService extends Disposable implements IKeybinding const { tabSize, insertSpaces } = model.getOptions(); const eol = model.getEOL(); const userKeybindingEntries = json.parse(model.getValue()); - const index = this.findUnassignedDefaultKeybindingEntryIndex(keybindingItem, userKeybindingEntries); - if (index !== -1) { + const indices = this.findUnassignedDefaultKeybindingEntryIndex(keybindingItem, userKeybindingEntries).reverse(); + for (const index of indices) { this.applyEditsToBuffer(setProperty(model.getValue(), [index], void 0, { tabSize, insertSpaces, eol })[0], model); } } @@ -183,13 +183,14 @@ export class KeybindingsEditingService extends Disposable implements IKeybinding return -1; } - private findUnassignedDefaultKeybindingEntryIndex(keybindingItem: ResolvedKeybindingItem, userKeybindingEntries: IUserFriendlyKeybinding[]): number { + private findUnassignedDefaultKeybindingEntryIndex(keybindingItem: ResolvedKeybindingItem, userKeybindingEntries: IUserFriendlyKeybinding[]): number[] { + const indices = []; for (let index = 0; index < userKeybindingEntries.length; index++) { if (userKeybindingEntries[index].command === `-${keybindingItem.command}`) { - return index; + indices.push(index); } } - return -1; + return indices; } private asObject(key: string, command: string, when: ContextKeyExpr, negate: boolean): any { diff --git a/src/vs/workbench/services/keybinding/test/electron-browser/keybindingEditing.test.ts b/src/vs/workbench/services/keybinding/test/electron-browser/keybindingEditing.test.ts index 2fe4c81b71f92f505d2d408525a929744e12d255..5417ff747785cd2bb0558dcfa9cd2d2d24d1502a 100644 --- a/src/vs/workbench/services/keybinding/test/electron-browser/keybindingEditing.test.ts +++ b/src/vs/workbench/services/keybinding/test/electron-browser/keybindingEditing.test.ts @@ -55,7 +55,7 @@ interface Modifiers { shiftKey?: boolean; } -suite('Keybindings Editing', () => { +suite('KeybindingsEditing', () => { let instantiationService: TestInstantiationService; let testObject: KeybindingsEditingService; @@ -220,6 +220,14 @@ suite('Keybindings Editing', () => { .then(() => assert.deepEqual(getUserKeybindings(), [])); }); + test('reset mulitple removed keybindings', () => { + writeToKeybindingsFile({ key: 'alt+c', command: '-b' }); + writeToKeybindingsFile({ key: 'alt+shift+c', command: '-b' }); + writeToKeybindingsFile({ key: 'escape', command: '-b' }); + return testObject.resetKeybinding(aResolvedKeybindingItem({ command: 'b', isDefault: false })) + .then(() => assert.deepEqual(getUserKeybindings(), [])); + }); + function writeToKeybindingsFile(...keybindings: IUserFriendlyKeybinding[]) { fs.writeFileSync(keybindingsFile, JSON.stringify(keybindings || [])); }