Visual studio code VSCode API—“textInputFocus”用于webview或自定义撤消处理
我正在研究VSCode扩展实现。 我正在使用webview作为我的扩展-结果是,当您可以选择项目并进行编辑时,会出现类似于VisualEditor的情况。 因此,我想为webview实现自定义撤消/重做处理。 我有以下代码来处理VSCode的“undo”/“redo”命令: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 =
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);