我正在研究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的菜单中选择“撤消” /“重做”时,将调用我的自定义撤消/重做处理程序:
问题是当我使用'Ctrl + Z'|'Command + Z'快捷方式时,对于Webview不会调用'undo'命令。
之所以发生这种情况,是因为在默认键绑定中遵循了“ when”子句:
如果我从“ when”子句中删除“ textInputFocus”语句,则当使用键盘快捷键时,将对Webview调用“ undo”命令。 有关“何时”上下文的一些信息-https://github.com/microsoft/vscode-docs/blob/master/docs/getstarted/keybindings.md#contexts
问题: 当我使用Webview时,有什么方法可以将'textInputFocus'设置为'true'?
替代方法可能是:
或者也许还有其他更简单的解决方案?
答案 0 :(得分:0)
我找到了如何手动设置'textInputFocus'的方法:
vscode.commands.executeCommand('setContext', 'textInputFocus', true);