【问题标题】:How Emacs determines a unit of work to undoEmacs 如何确定要撤消的工作单元
【发布时间】:2011-09-29 06:32:22
【问题描述】:

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

我已经阅读了Emacs manual entry on Undo,但对于它的具体工作原理却含糊其辞。该手册说“连续的字符插入命令通常组合在一起成为单个撤消记录”,但它没有解释它如何决定构成一个组的字符插入命令的数量。它放在一个组中的字符数似乎是随机的。

谁能解释 Emacs 用于将字符分组为撤消记录的算法?

【问题讨论】:

    标签: emacs


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-07-13
      • 2011-05-01
      • 1970-01-01
      • 2017-05-24
      • 2012-09-25
      • 2016-02-17
      • 1970-01-01
      • 2013-05-19
      • 2012-05-15
      相关资源
      最近更新 更多