如何在Emacs中挂钩"缓冲区已经缩减了很多"

Jis*_*Yoo 5 emacs

Emacs说,

缓冲区foo.txt已经缩减了很多; 在该缓冲区中禁用自动保存,直到下一次实际保存

当它检测到大量文本消失时自动保存时间,并禁用自动保存,除非auto-save-include-big-deletions是非零.

我怎么能挂钩这个Emacs事件检测到缓冲区已经缩小了很多?我想要挂钩,因为我想在缓冲区大量收缩的时候设置一个缓冲区本地标志,以便当我这样做时save-some-buffers,它的一个建议会检测到该标志并对我说"嘿,这个缓冲区已经缩小了很多.不要忘记看到差异以确保你没有错误地删除一些大块".除了备份之外,这还不错.简单地比较保存前缓冲区的大小和保存的文件将无法检测到添加大量的情况,然后错误地删除批次然后保存.

Tre*_*son 4

getsauto-save-hook在生成该消息的检查之前运行,因此您可以复制 C 代码中的逻辑来执行您想要的操作。所以你可以向该钩子添加一个函数。

这是(据我所知)C 代码中使用的逻辑。

(when (and auto-save-include-big-deletions
           buffer-file-name
           (> (* 10 (nth 7 (file-attributes buffer-file-name)))
              (* 13 (buffer-size)))
           (> (nth 7 (file-attributes buffer-file-name)) 5000))
  ;; do something
  )
Run Code Online (Sandbox Code Playgroud)

注意:即使自动保存被禁用,钩子也会运行。