Emacs如何确定要撤消的工作单元

时间:2011-07-06 02:17:23

标签: emacs

当您输入命令 C - / 时,Emacs会将您最近更改的某些部分撤消到缓冲区。当你再次输入 C - / 时,它会撤消另一部分工作。

我已经阅读了Emacs manual entry on Undo,但它究竟是如何运作的却模糊不清。手册说“连续字符插入命令通常组合在一起成为一个撤销记录”,但它没有解释它如何决定构成一个组的字符插入命令的数量。它放在一个组中的字符数似乎是随机的。

任何人都可以解释Emacs用于将字符分组为撤消记录的算法吗?

1 个答案:

答案 0 :(得分:34)

设置撤消边界的逻辑主要在self-insert-command中,在cmds.c中实现。你必须阅读完整故事的代码,但基本上是:

  • 只要您输入字符,就会每隔20个字符输入一个撤消边界。
  • 但是如果你发出不同的编辑命令(例如你杀了一个单词),这会导致立即添加撤销边界,重置字符数。
  • 某些“多毛”插入(由internal_self_insert确定)会导致立即添加撤消边界,并重置字符计数。阅读代码,看起来好像是:(1)在overwrite-mode中,如果你用一个宽度不同的字符覆盖一个字符,例如在标签上打字; (2)如果您插入的字符导致缩写被扩展; (3)如果您输入的字符导致auto-fill-mode插入缩进。
  • 此外,任何决定使用撤消边界的编辑命令都可以通过调用undo-boundary来请求它。这不会导致重置字符数。