2012-09-04 67 views

回答

5

你應該使用本地參數add-hook,這將使確保鉤僅僅影響當前緩衝區:

(defun load-hooks() 
    (add-hook 'after-save-hook 'my-hook nil t)) 

(add-hook 'c-mode-hook 'load-hooks) 

(defun my-hook() ...) 
+0

比我的回答好得多。 – sdasdadas

2

我認爲在load-hooks中調用(add-hook 'after-save-hook 'my-hook)增加了鉤子全部模式。也就是說,一旦該函數被調用,after-save-hook也被修改爲每個其他緩衝區。

我懷疑你的鉤子將而不是運行,除非你打開一個c文件。嘗試打開一些文件而沒有已打開任何c文件,看看是否有任何運行。如果不是,則意味着爲c文件運行的函數會修改其他所有內容的保存鉤子。

+0

中邦 - 反正是有,我可以創造一個後保存C模式只掛鉤? – sdasdadas

+0

我現在正在測試當前模式是否處於c模式。我會發佈一個答案。 – sdasdadas

0

吉洪是關於正確的「後保存鉤影響所有的模式 - 現在我使用以下功能依靠檢查:

(defun in-c-mode?() 
    (string= (current-major-mode) "c-mode")) 

(defun current-major-mode() 
    (with-current-buffer (current-buffer) major-mode)) 
+2

沒有必要爲此定義兩個新功能。我認爲'(eq主模式'c模式)'應該是一個充分的測試。注意'(with-current-buffer(current-buffer)...)'是多餘的,基本上等同於'(progn ...)'。 –

+0

謝謝,事實證明,我的答案是雙重冗餘的,我可以傳遞一個本地鉤子的參數。 – sdasdadas

相關問題