大发时时彩_时时彩开户_大发时时彩开户

Theia APIs——命令和快捷键

时间:2020-02-12 09:16:37 出处:大发时时彩_时时彩开户_大发时时彩开户

上一篇:使用Theia——创建语言支持

命令和快捷键

  Theia可不时要通如此 来太多种不同的最好的最好的办法进行扩展。命令允许packages提供可不时要被其它包调用的唯一命令,还可不时要向哪几种命令加在快捷键和上下文,使得它们不到在但会 特定的条件下被调用(如窗口获取焦点、当前选项等)。

在Theia中加在命令

  要将命令加在到Theia,时要实现CommandContribution类,如:

java-commands.ts

@injectable()
export class JavaCommandContribution implements CommandContribution {
...
    registerCommands(commands: CommandRegistry): void {
        commands.registerCommand(SHOW_JAVA_REFERENCES, {
            execute: (uri: string, position: Position, locations: Location[]) =>
                commands.executeCommand(SHOW_REFERENCES.id, uri, position, locations)
        });
        commands.registerCommand(APPLY_WORKSPACE_EDIT, {
            execute: (changes: WorkspaceEdit) =>
                !!this.workspace.applyEdit && this.workspace.applyEdit(changes)
        });
    }
}

  每有有另一个多 contribution时要提供有有另一个多 唯一的命令id,以及有有另一个多 命令外理多多进程 (由回调函数执行)。

  将contribution绑定到CommandContribution。

  但会 将contribution的类注入到适当的模块中(确保类被标记为@injectable()),像如此 来太多如此 来太多:

java-frontend-module.ts

export default new ContainerModule(bind => {
    bind(CommandContribution).to(JavaCommandContribution).inSingletonScope();
    ...
});

  负责注册和执行命令的类是CommandRegistry,通过get commandIds() api可不时要获取命令列表。

加在快捷键

  默认具体情况下不时要给命令加在快捷键,不可能 它可不时要通过但会 不同的最好的最好的办法来调用(通过编程最好的最好的办法不可能 用户点击)。不过,朋友仍然可不时要将具有特定上下文的快捷键绑定到命令上以完成相同的命令功能。

  要加在快捷键,只时要注入有有另一个多 KeybindingContribution的实现。

editor-keybinding.ts

@injectable()
export class EditorKeybindingContribution implements KeybindingContribution {

    constructor(
        @inject(EditorKeybindingContext) protected readonly editorKeybindingContext: EditorKeybindingContext
    ) { }

    registerKeybindings(registry: KeybindingRegistry): void {
        [
            {
                command: 'editor.close',
                context: this.editorKeybindingContext,
                keybinding: "alt+w"
            },
            {
                command: 'editor.close.all',
                context: this.editorKeybindingContext,
                keybinding: "alt+shift+w"
            }
        ].forEach(binding => {
            registry.registerKeybinding(binding);
        });
    }
}

  commandId时要是预先注册好的命令,但会 时要唯一。context是有有另一个多 简单的类,用于确保命令和快捷键的绑定组合在特定条件下是可用的。对于编辑器而言,它看起来是如此 来太多如此 来太多的:

editor-keybinding.ts

@injectable()
export class EditorKeybindingContext implements KeybindingContext {
    constructor( @inject(EditorManager) protected readonly editorService: EditorManager) { }

    id = 'editor.keybinding.context';

    isEnabled(arg?: Keybinding) {
        return this.editorService && !!this.editorService.activeEditor;
    }
}

  context都有有另另一个多 唯一的id,用于在上下文中将快捷键注册到命令中。isEnabled()最好的最好的办法会根据给定的条件返回true或false。请注意,context是有有另一个多 可选参数,不可能 如此 提供,则默认为NOOP_CONTEXT。使用该context注册的快捷键将始终保持开启具体情况,可不时要在应用多多进程 的任何地方使用。

  对于id而言,参数keycode是时要的,它是有有另一个多 中含实际快捷键绑定的形态学 。下面是有有另一个多 正确的形态学 :

keys.ts

export declare type Keystroke = { first: Key, modifiers?: Modifier[] };

  Modifier是平台无关的,如此 来太多如此 来太多Modifier.M1在OS X上是Command而在Windows/Linux上是CTRL。Key字符串常量定义在keys.ts中。

将contribution绑定到KeybindingContribution

  与绑定命令contribution一样,快捷键contribution也时要按模块进行绑定,像如此 来太多如此 来太多:

editor-frontend-module.ts

export default new ContainerModule(bind => {
    ...
    bind(CommandContribution).to(EditorCommandHandlers);
    bind(EditorKeybindingContext).toSelf().inSingletonScope();
    bind(KeybindingContext).toDynamicValue(context => context.container.get(EditorKeybindingContext));
    bind(KeybindingContribution).to(EditorKeybindingContribution);
});

热门

热门标签