2013-06-21 139 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 
) 

注意:即使自動保存已被禁用,它看起來像掛鉤運行。