6

Emacs 说,

缓冲区 foo.txt 缩小了很多;在该缓冲区中禁用自动保存,直到下一次真正保存

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

我怎样才能挂钩这个 Emacs 检测到缓冲区已经缩小很多的事件?我想解决这个问题,因为我想在缓冲区缩小很多时设置一个缓冲区本地标志,这样当我这样做时save-some-buffers,它的一个建议会检测到该标志并对我说“嘿,这个缓冲区缩小了很多。不要忘记查看 diff 以确保您没有错误地删除一些大块”。除了备份之外,这将是很好的。简单地比较保存前的缓冲区大小和保存的文件将无法检测到添加很多然后误删除很多然后保存的情况。

4

1 回答 1

4

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

这是(AFAIK)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
  )

注意:看起来即使禁用了自动保存,挂钩也会运行。

于 2013-06-21T20:33:33.270 回答