我知道我可以使用TextUndo小部件实现多个撤消。但这不会执行重做功能。
如何同时实现多次撤消和多次重做?
该text
小部件支持完整的撤消/重做功能。你只需要打开它;因为不是所有的用途都text
需要那种东西,所以默认情况下它是关闭的。要打开它,您只需将布尔-undo
小部件选项设置为 true。就这么简单(尽管您编写它的方式在 Tcl 以外的语言中可能略有不同,例如,它undo
在 Tkinter 中)。
然而,PerlTk 似乎把这一切搞得一团糟。出于某种原因,Tk::Text
小部件不支持撤消/重做(为什么?机器就在那里,戳穿。)并且Tk::TextUndo
小部件没有暴露重做功能(为什么会省略呢?)这些都是PerlTk 中的限制,而不是 Tk 本身。在这种情况下,你最好的选择可能是Tk::Text::SuperText
类,尽管对我来说这很奇怪,因为它只是在做我认为是核心 Tk 功能的事情。
或者也许只是 CPAN 文档过时了。
问题是''绑定被分配了两次,用于虚拟事件'<>'(实现类似emacs的粘贴)和虚拟事件'<>'。法线Tk::Text
没有撤消功能,因此在C-y
此处进行绑定是有意义的。不幸的是,当使用Tk::TextUndo
.
您有以下可能性:
C-y
绑定<<Paste>>
,例如使用:
$mw->eventDelete('<<Paste>>', '<Control-Key-y>');
我不确定如何在 Perl/Tk 源代码本身中最好地解决这个问题。最简单的方法是在此处删除 '<>' 的 emacs 键绑定,但随后 emacs 用户可能会不高兴。我愿意接受建议...