讓我們假設我正在使用的特定模式是python-mode
。 以下對鉤Emacs手冊規定了:emacs中給定主模式的eval-after-load vs hooks的執行順序
每一個主要的模式命令是應該運行正常鉤稱爲模式鉤作爲初始化的最後步驟之一。
來自主要模式約定:
每個主要模式應該有一個名爲
modename-mode-hook
正常模式掛鉤。主要模式命令應該做的最後一件事是撥打run-mode-hooks
。
和with-eval-after-load
在加載代碼(例如,需要)之後執行代碼,並且如果已經需要,則立即運行。
我已經按照我的init文件:
(add-hook 'python-mode-hook 'my-post-python)
而且我已經加入
(with-eval-after-load 'python-mode
(setq-default python-basic-offset 7) ; setting some option
(add-to-list 'python-globals-list "console"))
現在假設我開的Emacs,然後打開一個Python文件緩衝區,什麼是負載/執行關於掛鉤的訂單和with-eval-after-load
?從開始指定的文檔看來,模式鉤子將在with-eval-after-load
代碼之前運行?
更具體地說,每次進入緩衝區/進入當前緩衝區時都會運行模式鉤子? (P.S.這很難從文檔/手冊中找到,歡迎任何在文檔/手冊中澄清上述內容的鏈接)。
謝謝!我查看了源代碼,從中我學到的是模式作者本身不運行鉤子(它們只是用鉤子定義鉤子),但是在那種情況下,誰運行鉤子? –
主要模式通常使用'define-derived-mode'定義,它會自動創建鉤子變量並通過調用'run-mode-hooks'來定義模式命令。 – jpkotta
如果OTOH您不*使用標準宏來定義模式功能,那麼您有責任手動實施所有這些預期的內務管理。 – phils