输入命令时C-/,Emacs会将最近更改的某些部分撤消到缓冲区.当你C-/再次进入时,它会撤消另一部分工作.
我已经阅读了关于撤销的Emacs手册条目,但它确切地说它是如何工作的模糊不清.手册说"连续字符插入命令通常组合在一起成为一个撤销记录",但它没有解释它如何决定构成一个组的字符插入命令的数量.它放在一个组中的字符数似乎是随机的.
任何人都可以解释Emacs用于将字符分组为撤消记录的算法吗?
Gar*_*ees 34
设置撤消边界的逻辑主要在self-insert-command其中实现cmds.c.你必须阅读完整故事的代码,但基本上:
internal_self_insert)导致立即添加撤消边界,并重置字符计数.阅读代码,看起来好像是:(1)in overwrite-mode,如果你用一个宽度不同的字符覆盖一个字符,例如在标签上打字; (2)如果您插入的字符导致缩写被扩展; (3)如果您键入的字符导致auto-fill-mode插入缩进.undo-boundary.这不会导致字符数重置.