@theia/keymaps 1.23.0 → 1.24.0-next.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -13,12 +13,22 @@ export interface KeybindingItem {
13
13
  keybinding?: ScopedKeybinding;
14
14
  /** human-readable labels can contain highlighting */
15
15
  labels: {
16
- id: string;
17
- command: string;
18
- keybinding: string;
19
- context: string;
20
- source: string;
16
+ id: RenderableLabel;
17
+ command: RenderableLabel;
18
+ keybinding: RenderableLabel;
19
+ context: RenderableLabel;
20
+ source: RenderableLabel;
21
21
  };
22
+ visible?: boolean;
23
+ }
24
+ export interface RenderableLabel {
25
+ readonly value: string;
26
+ segments?: RenderableStringSegment[];
27
+ }
28
+ export interface RenderableStringSegment {
29
+ value: string;
30
+ match: boolean;
31
+ key?: boolean;
22
32
  }
23
33
  /**
24
34
  * Representation of an individual table cell.
@@ -87,6 +97,11 @@ export declare class KeybindingWidget extends ReactWidget {
87
97
  * Perform a search based on the user's search query.
88
98
  */
89
99
  protected doSearchKeybindings(): void;
100
+ protected formatAndMatchCommand(item: KeybindingItem): boolean;
101
+ protected formatAndMatchKeybinding(item: KeybindingItem, queryItems: string[]): boolean;
102
+ protected formatAndMatchContext(item: KeybindingItem): boolean;
103
+ protected formatAndMatchSource(item: KeybindingItem): boolean;
104
+ protected toRenderableLabel(label: string, query?: string): RenderableLabel;
90
105
  /**
91
106
  * Get the search input if available.
92
107
  * @returns the search input if available.
@@ -137,13 +152,18 @@ export declare class KeybindingWidget extends ReactWidget {
137
152
  * Render the keybinding.
138
153
  * @param keybinding the keybinding value.
139
154
  */
140
- protected renderKeybinding(keybinding: string): React.ReactNode;
155
+ protected renderKeybinding(keybinding: KeybindingItem): React.ReactNode;
141
156
  /**
142
157
  * Get the list of keybinding items.
143
158
  *
144
159
  * @returns the list of keybinding items.
145
160
  */
146
161
  protected getItems(): KeybindingItem[];
162
+ /**
163
+ * @returns the input array, sorted.
164
+ * The sort priority is as follows: items with keybindings before those without, then alphabetical by command.
165
+ */
166
+ protected sortKeybindings(bindings: KeybindingItem[]): KeybindingItem[];
147
167
  /**
148
168
  * Get the human-readable label for a given command.
149
169
  * @param command the command.
@@ -204,6 +224,6 @@ export declare class KeybindingWidget extends ReactWidget {
204
224
  * Render the fuzzy representation of a matched result.
205
225
  * @param property one of the `KeybindingItem` properties.
206
226
  */
207
- protected renderMatchedData(property: string): React.ReactNode;
227
+ protected renderMatchedData(property: RenderableLabel): React.ReactNode;
208
228
  }
209
229
  //# sourceMappingURL=keybindings-widget.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"keybindings-widget.d.ts","sourceRoot":"","sources":["../../src/browser/keybindings-widget.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"keybindings-widget.d.ts","sourceRoot":"","sources":["../../src/browser/keybindings-widget.tsx"],"names":[],"mappings":"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"}
@@ -39,6 +39,7 @@ const react_widget_1 = require("@theia/core/lib/browser/widgets/react-widget");
39
39
  const browser_1 = require("@theia/core/lib/browser");
40
40
  const keymaps_service_1 = require("./keymaps-service");
41
41
  const alert_message_1 = require("@theia/core/lib/browser/widgets/alert-message");
