2013-06-21 99 views
5

Emacs的说“缓冲缩水不少”,如何挂钩到在Emacs

缓冲foo.txt的缩水不少;自动保存在缓冲 禁止,直到下一个真正的节省

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

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

+0

这个逻辑好像是用C代码实现的......也许挂钩它并不容易。您是否考虑过使用'find-file-hook'来设置初始文件大小( - (point-max)(point-min)),并在执行'save-some-buffers'时将当前大小与该值进行比较? – juanleon

+0

使用find-file-hook,无法检测到用户添加大量新文本的情况,然后删除大量旧文本,然后保存(全部在Emacs中) –

回答

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 
) 

注意:即使自动保存已被禁用,它看起来像挂钩运行。