gpt4 book ai didi

textarea - 修改 Electron 文本区域/菜单上的撤消/重做行为

转载 作者:行者123 更新时间:2023-12-03 12:35:34 25 4
gpt4 key购买 nike

我开发 Electron 应用程序。
使用 Canvas 和多个文本区域编辑UML序列图的应用程序。
由于窗口上的textarea需要撤消(Ctrl + z),因此不会调用 Electron 菜单上的撤消。
如何使文本区域的撤消无效并将Control + z传递给 Electron 菜单?

重现步骤

在 Electron 菜单中注册撤消(Ctrl + z)。
创建包含文本区域的应用程序屏幕。
启动程序。
编辑文本区域。
(不关注文本区域)按Ctrl + z。

我期望看到的

在 Electron 菜单中的撤消被调用。

我所看到的

焦点移到文本区域。
textarea的内容被撤消。
不调用 Electron 菜单中的撤消。

其他

Disable Chrome's text input undo/redo (CTRL+Z / CTRL+Y)并不完美。

最佳答案

我今天遇到了同样的问题。我认为这是 Electron 方面的错误,设置加速器时,它们不会覆盖输入字段的 native ctrl + z和ctrl + y。

我发现了这种黑客的解决方法:

let zDown = false;
let zFired = false;
let yDown = false;
let yFired = false;
document.onkeydown = function(e) {
if (e.ctrlKey) {
if (e.key === 'z') {
zDown = true;
}
else if (e.key === 'y') {
yDown = true;
}
}
};
document.onkeyup = function(e) {
if (e.key === 'z' && zDown) {
if (!zFired) {
menu.getMenuItemById('undo').click();
}
zDown = zFired = false;
}
else if (e.key === 'y' && yDown) {
if (!yFired) {
menu.getMenuItemById('redo').click();
}
yDown = yFired = false;
}
};

let menu = Menu.buildFromTemplate([{
"label": "Edit",
"submenu": [{
"id": "undo",
"label": "Undo",
"accelerator": "CmdOrCtrl + z",
click: () => {
zFired = true;
app.undo();
}
}, {
"id": "redo",
"label": "Redo",
"accelerator": "CmdOrCtrl + y",
click: () => {
yFired = true;
app.redo();
}
}]
}]);

很脏,但是可以用。

关于textarea - 修改 Electron 文本区域/菜单上的撤消/重做行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48688485/

25 4 0