diff --git a/packages/keymaps/src/browser/keybindings-widget.tsx b/packages/keymaps/src/browser/keybindings-widget.tsx index 84767e4923776..21c6a251af481 100644 --- a/packages/keymaps/src/browser/keybindings-widget.tsx +++ b/packages/keymaps/src/browser/keybindings-widget.tsx @@ -211,7 +211,7 @@ export class KeybindingWidget extends ReactWidget implements StatefulWidget { protected formatAndMatchKeybinding(item: KeybindingItem, queryItems: string[]): boolean { if (item.keybinding) { - let match = false; + const copiedItems = [...queryItems].filter(Boolean); /* Copy query and eliminate empty entries */ const segments = this.keybindingRegistry.resolveKeybinding(item.keybinding).reduce((collection, code, codeIndex) => { if (codeIndex !== 0) { // Two non-breaking spaces. @@ -224,14 +224,14 @@ export class KeybindingWidget extends ReactWidget implements StatefulWidget { if (chunkIndex !== 0) { collection.push({ value: '+', match: false, key: false }); } - const chunkMatches = queryItems.includes(matchChunks[chunkIndex].toLocaleLowerCase()); - match ||= chunkMatches; + const index = copiedItems.indexOf(matchChunks[chunkIndex].toLocaleLowerCase()); + const chunkMatches = index > -1 ? !!copiedItems.splice(index, 1) : false; collection.push({ value: chunk, match: chunkMatches, key: true }); }); return collection; }, []); item.labels.keybinding = { value: item.labels.keybinding.value, segments }; - return match; + return !copiedItems.length; } item.labels.keybinding = { value: '' }; return false;