我跑在我的.emacs文件下面的代碼:爲什麼我的模式特定.emacs掛鉤在所有模式下運行?
(defun load-hooks()
(add-hook 'after-save-hook 'my-hook))
(add-hook 'c-mode-hook 'load-hooks)
(defun my-hook() ...)
然而,在my-hook
內容上的保存,甚至當我在不同的模式很運行。我錯過了一步嗎?
我跑在我的.emacs文件下面的代碼:爲什麼我的模式特定.emacs掛鉤在所有模式下運行?
(defun load-hooks()
(add-hook 'after-save-hook 'my-hook))
(add-hook 'c-mode-hook 'load-hooks)
(defun my-hook() ...)
然而,在my-hook
內容上的保存,甚至當我在不同的模式很運行。我錯過了一步嗎?
你應該使用本地參數add-hook
,這將使確保鉤僅僅影響當前緩衝區:
(defun load-hooks()
(add-hook 'after-save-hook 'my-hook nil t))
(add-hook 'c-mode-hook 'load-hooks)
(defun my-hook() ...)
吉洪是關於正確的「後保存鉤影響所有的模式 - 現在我使用以下功能依靠檢查:
(defun in-c-mode?()
(string= (current-major-mode) "c-mode"))
(defun current-major-mode()
(with-current-buffer (current-buffer) major-mode))
沒有必要爲此定義兩個新功能。我認爲'(eq主模式'c模式)'應該是一個充分的測試。注意'(with-current-buffer(current-buffer)...)'是多餘的,基本上等同於'(progn ...)'。 –
謝謝,事實證明,我的答案是雙重冗餘的,我可以傳遞一個本地鉤子的參數。 – sdasdadas
比我的回答好得多。 – sdasdadas