【问题标题】:One keystroke in emacs undoemacs 中的一键撤消
【发布时间】:2017-05-24 00:28:22
【问题描述】:

最近 emacs 开始在一次撤消时撤消多次击键。我不喜欢那样。我不想要那个。我似乎从过去记得它,然后它停止了,或者我以某种方式停止了它。我怎么能阻止它?如果我删除了太多字符,我希望能够撤消那个字符。如果我输入了太多字符,我希望能够撤消它。目前它撤消了一些随机数量的更改。我不想那样。

【问题讨论】:

  • Emacs 使用计时器来存储最近的更改。如果这确实是您想要做的,您可以在每次击键时将其放在post-command-hook 上。请参阅 undo-auto--boundary-timerundo-auto--boundary-ensure-timer。或者,您可以更改保存计时器间隔——看起来它设置为 10 秒——我认为这是相关的代码行:(run-at-time 10 nil #'undo-auto--boundary-timer)
  • @lawlist:请将其作为答案提交。请记住:cmets 可以随时删除,并且 cmets 不可用于全局搜索 (AFAIK)。

标签: emacs undo


【解决方案1】:

确实发生了一些变化:过去,连续单字符插入的撤消记录(self-insert-command)被合并(以 20 个为一组),但在 Emacs-25 中,这被扩展到单字符向后删除delete-backward-char.

这些组的大小 (20) 在 C 中硬编码,现在在 Elisp 中硬编码(在 undo-auto-amalgamate 中)。因此,尽管它仍然是硬编码的,但在不编译您自己的 Emacs 的情况下覆盖它会更容易。

查看代码,我怀疑您可以通过以下方式禁用此合并业务:

(advice-add 'undo-auto--last-boundary-amalgamating-number
            :override #'ignore)

【讨论】:

    猜你喜欢
    • 2012-09-25
    • 1970-01-01
    • 2013-05-19
    • 2011-05-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    • 2013-02-20
    相关资源
    最近更新 更多