提交 7749f542 编写于 作者: S Sandeep Somavarapu

Fix #22793

上级 f98c884c
......@@ -4,8 +4,10 @@
*--------------------------------------------------------------------------------------------*/
'use strict';
import { isFalsyOrEmpty } from 'vs/base/common/arrays';
import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey';
import { ResolvedKeybindingItem } from 'vs/platform/keybinding/common/resolvedKeybindingItem';
import { CommandsRegistry, ICommandHandlerDescription } from 'vs/platform/commands/common/commands';
export interface IResolveResult {
enterChord: boolean;
......@@ -303,4 +305,25 @@ export class KeybindingResolver {
}
return rules.evaluate(context);
}
public static getAllUnboundCommands(boundCommands: Map<string, boolean>): string[] {
const commands = CommandsRegistry.getCommands();
const unboundCommands: string[] = [];
for (let id in commands) {
if (id[0] === '_' || id.indexOf('vscode.') === 0) { // private command
continue;
}
if (typeof commands[id].description === 'object'
&& !isFalsyOrEmpty((<ICommandHandlerDescription>commands[id].description).args)) { // command with args
continue;
}
if (boundCommands.get(id) === true) {
continue;
}
unboundCommands.push(id);
}
return unboundCommands;
}
}
......@@ -7,12 +7,12 @@ import { localize } from 'vs/nls';
import { TPromise } from 'vs/base/common/winjs.base';
import { IMatch, IFilter, or, matchesContiguousSubString, matchesPrefix, matchesCamelCase, matchesWords } from 'vs/base/common/filters';
import { Registry } from 'vs/platform/platform';
import { CommandsRegistry } from 'vs/platform/commands/common/commands';
import { CommonEditorRegistry, EditorAction } from 'vs/editor/common/editorCommonExtensions';
import { IWorkbenchActionRegistry, Extensions as ActionExtensions } from 'vs/workbench/common/actionRegistry';
import { EditorModel } from 'vs/workbench/common/editor';
import { IExtensionService } from 'vs/platform/extensions/common/extensions';
import { IKeybindingService, IKeybindingItem2, KeybindingSource } from 'vs/platform/keybinding/common/keybinding';
import { KeybindingResolver } from 'vs/platform/keybinding/common/keybindingResolver';
export const KEYBINDING_ENTRY_TEMPLATE_ID = 'keybinding.entry.template';
export const KEYBINDING_HEADER_TEMPLATE_ID = 'keybinding.header.template';
......@@ -81,20 +81,17 @@ export class KeybindingsEditorModel extends EditorModel {
return editorActions;
}, {});
this._keybindingItems = this.keybindingsService.getKeybindings().map(keybinding => KeybindingsEditorModel.toKeybindingEntry(keybinding, workbenchActionsRegistry, editorActions));
const boundCommands = this._keybindingItems.reduce((boundCommands, keybinding) => {
boundCommands[keybinding.command] = true;
const boundCommands: Map<string, boolean> = this._keybindingItems.reduce((boundCommands, keybinding) => {
boundCommands.set(keybinding.command, true);
return boundCommands;
}, {});
const commandsMap = CommandsRegistry.getCommands();
for (const command in commandsMap) {
if (!boundCommands[command]) {
this._keybindingItems.push(KeybindingsEditorModel.toKeybindingEntry({
keybinding: null,
command,
when: null,
source: KeybindingSource.Default
}, workbenchActionsRegistry, editorActions));
}
}, new Map<string, boolean>());
for (const command of KeybindingResolver.getAllUnboundCommands(boundCommands)) {
this._keybindingItems.push(KeybindingsEditorModel.toKeybindingEntry({
keybinding: null,
command,
when: null,
source: KeybindingSource.Default
}, workbenchActionsRegistry, editorActions));
}
this._keybindingItems = this._keybindingItems.sort((a, b) => KeybindingsEditorModel.compareKeybindingData(a, b));
return this;
......
......@@ -17,8 +17,7 @@ import { AbstractKeybindingService } from 'vs/platform/keybinding/common/abstrac
import { USLayoutResolvedKeybinding } from 'vs/platform/keybinding/common/usLayoutResolvedKeybinding';
import { IStatusbarService } from 'vs/platform/statusbar/common/statusbar';
import { KeybindingResolver } from 'vs/platform/keybinding/common/keybindingResolver';
import { isFalsyOrEmpty } from 'vs/base/common/arrays';
import { ICommandService, CommandsRegistry, ICommandHandlerDescription } from 'vs/platform/commands/common/commands';
import { ICommandService } from 'vs/platform/commands/common/commands';
import { IKeybindingEvent, IKeybindingItem, IUserFriendlyKeybinding, KeybindingSource } from 'vs/platform/keybinding/common/keybinding';
import { ContextKeyExpr, IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
import { IKeybindingRule, KeybindingsRegistry } from 'vs/platform/keybinding/common/keybindingsRegistry';
......@@ -447,25 +446,8 @@ export class WorkbenchKeybindingService extends AbstractKeybindingService {
}
private static _getAllCommandsAsComment(boundCommands: Map<string, boolean>): string {
const commands = CommandsRegistry.getCommands();
const unboundCommands: string[] = [];
for (let id in commands) {
if (id[0] === '_' || id.indexOf('vscode.') === 0) { // private command
continue;
}
if (typeof commands[id].description === 'object'
&& !isFalsyOrEmpty((<ICommandHandlerDescription>commands[id].description).args)) { // command with args
continue;
}
if (boundCommands.get(id) === true) {
continue;
}
unboundCommands.push(id);
}
const unboundCommands = KeybindingResolver.getAllUnboundCommands(boundCommands);
let pretty = unboundCommands.sort().join('\n// - ');
return '// ' + nls.localize('unboundCommands', "Here are other available commands: ") + '\n// - ' + pretty;
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册