VSCode API-用于Webview或自定义撤消处理的'textInputFocus'

时间:2019-12-03 07:49:46

标签: visual-studio-code keyboard-shortcuts vscode-extensions

我正在研究VSCode扩展实现。 我正在使用Webview作为我的扩展程序-结果,当您可以选择项目并进行编辑时,会有类似于视觉编辑器的功能。 结果,我想为Webview实现自定义的撤消/重做处理。 我有以下代码来处理VSCode的'undo'/'redo'命令:

let undoCommand: Disposable;
let redoCommand: Disposable;
const registerCommands = () => {
    undoCommand = commands.registerCommand('undo', async (args) => {
        // Call custom undo handler
        triggerCustomUndo(appJsonFilePath, extensionWebView.webview);
        // Execute default undo handler
        return commands.executeCommand('default:undo', args);
    });
    redoCommand = commands.registerCommand('redo', async (args) => {
        // Call custom redo handler
        triggerCustomRedo(appJsonFilePath, extensionWebView.webview);
        // Execute default redo handler
        return commands.executeCommand('default:redo', args);
    });
};

extensionWebView.onDidChangeViewState((action: WebviewPanelOnDidChangeViewStateEvent) => {
    if (!action.webviewPanel.visible || !action.webviewPanel.active) {
        undoCommand.dispose();
        redoCommand.dispose();
    } else {
        registerCommands();
    }
});
registerCommands();

对我有用。 结果,当我从VSCode的菜单中选择“撤消” /“重做”时,将调用我的自定义撤消/重做处理程序:

Menu image

问题是当我使用'Ctrl + Z'|'Command + Z'快捷方式时,对于Webview不会调用'undo'命令。

之所以发生这种情况,是因为在默认键绑定中遵循了“ when”子句:

When clause from default settings

如果我从“ when”子句中删除“ textInputFocus”语句,则当使用键盘快捷键时,将对Webview调用“ undo”命令。 有关“何时”上下文的一些信息-https://github.com/microsoft/vscode-docs/blob/master/docs/getstarted/keybindings.md#contexts

问题: 当我使用Webview时,有什么方法可以将'textInputFocus'设置为'true'?

替代方法可能是:

  • 我可以阅读键盘绑定附件
    1. 默认-'vscode://defaultsettings/keybindings.json'
    2. 自定义/覆盖: Windows-%APPDATA%\ Code \ User \ keybindings.json; MacOS-$ HOME / Library / Application Support / Code / User / keybindings.json; Linux-$ HOME / .config / Code / User / keybindings.json;
  • 手动附加键盘按下事件并处理事件以检测“撤消” /“重做”键组合; 那应该可以,但是如果我能以某种方式将webview的'textInputFocus'设置为'true',那会容易得多。

或者也许还有其他更简单的解决方案?

1 个答案:

答案 0 :(得分:0)

我找到了如何手动设置'textInputFocus'的方法:

vscode.commands.executeCommand('setContext', 'textInputFocus', true);