Perl 滚动窗口中的多次撤消/重做

Perl 滚动窗口中的多次撤消/重做,perl,tkinter,tcl,tk,perltk,Perl,Tkinter,Tcl,Tk,Perltk,我知道我可以使用TextUndo小部件实现多个撤销。但这不起重做的作用 如何实现多重撤消和多重重做?小部件支持完整的撤消/重做功能。你只需要打开它;由于并不是所有的文本都需要这样的东西,所以默认情况下它是关闭的。要打开它,只需将布尔值-undo小部件选项设置为true。就这么简单(尽管在Tcl以外的语言中编写它的方式可能有点不同,例如Tkinter中的undo) 然而,PerlTk似乎把这一切搞得一团糟。出于某种原因,Tk::Text小部件不支持撤销/重做(为什么?机器就在那里,戳穿了。)而Tk

我知道我可以使用TextUndo小部件实现多个撤销。但这不起重做的作用


如何实现多重撤消和多重重做?

小部件支持完整的撤消/重做功能。你只需要打开它;由于并不是所有的
文本
都需要这样的东西,所以默认情况下它是关闭的。要打开它,只需将布尔值
-undo
小部件选项设置为true。就这么简单(尽管在Tcl以外的语言中编写它的方式可能有点不同,例如Tkinter中的
undo

然而,PerlTk似乎把这一切搞得一团糟。出于某种原因,
Tk::Text
小部件不支持撤销/重做(为什么?机器就在那里,戳穿了。)而
Tk::TextUndo
小部件没有公开重做功能(到底为什么会省略?)这些都是PerlTk的局限性,而不是Tk本身。在这种情况下,你最好的选择可能是类,虽然对我来说,这很奇怪,因为它只是做我认为是核心TK功能。 或者可能只是CPAN文档过时了。

问题在于,为虚拟事件“”和虚拟事件“”分配了两次绑定(以实现类似于粘贴的emacs)。普通的
Tk::Text
没有撤销功能,因此在这里使用
C-y
绑定是有意义的。不幸的是,当使用
Tk::TextUndo
时,此绑定会发生冲突

您有以下几种可能性:

  • 使用其他绑定进行重做(例如F12绑定,有关完整列表,请参阅Tk::MainWindow源代码,或弹出菜单中的“重做”项)
  • 全局删除
    C-y
    绑定,例如使用:
    $mw->eventDelete(“”,”)
我不确定如何在Perl/Tk源代码中最好地解决这个问题。最简单的方法是在此处删除“”的emacs密钥绑定,但emacs用户可能会不高兴。我愿意接受建议