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

Emacs如何确定要撤消的工作单元,emacs,Emacs,当您输入命令C-/时,Emacs将撤消最近对缓冲区所做的部分更改。当您再次输入C-/时,它将撤消另一块工作 我读过这本书,但对它的具体工作原理却含糊不清。该手册说“连续的字符插入命令通常被组合到一个撤销记录中”,但没有解释它如何决定组成一个组的字符插入命令的数量。它放在一个组中的字符数似乎是随机的 有人能解释一下Emacs用于将字符分组到撤消记录中的算法吗?设置撤消边界的逻辑主要在中实现的自插入命令中。您必须阅读完整故事的代码,但基本上: 只要您只是键入字符,每键入20个字符就有一个撤消边界

当您输入命令C-/时,Emacs将撤消最近对缓冲区所做的部分更改。当您再次输入C-/时,它将撤消另一块工作

我读过这本书,但对它的具体工作原理却含糊不清。该手册说“连续的字符插入命令通常被组合到一个撤销记录中”,但没有解释它如何决定组成一个组的字符插入命令的数量。它放在一个组中的字符数似乎是随机的


有人能解释一下Emacs用于将字符分组到撤消记录中的算法吗?

设置撤消边界的逻辑主要在中实现的
自插入命令中。您必须阅读完整故事的代码,但基本上:

  • 只要您只是键入字符,每键入20个字符就有一个撤消边界
  • 但如果发出不同的编辑命令(例如,杀死一个单词),则会立即添加撤消边界,从而重置字符数
  • 某些“毛茸茸”的插入(由
    内部\u self\u insert
    确定)会导致立即添加撤消边界,并重置字符计数。阅读代码时,看起来如下所示:(1)在
    覆盖模式下
    ,如果您用不同宽度的字符重写字符,例如,在选项卡上键入;(2) 如果插入的字符导致缩写扩展;(3) 如果键入的字符导致自动填充模式插入缩进
  • 此外,任何决定使用撤销边界的编辑命令都可以通过调用
    undo boundary
    来请求撤销边界。这不会导致重置字符计数