2014-10-01 70 views
1

我已經定義了一個保存後鉤子,如果通過按Ctrl-x Ctrl-s進行保存,它會很好用。不過,我注意到,保存觸發幾乎沒有任何其他方式不按預期跳閘。首先,我注意到代碼調用保存,一些緩衝器沒有觸發,所以我這樣做:如何在自動保存上調用保存後鉤子?

(defadvice save-some-buffers (after after-save-some-buffers activate) 
    (run-hooks 'after-save-hook)) 

而且除了它幾乎工作將運行掛鉤,即使該文件並沒有改變,所以它仍然不理想。但後來我注意到autosaving也沒有觸發它。所以,我諮詢了文檔,發現DO-自動保存功能,並嘗試了同樣的伎倆:

(defadvice do-auto-save (after after-auto-save activate) 
    (run-hooks 'after-save-hook)) 

而且有鉤完全不執行。 do-auto-save是一個C源代碼函數,所以推測它不會調用任何elisp通常會觸發的鉤子。

總之,當emacs保存我修改後的緩衝區後,save-hook實際運行時我該如何做到這一點?

+0

您能否告訴我們爲什麼您需要在自動保存後運行代碼?對你的問題的直接回答可能不存在,所以提供關於你想要做什麼的額外信息是有用的。 – Stefan 2014-10-01 19:33:15

回答

0

after-save-hook執行時運行save-some-buffers。如果沒有,這將是非常奇怪的。你能從emacs -Q創建一個repro嗎?

+0

FWIW我有同樣的問題。我想在保存時刪除尾部空間,但''(add-hook'before-save-hook'delete-trailing-whitespace)'不會被'auto-save'觸發。 – 2016-08-16 11:00:08