42
+ const core_1 = require("@theia/core");
42
43
  let KeybindingWidget = KeybindingWidget_1 = class KeybindingWidget extends react_widget_1.ReactWidget {
43
44
  constructor() {
44
45
  super(...arguments);
@@ -88,8 +89,8 @@ let KeybindingWidget = KeybindingWidget_1 = class KeybindingWidget extends react
88
89
  // Listen to changes made in the `keymaps.json` and update the view accordingly.
89
90
  if (this.keymapsService.onDidChangeKeymaps) {
90
91
  this.toDispose.push(this.keymapsService.onDidChangeKeymaps(() => {
92
+ this.items = this.getItems();
91
93
  this.doSearchKeybindings();
92
- this.update();
93
94
  }));
94
95
  }
95
96
  }
@@ -120,97 +121,77 @@ let KeybindingWidget = KeybindingWidget_1 = class KeybindingWidget extends react
120
121
  */
121
122
  doSearchKeybindings() {
122
123
  this.onDidUpdateEmitter.fire(undefined);
123
- this.items = [];
124
124
  const searchField = this.findSearchField();
125
125
  this.query = searchField ? searchField.value.trim().toLocaleLowerCase() : '';
126
- const items = this.getItems();
127
- items.forEach(item => {
128
- const keys = ['command', 'keybinding', 'context', 'source'];
129
- let matched = false;
130
- for (const key of keys) {
131
- const string = item.labels[key];
132
- if (string) {
133
- const fuzzyMatch = fuzzy.match(this.query, string, this.fuzzyOptions);
134
- if (fuzzyMatch) {
135
- item.labels[key] = fuzzyMatch.rendered;
136
- matched = true;
126
+ const queryItems = this.query.split(/[+\s]/);
127
+ this.items.forEach(item => {
128
+ let matched = !this.query;
129
+ matched = this.formatAndMatchCommand(item) || matched;
130
+ matched = this.formatAndMatchKeybinding(item, queryItems) || matched;
131
+ matched = this.formatAndMatchContext(item) || matched;
132
+ matched = this.formatAndMatchSource(item) || matched;
133
+ item.visible = matched;
134
+ });
135
+ this.update();
136
+ }
137
+ formatAndMatchCommand(item) {
138
+ item.labels.command = this.toRenderableLabel(item.labels.command.value);
139
+ return Boolean(item.labels.command.segments);
140
+ }
141
+ formatAndMatchKeybinding(item, queryItems) {
142
+ if (item.keybinding) {
143
+ let match = false;
144
+ const segments = this.keybindingRegistry.resolveKeybinding(item.keybinding).reduce((collection, code, codeIndex) => {
145
+ if (codeIndex !== 0) {
146
+ // Two non-breaking spaces.
147
+ collection.push({ value: '\u00a0\u00a0', match: false, key: false });
148
+ }
149
+ const displayChunks = this.keybindingRegistry.componentsForKeyCode(code);
150
+ const matchChunks = core_1.isOSX ? this.keybindingRegistry.componentsForKeyCode(code, true) : displayChunks;
151
+ displayChunks.forEach((chunk, chunkIndex) => {
152
+ if (chunkIndex !== 0) {
153
+ collection.push({ value: '+', match: false, key: false });
137
154
  }
138
- else {
139
- // Match identical keybindings that have different orders.
140
- if (key === 'keybinding') {
141
- const queryItems = this.query.split('+');
142
- // Handle key chords.
143
- const tempItems = string.split(' ');
144
- // Store positions of `space` in the keybinding string.
145
- const spaceIndexArr = [0];
146
- let bindingItems = [];
147
- if (tempItems.length > 1) {
148
- tempItems.forEach(tItem => {
149
- const tKeys = tItem.split('+');
150
- spaceIndexArr.push(tKeys.length + spaceIndexArr[-1]);
151
- bindingItems.push(...tKeys);
152
- });
153
- }
154
- else {
155
- bindingItems = string.split('+');
156
- }
157
- spaceIndexArr.shift();
158
- const renderedResult = [...bindingItems];
159
- let matchCounter = 0;
160
- queryItems.forEach(queryItem => {
161
- let keyFuzzyMatch = { rendered: '', score: 0 };
162
- let keyIndex = -1;
163
- if (string) {
164
- bindingItems.forEach((bindingItem) => {
165
- // Match every key in user query with every key in keybinding string.
166
- const tempFuzzyMatch = fuzzy.match(queryItem, bindingItem, this.fuzzyOptions);
167
- // Select the match with the highest matching score.
168
- if (tempFuzzyMatch && tempFuzzyMatch.score > keyFuzzyMatch.score) {
169
- keyFuzzyMatch = tempFuzzyMatch;
170
- // Get index in the keybinding array.
171
- keyIndex = renderedResult.indexOf(bindingItem);
172
- }
173
- });
174
- const keyRendered = keyFuzzyMatch.rendered;
175
- if (keyRendered) {
176
- if (keyIndex > -1) {
177
- renderedResult[keyIndex] = keyRendered;
178
- }
179
- // Remove key from keybinding items if it is matched.
180
- bindingItems.splice(keyIndex, 1, '');
181
- matchCounter += 1;
182
- }
183
- }
184
- });
185
- if (matchCounter === queryItems.length) {
186
- // Handle rendering of key chords.
187
- if (spaceIndexArr.length > 0) {
188
- const chordRenderedResult = '';
189
- renderedResult.forEach((resultKey, index) => {
190
- if (index === 0) {
191
- chordRenderedResult.concat(resultKey);
192
- }
193
- else if (spaceIndexArr.indexOf(index) !== -1) {
194
- chordRenderedResult.concat(' ' + resultKey);
195
- }
196
- else {
197
- chordRenderedResult.concat('+' + resultKey);
198
- }
199
- });
200
- item.labels[key] = chordRenderedResult;
201
- }
202
- item.labels[key] = renderedResult.join('+');
203
- matched = true;
204
- }
155
+ const chunkMatches = queryItems.includes(matchChunks[chunkIndex].toLocaleLowerCase());
156
+ match || (match = chunkMatches);
157
+ collection.push({ value: chunk, match: chunkMatches, key: true });
158
+ });
159
+ return collection;
160
+ }, []);
161
+ item.labels.keybinding = { value: item.labels.keybinding.value, segments };
162
+ return match;
163
+ }
164
+ item.labels.keybinding = { value: '' };
165
+ return false;
166
+ }
167
+ formatAndMatchContext(item) {
168
+ item.labels.context = this.toRenderableLabel(item.labels.context.value);
169
+ return Boolean(item.labels.context.segments);
170
+ }
171
+ formatAndMatchSource(item) {
172
+ item.labels.source = this.toRenderableLabel(item.labels.source.value);
173
+ return Boolean(item.labels.source.segments);
174
+ }
175
+ toRenderableLabel(label, query = this.query) {
176
+ if (label && query) {
177
+ const fuzzyMatch = fuzzy.match(query, label, this.fuzzyOptions);
178
+ if (fuzzyMatch) {
179
+ return {
180
+ value: label,
181
+ segments: fuzzyMatch.rendered.split(this.fuzzyOptions.pre).reduce((collection, segment) => {
182
+ const [maybeMatch, notMatch] = segment.split(this.fuzzyOptions.post);
183
+ if (notMatch === undefined) {
184
+ collection.push({ value: maybeMatch, match: false });
205
185
  }
206
- }
207
- }
208
- }
209
- if (matched) {
210
- this.items.push(item);
186
+ else {
187
+ collection.push({ value: maybeMatch, match: true }, { value: notMatch, match: false });
188
+ }
189
+ return collection;
190
+ }, [])
191
+ };
211
192
  }
212
- });
213
- this.update();
193
+ }
194
+ return { value: label };
214
195
  }
215
196
  /**
216
197
  * Get the search input if available.
@@ -271,7 +252,7 @@ let KeybindingWidget = KeybindingWidget_1 = class KeybindingWidget extends react
271
252
  * Render the table rows.
272
253
  */
273
254
  renderRows() {
274
- return React.createElement(React.Fragment, null, this.items.map((item, index) => this.renderRow(item, index)));
255
+ return React.createElement(React.Fragment, null, this.items.map((item, index) => item.visible !== false && this.renderRow(item, index)));
275
256
  }
276
257
  renderRow(item, index) {
277
258
  const { command, keybinding } = item;
@@ -279,7 +260,7 @@ let KeybindingWidget = KeybindingWidget_1 = class KeybindingWidget extends react
279
260
  return React.createElement("tr", { className: 'kb-item-row', key: index, onDoubleClick: () => this.editKeybinding(item) },
280
261
  React.createElement("td", { className: 'kb-actions' }, this.renderActions(item)),
281
262
  React.createElement("td", { className: 'kb-label', title: this.getCommandLabel(command) }, this.renderMatchedData(item.labels.command)),
282
- React.createElement("td", { title: this.getKeybindingLabel(keybinding), className: 'kb-keybinding monaco-keybinding' }, this.renderKeybinding(item.labels.keybinding)),
263
+ React.createElement("td", { title: this.getKeybindingLabel(keybinding), className: 'kb-keybinding monaco-keybinding' }, this.renderKeybinding(item)),
283
264
  React.createElement("td", { className: 'kb-context', title: this.getContextLabel(keybinding) },
284
265
  React.createElement("code", null, this.renderMatchedData(item.labels.context))),
285
266
  React.createElement("td", { className: 'kb-source', title: this.getScopeLabel(keybinding) },
@@ -323,35 +304,22 @@ let KeybindingWidget = KeybindingWidget_1 = class KeybindingWidget extends react
323
304
  * @param keybinding the keybinding value.
324
305
  */
325
306
  renderKeybinding(keybinding) {
326
- if (!keybinding.length) {
307
+ if (!keybinding.keybinding) {
327
308
  return undefined;
328
309
  }
329
- const regex = new RegExp(this.keybindingSeparator);
330
- keybinding = keybinding.replace(regex, '+');
331
- const keys = keybinding.split('+');
332
- return React.createElement(React.Fragment, null, keys.map((key, index) => {
333
- if (index === 0) {
334
- return React.createElement("span", { key: index, className: 'monaco-keybinding-key' }, this.renderMatchedData(key));
335
- }
336
- else if (key.includes(' ')) {
337
- // Handle key chords, which have space as the separator
338
- // Example: `k Ctrl` in key chords `Ctrl+k Ctrl+p`
339
- let chordKeys = key.split('<match> </match>');
340
- if (chordKeys.length === 1) {
341
- chordKeys = key.split(' ');
310
+ if (keybinding.labels.keybinding.segments) {
311
+ return keybinding.labels.keybinding.segments.map((segment, index) => {
312
+ if (segment.key) {
313
+ return React.createElement("span", { key: index, className: 'monaco-keybinding-key' },
314
+ React.createElement("span", { className: `${segment.match ? 'fuzzy-match' : ''}` }, segment.value));
342
315
  }
343
- return React.createElement(React.Fragment, { key: index },
344
- React.createElement("span", { className: 'monaco-keybinding-separator' }, "+"),
345
- React.createElement("span", { className: 'monaco-keybinding-key' }, this.renderKeybinding(chordKeys[0])),
346
- React.createElement("span", { className: 'monaco-keybinding-separator' }, "\u00A0\u00A0"),
347
- React.createElement("span", { className: 'monaco-keybinding-key' }, this.renderKeybinding(chordKeys[1])));
348
- }
349
- else {
350
- return React.createElement(React.Fragment, { key: index },
351
- React.createElement("span", { className: 'monaco-keybinding-separator' }, "+"),
352
- React.createElement("span", { className: 'monaco-keybinding-key' }, this.renderKeybinding(key)));
353
- }
354
- }));
316
+ else {
317
+ return React.createElement("span", { key: index, className: 'monaco-keybinding-separator' }, segment.value);
318
+ }
319
+ });
320
+ }
321
+ console.warn('Unexpectedly encountered a keybinding without segment divisions');
322
+ return keybinding.labels.keybinding.value;
355
323
  }
356
324
  /**
357
325
  * Get the list of keybinding items.
@@ -370,26 +338,39 @@ let KeybindingWidget = KeybindingWidget_1 = class KeybindingWidget extends react
370
338
  continue;
371
339
  }
372
340
  const keybinding = this.keybindingRegistry.getKeybindingsForCommand(command.id)[0];
373
- items.push({
341
+ const item = {
374
342
  command,
375
343
  keybinding,
376
344
  labels: {
377
- id: command.id,
378
- command: this.getCommandLabel(command),
379
- keybinding: this.getKeybindingLabel(keybinding) || '',
380
- context: this.getContextLabel(keybinding) || '',
381
- source: this.getScopeLabel(keybinding) || ''
345
+ id: { value: command.id },
346
+ command: { value: this.getCommandLabel(command) },
347
+ keybinding: { value: this.getKeybindingLabel(keybinding) || '' },
348
+ context: { value: this.getContextLabel(keybinding) || '' },
349
+ source: { value: this.getScopeLabel(keybinding) || '' }
382
350
  }
383
- });
351
+ };
352
+ this.formatAndMatchCommand(item);
353
+ this.formatAndMatchKeybinding(item, []);
354
+ this.formatAndMatchContext(item);
355
+ this.formatAndMatchSource(item);
356
+ items.push(item);
384
357
  }
385
- // Sort the keybinding item by label.
386
- const sorted = items.sort((a, b) => this.compareItem(a.command, b.command));
387
- // Get the list of keybinding item with keybindings (visually put them at the top of the table).
388
- const keyItems = sorted.filter(a => !!a.labels.keybinding);
389
- // Get the remaining keybinding items (without keybindings).
390
- const otherItems = sorted.filter(a => !a.labels.keybinding);
391
- // Return the list of keybinding items prioritizing those with a defined keybinding.
392
- return [...keyItems, ...otherItems];
358
+ return this.sortKeybindings(items);
359
+ }
360
+ /**
361
+ * @returns the input array, sorted.
362
+ * The sort priority is as follows: items with keybindings before those without, then alphabetical by command.
363
+ */
364
+ sortKeybindings(bindings) {
365
+ return bindings.sort((a, b) => {
366
+ if (a.keybinding && !b.keybinding) {
367
+ return -1;
368
+ }
369
+ if (b.keybinding && !a.keybinding) {
370
+ return 1;
371
+ }
372
+ return this.compareItem(a.command, b.command);
373
+ });
393
374
  }
394
375
  /**
395
376
  * Get the human-readable label for a given command.
@@ -550,13 +531,12 @@ let KeybindingWidget = KeybindingWidget_1 = class KeybindingWidget extends react
550
531
  * @param property one of the `KeybindingItem` properties.
551
532
  */
552
533
  renderMatchedData(property) {
553
- if (this.query !== '') {
554
- const cellData = this.buildCellData(property);
555
- return React.createElement(React.Fragment, null, cellData.map((data, index) => (data.highlighted) ? React.createElement("span", { key: index, className: 'fuzzy-match' }, data.value) : React.createElement("span", { key: index }, data.value)));
556
- }
557
- else {
558
- return property;
534
+ if (property.segments) {
535
+ return React.createElement(React.Fragment, null, property.segments.map((segment, index) => segment.match
536
+ ? React.createElement("span", { key: index, className: 'fuzzy-match' }, segment.value)
537
+ : React.createElement("span", { key: index }, segment.value)));
559
538
  }
539
+ return property.value;
560
540
  }
561
541
  };
562
542
  KeybindingWidget.ID = 'keybindings.view.widget';
@@ -1 +1 @@
1
- {"version":3,"file":"keybindings-widget.js","sourceRoot":"","sources":["../../src/browser/keybindings-widget.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"keybindings-widget.js","sourceRoot":"","sources":["../../src/browser/keybindings-widget.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@theia/keymaps",
3
- "version": "1.23.0",
3
+ "version": "1.24.0-next.10+41a2f5b8d33",
4
4
  "description": "Theia - Custom Keymaps Extension",
5
5
  "dependencies": {
6
- "@theia/core": "1.23.0",
7
- "@theia/monaco": "1.23.0",
8
- "@theia/userstorage": "1.23.0",
6
+ "@theia/core": "1.24.0-next.10+41a2f5b8d33",
7
+ "@theia/monaco": "1.24.0-next.10+41a2f5b8d33",
8
+ "@theia/userstorage": "1.24.0-next.10+41a2f5b8d33",
9
9
  "jsonc-parser": "^2.2.0"
10
10
  },
11
11
  "devDependencies": {
@@ -46,5 +46,5 @@
46
46
  "nyc": {
47
47
  "extends": "../../configs/nyc.json"
48
48
  },
49
- "gitHead": "58c402c326f161778b59130578a37240fd6dc863"
49
+ "gitHead": "41a2f5b8d330944498a8e7715d8a30921a73f5d6"
50
50
  }
@@ -26,6 +26,7 @@ import {
26
26
  } from '@theia/core/lib/browser';
27
27
  import { KeymapsService } from './keymaps-service';
28
28
  import { AlertMessage } from '@theia/core/lib/browser/widgets/alert-message';
29
+ import { isOSX } from '@theia/core';
29
30
 
30
31
  /**
31
32
  * Representation of a keybinding item for the view.
@@ -35,12 +36,24 @@ export interface KeybindingItem {
35
36
  keybinding?: ScopedKeybinding
36
37
  /** human-readable labels can contain highlighting */
37
38
  labels: {
38
- id: string
39
- command: string
40
- keybinding: string
41
- context: string
42
- source: string
39
+ id: RenderableLabel;
40
+ command: RenderableLabel;
41
+ keybinding: RenderableLabel;
42
+ context: RenderableLabel;
43
+ source: RenderableLabel;
43
44
  }
45
+ visible?: boolean;
46
+ }
47
+
48
+ export interface RenderableLabel {
49
+ readonly value: string;
50
+ segments?: RenderableStringSegment[];
51
+ }
52
+
53
+ export interface RenderableStringSegment {
54
+ value: string;
55
+ match: boolean;
56
+ key?: boolean;
44
57
  }
45
58
 
46
59
  /**
@@ -126,8 +139,8 @@ export class KeybindingWidget extends ReactWidget {
126
139
  // Listen to changes made in the `keymaps.json` and update the view accordingly.
127
140
  if (this.keymapsService.onDidChangeKeymaps) {
128
141
  this.toDispose.push(this.keymapsService.onDidChangeKeymaps(() => {
142
+ this.items = this.getItems();
129
143
  this.doSearchKeybindings();
130
- this.update();
131
144
  }));
132
145
  }
133
146
  }
@@ -162,99 +175,82 @@ export class KeybindingWidget extends ReactWidget {
162
175
  */
163
176
  protected doSearchKeybindings(): void {
164
177
  this.onDidUpdateEmitter.fire(undefined);
165
- this.items = [];
166
178
  const searchField = this.findSearchField();
167
179
  this.query = searchField ? searchField.value.trim().toLocaleLowerCase() : '';
168
- const items = this.getItems();
169
- items.forEach(item => {
170
- const keys: (keyof KeybindingItem['labels'])[] = ['command', 'keybinding', 'context', 'source'];
171
- let matched = false;
172
- for (const key of keys) {
173
- const string = item.labels[key];
174
- if (string) {
175
- const fuzzyMatch = fuzzy.match(this.query, string, this.fuzzyOptions);
176
- if (fuzzyMatch) {
177
- item.labels[key] = fuzzyMatch.rendered;
178
- matched = true;
179
- } else {
180
- // Match identical keybindings that have different orders.
181
- if (key === 'keybinding') {
182
- const queryItems = this.query.split('+');
183
-
184
- // Handle key chords.
185
- const tempItems = string.split(' ');
186
- // Store positions of `space` in the keybinding string.
187
- const spaceIndexArr = [0];
188
- let bindingItems: string[] = [];
189
- if (tempItems.length > 1) {
190
- tempItems.forEach(tItem => {
191
- const tKeys = tItem.split('+');
192
- spaceIndexArr.push(tKeys.length + spaceIndexArr[-1]);
193
- bindingItems.push(...tKeys);
194
- });
195
- } else {
196
- bindingItems = string.split('+');
197
- }
198
- spaceIndexArr.shift();
199
-
200
- const renderedResult = [...bindingItems];
201
- let matchCounter = 0;
202
-
203
- queryItems.forEach(queryItem => {
204
- let keyFuzzyMatch: fuzzy.MatchResult = { rendered: '', score: 0 };
205
- let keyIndex = -1;
206
- if (string) {
207
- bindingItems.forEach((bindingItem: string) => {
208
- // Match every key in user query with every key in keybinding string.
209
- const tempFuzzyMatch = fuzzy.match(queryItem, bindingItem, this.fuzzyOptions);
210
- // Select the match with the highest matching score.
211
- if (tempFuzzyMatch && tempFuzzyMatch.score > keyFuzzyMatch.score) {
212
- keyFuzzyMatch = tempFuzzyMatch;
213
- // Get index in the keybinding array.
214
- keyIndex = renderedResult.indexOf(bindingItem);
215
- }
216
- });
217
-
218
- const keyRendered = keyFuzzyMatch.rendered;
219
- if (keyRendered) {
220
- if (keyIndex > -1) {
221
- renderedResult[keyIndex] = keyRendered;
222
- }
223
- // Remove key from keybinding items if it is matched.
224
- bindingItems.splice(keyIndex, 1, '');
225
- matchCounter += 1;
226
- }
227
- }
228
- });
229
- if (matchCounter === queryItems.length) {
230
- // Handle rendering of key chords.
231
- if (spaceIndexArr.length > 0) {
232
- const chordRenderedResult = '';
233
- renderedResult.forEach((resultKey, index) => {
234
- if (index === 0) {
235
- chordRenderedResult.concat(resultKey);
236
- } else if (spaceIndexArr.indexOf(index) !== -1) {
237
- chordRenderedResult.concat(' ' + resultKey);
238
- } else {
239
- chordRenderedResult.concat('+' + resultKey);
240
- }
241
- });
242
- item.labels[key] = chordRenderedResult;
243
- }
244
-
245
- item.labels[key] = renderedResult.join('+');
246
- matched = true;
247
- }
248
- }
249
- }
180
+ const queryItems = this.query.split(/[+\s]/);
181
+ this.items.forEach(item => {
182
+ let matched = !this.query;
183
+ matched = this.formatAndMatchCommand(item) || matched;
184
+ matched = this.formatAndMatchKeybinding(item, queryItems) || matched;
185
+ matched = this.formatAndMatchContext(item) || matched;
186
+ matched = this.formatAndMatchSource(item) || matched;
187
+ item.visible = matched;
188
+ });
189
+ this.update();
190
+ }
191
+
192
+ protected formatAndMatchCommand(item: KeybindingItem): boolean {
193
+ item.labels.command = this.toRenderableLabel(item.labels.command.value);
194
+ return Boolean(item.labels.command.segments);
195
+ }
196
+
197
+ protected formatAndMatchKeybinding(item: KeybindingItem, queryItems: string[]): boolean {
198
+ if (item.keybinding) {
199
+ let match = false;
200
+ const segments = this.keybindingRegistry.resolveKeybinding(item.keybinding).reduce<RenderableStringSegment[]>((collection, code, codeIndex) => {
201
+ if (codeIndex !== 0) {
202
+ // Two non-breaking spaces.
203
+ collection.push({ value: '\u00a0\u00a0', match: false, key: false });
250
204
  }
251
- }
205
+ const displayChunks = this.keybindingRegistry.componentsForKeyCode(code);
206
+ const matchChunks = isOSX ? this.keybindingRegistry.componentsForKeyCode(code, true) : displayChunks;
207
+
208
+ displayChunks.forEach((chunk, chunkIndex) => {
209
+ if (chunkIndex !== 0) {
210
+ collection.push({ value: '+', match: false, key: false });
211
+ }
212
+ const chunkMatches = queryItems.includes(matchChunks[chunkIndex].toLocaleLowerCase());
213
+ match ||= chunkMatches;
214
+ collection.push({ value: chunk, match: chunkMatches, key: true });
215
+ });
216
+ return collection;
217
+ }, []);
218
+ item.labels.keybinding = { value: item.labels.keybinding.value, segments };
219
+ return match;
220
+ }
221
+ item.labels.keybinding = { value: '' };
222
+ return false;
223
+ }
224
+
225
+ protected formatAndMatchContext(item: KeybindingItem): boolean {
226
+ item.labels.context = this.toRenderableLabel(item.labels.context.value);
227
+ return Boolean(item.labels.context.segments);
228
+ }
229
+
230
+ protected formatAndMatchSource(item: KeybindingItem): boolean {
231
+ item.labels.source = this.toRenderableLabel(item.labels.source.value);
232
+ return Boolean(item.labels.source.segments);
233
+ }
252
234
 
253
- if (matched) {
254
- this.items.push(item);
235
+ protected toRenderableLabel(label: string, query: string = this.query): RenderableLabel {
236
+ if (label && query) {
237
+ const fuzzyMatch = fuzzy.match(query, label, this.fuzzyOptions);
238
+ if (fuzzyMatch) {
239
+ return {
240
+ value: label,
241
+ segments: fuzzyMatch.rendered.split(this.fuzzyOptions.pre).reduce<RenderableStringSegment[]>((collection, segment) => {
242
+ const [maybeMatch, notMatch] = segment.split(this.fuzzyOptions.post);
243
+ if (notMatch === undefined) {
244
+ collection.push({ value: maybeMatch, match: false });
245
+ } else {
246
+ collection.push({ value: maybeMatch, match: true }, { value: notMatch, match: false });
247
+ }
248
+ return collection;
249
+ }, [])
250
+ };
255
251
  }
256
- });
257
- this.update();
252
+ }
253
+ return { value: label };
258
254
  }
259
255
 
260
256
  /**
@@ -344,7 +340,7 @@ export class KeybindingWidget extends ReactWidget {
344
340
  */
345
341
  protected renderRows(): React.ReactNode {
346
342
  return <React.Fragment>
347
- {this.items.map((item, index) => this.renderRow(item, index))}
343
+ {this.items.map((item, index) => item.visible !== false && this.renderRow(item, index))}
348
344
  </React.Fragment>;
349
345
  }
350
346
 
@@ -359,7 +355,7 @@ export class KeybindingWidget extends ReactWidget {
359
355
  {this.renderMatchedData(item.labels.command)}
360
356
  </td>
361
357
  <td title={this.getKeybindingLabel(keybinding)} className='kb-keybinding monaco-keybinding'>
362
- {this.renderKeybinding(item.labels.keybinding)}
358
+ {this.renderKeybinding(item)}
363
359
  </td>
364
360
  <td className='kb-context' title={this.getContextLabel(keybinding)}>
365
361
  <code>{this.renderMatchedData(item.labels.context)}</code>
@@ -406,43 +402,27 @@ export class KeybindingWidget extends ReactWidget {
406
402
  * Render the keybinding.
407
403
  * @param keybinding the keybinding value.
408
404
  */
409
- protected renderKeybinding(keybinding: string): React.ReactNode {
410
- if (!keybinding.length) {
405
+ protected renderKeybinding(keybinding: KeybindingItem): React.ReactNode {
406
+ if (!keybinding.keybinding) {
411
407
  return undefined;
412
408
  }
413
- const regex = new RegExp(this.keybindingSeparator);
414
- keybinding = keybinding.replace(regex, '+');
415
- const keys = keybinding.split('+');
416
409
 
417
- return <React.Fragment>
418
- {
419
- keys.map((key, index) => {
420
- if (index === 0) {
421
- return <span key={index} className='monaco-keybinding-key'>
422
- {this.renderMatchedData(key)}
423
- </span>;
424
- } else if (key.includes(' ')) {
425
- // Handle key chords, which have space as the separator
426
- // Example: `k Ctrl` in key chords `Ctrl+k Ctrl+p`
427
- let chordKeys = key.split('<match> </match>');
428
- if (chordKeys.length === 1) {
429
- chordKeys = key.split(' ');
430
- }
431
- return <React.Fragment key={index}>
432
- <span className='monaco-keybinding-separator'>+</span>
433
- <span className='monaco-keybinding-key'>{this.renderKeybinding(chordKeys[0])}</span>
434
- <span className='monaco-keybinding-separator'>&nbsp;&nbsp;</span>
435
- <span className='monaco-keybinding-key'>{this.renderKeybinding(chordKeys[1])}</span>
436
- </React.Fragment>;
437
- } else {
438
- return <React.Fragment key={index}>
439
- <span className='monaco-keybinding-separator'>+</span>
440
- <span className='monaco-keybinding-key'>{this.renderKeybinding(key)}</span>
441
- </React.Fragment>;
442
- }
443
- })
444
- }
445
- </React.Fragment>;
410
+ if (keybinding.labels.keybinding.segments) {
411
+ return keybinding.labels.keybinding.segments.map((segment, index) => {
412
+ if (segment.key) {
413
+ return <span key={index} className='monaco-keybinding-key'>
414
+ <span className={`${segment.match ? 'fuzzy-match' : ''}`}>{segment.value}</span>
415
+ </span>;
416
+ } else {
417
+ return <span key={index} className='monaco-keybinding-separator'>
418
+ {segment.value}
419
+ </span>;
420
+ }
421
+ });
422
+ }
423
+
424
+ console.warn('Unexpectedly encountered a keybinding without segment divisions');
425
+ return keybinding.labels.keybinding.value;
446
426
  }
447
427
 
448
428
  /**
@@ -462,27 +442,41 @@ export class KeybindingWidget extends ReactWidget {
462
442
  continue;
463
443
  }
464
444
  const keybinding = this.keybindingRegistry.getKeybindingsForCommand(command.id)[0];
465
- items.push({
445
+ const item = {
466
446
  command,
467
447
  keybinding,
468
448
  labels: {
469
- id: command.id,
470
- command: this.getCommandLabel(command),
471
- keybinding: this.getKeybindingLabel(keybinding) || '',
472
- context: this.getContextLabel(keybinding) || '',
473
- source: this.getScopeLabel(keybinding) || ''
449
+ id: { value: command.id },
450
+ command: { value: this.getCommandLabel(command) },
451
+ keybinding: { value: this.getKeybindingLabel(keybinding) || '' },
452
+ context: { value: this.getContextLabel(keybinding) || '' },
453
+ source: { value: this.getScopeLabel(keybinding) || '' }
474
454
  }
475
- });
455
+ };
456
+ this.formatAndMatchCommand(item);
457
+ this.formatAndMatchKeybinding(item, []);
458
+ this.formatAndMatchContext(item);
459
+ this.formatAndMatchSource(item);
460
+ items.push(item);
476
461
  }
477
- // Sort the keybinding item by label.
478
- const sorted: KeybindingItem[] = items.sort((a, b) => this.compareItem(a.command, b.command));
479
- // Get the list of keybinding item with keybindings (visually put them at the top of the table).
480
- const keyItems: KeybindingItem[] = sorted.filter(a => !!a.labels.keybinding);
481
- // Get the remaining keybinding items (without keybindings).
482
- const otherItems: KeybindingItem[] = sorted.filter(a => !a.labels.keybinding);
483
462
 
484
- // Return the list of keybinding items prioritizing those with a defined keybinding.
485
- return [...keyItems, ...otherItems];
463
+ return this.sortKeybindings(items);
464
+ }
465
+
466
+ /**
467
+ * @returns the input array, sorted.
468
+ * The sort priority is as follows: items with keybindings before those without, then alphabetical by command.
469
+ */
470
+ protected sortKeybindings(bindings: KeybindingItem[]): KeybindingItem[] {
471
+ return bindings.sort((a, b) => {
472
+ if (a.keybinding && !b.keybinding) {
473
+ return -1;
474
+ }
475
+ if (b.keybinding && !a.keybinding) {
476
+ return 1;
477
+ }
478
+ return this.compareItem(a.command, b.command);
479
+ });
486
480
  }
487
481
 
488
482
  /**
@@ -663,17 +657,17 @@ export class KeybindingWidget extends ReactWidget {
663
657
  * Render the fuzzy representation of a matched result.
664
658
  * @param property one of the `KeybindingItem` properties.
665
659
  */
666
- protected renderMatchedData(property: string): React.ReactNode {
667
- if (this.query !== '') {
668
- const cellData = this.buildCellData(property);
669
- return <React.Fragment>
660
+ protected renderMatchedData(property: RenderableLabel): React.ReactNode {
661
+ if (property.segments) {
662
+ return <>
670
663
  {
671
- cellData.map((data, index) => (data.highlighted) ? <span key={index} className='fuzzy-match'>{data.value}</span> : <span key={index}>{data.value}</span>)
664
+ property.segments.map((segment, index) => segment.match
665
+ ? <span key={index} className='fuzzy-match'>{segment.value}</span>
666
+ : <span key={index}>{segment.value}</span>)
672
667
  }
673
- </React.Fragment>;
674
- } else {
675
- return property;
668
+ </>;
676
669
  }
670
+ return property.value;
677
671
  }
678
672
 
679
673
  }