Visual studio code VSCode API—“textInputFocus”用于webview或自定义撤消处理

Visual studio code VSCode API—“textInputFocus”用于webview或自定义撤消处理,visual-studio-code,keyboard-shortcuts,vscode-extensions,Visual Studio Code,Keyboard Shortcuts,Vscode Extensions,我正在研究VSCode扩展实现。 我正在使用webview作为我的扩展-结果是,当您可以选择项目并进行编辑时,会出现类似于VisualEditor的情况。 因此,我想为webview实现自定义撤消/重做处理。 我有以下代码来处理VSCode的“undo”/“redo”命令: let undoCommand: Disposable; let redoCommand: Disposable; const registerCommands = () => { undoCommand =

我正在研究VSCode扩展实现。 我正在使用webview作为我的扩展-结果是,当您可以选择项目并进行编辑时,会出现类似于VisualEditor的情况。 因此,我想为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的菜单中选择“撤消”/“重做”时,调用了我的自定义撤消/重做处理程序:

问题是,当我使用“Ctrl+Z”|“Command+Z”快捷方式时,webview不会调用“undo”命令

这是因为默认键绑定中有以下“when”子句:

如果我从'when'子句中删除'textInputFocus'语句,则在使用键盘快捷键时,会为webview调用'undo'命令。 有关“何时”上下文的一些信息-

问题: 当我使用webview时,有没有办法将“textInputFocus”设置为“true”

替代方法可以是:

我可以阅读键绑定附件 默认值-'vscode://defaultsettings/keybindings.json' 自定义/覆盖: 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”,那就容易多了。
或者可能还有其他更简单的解决方案?

我找到了手动设置“textInputFocus”的方法:

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