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

时间:2013-06-21 12:19:34

标签: emacs

Emacs说,

  

缓冲区foo.txt已经缩减了很多;在该缓冲区中禁用自动保存   直到下一个真正的保存

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

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

1 个答案:

答案 0 :(得分: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
  )

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

相关问题