例如,我把一些代碼內python-mode-hook
,並且代碼將被運行時:鉤子所持有的函數何時會在emacs中運行?
(1)每次我打開一個Python文件*.py
(2)只有第一次python-mode
被觸發
有沒有人有想法,哪個答案是正確的?
謝謝!
例如,我把一些代碼內python-mode-hook
,並且代碼將被運行時:鉤子所持有的函數何時會在emacs中運行?
(1)每次我打開一個Python文件*.py
(2)只有第一次python-mode
被觸發
有沒有人有想法,哪個答案是正確的?
謝謝!
有關於當鉤子運行沒有一般規則:這是由它定義了鉤的代碼完全控制。然而,也有遵循其中的一般慣例是這樣的一個:
foo-mode
是某種形式的主要模式,然後foo-mode-hook
將分別foo-mode
在緩存啓用時間運行。特別是,正如已經指出的那樣,在python-mode-hook
每次.py
文件被加載時運行的功能。
它會在您每次打開python文件時運行。
然後python模式將觸發此文件緩衝區和您的掛鉤將被執行。
你可以很容易通過編寫一個簡單的鉤測試:
(add-hook 'python-mode-hook (lambda() (message "python mode hook")))
如果你想看看代碼,然後記絕大多數主要模式都與define-derived-mode
宏(模式結構,能夠實現簡單的parent
提供nil
如果新的模式並不實際上從另一個派生,以便從使用宏中獲得相同的好處和標準行爲)。
所以的Mxfind-function
RETdefine-derived-mode
RET
你會看到,在調用模式時,出現這種情況的最後一點是(run-mode-hooks ',hook)
(其中,hook
在這種情況下將擴大至名帶有-hook
後綴的模式)。
所以每次一個緩衝器使得能夠模式(也就是說,在執行由該宏定義的模式函數)時,模式的鉤也運行(以及任何父/祖先模式鉤 - 有趣delay-mode-hooks
和run-mode-hooks
交互意味着在所有其他處理完成之前,沒有任何鉤子運行)。
欲瞭解更多詳情,請參閱http://stackoverflow.com/a/19295380/324105 – phils
正如其他人指出的那樣,在python模式下,每次用python模式打開一個文件。要做的事情只有第一次,你會這樣做(eval-after-load「python」'(progn(some-function)(setq some-var t)))。這會在python.el加載後運行。 – jpkotta
jpkotta:當然,注意到這個python。可以想象,除了調用'python-mode'外,el可能會被加載(即使它可能不是特別有可能),所以如果我非常特別地想要對第一個調用'python-mode'。還有其他方法可以採取。 – phils
Annnd,定義一個只在第一次調用模式時才運行的鉤子沒有什麼意義,因爲這已經由'eval-after-load'和朋友處理了。 – tripleee