0

我知道我可以使用TextUndo小部件实现多个撤消。但这不会执行重做功能。

如何同时实现多次撤消和多次重做?

4

2 回答 2

0

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

然而,PerlTk 似乎把这一切搞得一团糟。出于某种原因,Tk::Text小部件不支持撤消/重做(为什么?机器就在那里,戳穿。)并且Tk::TextUndo小部件没有暴露重做功能(为什么会省略呢?)这些都是PerlTk 中的限制,而不是 Tk 本身。在这种情况下,你最好的选择可能是Tk::Text::SuperText类,尽管对我来说这很奇怪,因为它只是在做我认为是核心 Tk 功能的事情。

或者也许只是 CPAN 文档过时了。

于 2014-01-24T20:08:45.043 回答
0

问题是''​​绑定被分配了两次,用于虚拟事件'<>'(实现类似emacs的粘贴)虚拟事件'<>'。法线Tk::Text没有撤消功能,因此在C-y此处进行绑定是有意义的。不幸的是,当使用Tk::TextUndo.

您有以下可能性:

  • 使用其他绑定进行重做(例如 F12 绑定,完整列表参见 Tk::MainWindow 源代码,或弹出菜单中的“重做”条目)
  • 删除全局C-y绑定<<Paste>>,例如使用: $mw->eventDelete('<<Paste>>', '<Control-Key-y>');

我不确定如何在 Perl/Tk 源代码本身中最好地解决这个问题。最简单的方法是在此处删除 '<>' 的 emacs 键绑定,但随后 emacs 用户可能会不高兴。我愿意接受建议...

于 2014-01-26T16:17:59.457 回答