2 回答
TA貢獻1895條經驗 獲得超7個贊
值得注意的是為什么 Emacs推遲了軟件包的初始化:
請參閱C-hig (emacs) Package Installation RET,尤其是:
加載init文件后會自動加載軟件包的原因是,用戶選項僅在加載init文件后才收到其自定義值,包括影響打包系統的用戶選項。在某些情況下,您可能希望在init文件中顯式加載程序包(通常是因為init文件中的其他代碼取決于程序包)。在這種情況下,您的初始化文件應調用函數package-initialize。您有責任確保package-load-list在package-initialize通話之前設置相關的用戶選項,例如(請參見下文)。您還應該設置 package-enable-at-startup為nil,以避免在處理init文件之后再次加載軟件包。或者,您可以選擇在啟動時完全禁止軟件包加載,然后調用命令 M-x package-initialize 手動加載軟件包。
因此,只要確保在調用之前確保init文件能夠處理package定制組1中想要的變量的所有非默認值package-initialize,并且在定制軟件包庫配置時保持這種方法,就可以了。這個。
另外,由于after-init-hook在標準程序包初始化完成后運行,因此可以使用它來評估依賴于程序包的任何初始化代碼。因此package-initialize,與其直接在init.el 中調用,不如編寫:
(add-hook 'after-init-hook 'my-after-init-hook)
(defun my-after-init-hook ()
;; do things after package initialization
)
將需要初始化的軟件包系統的代碼放入該函數中。
YMMV。
(nb我沒有測試過初始化后的方法,因為我并未真正使用package.el;但是我確實確認了啟動代碼中的事件順序,因此我相信它將按所述方式工作。)
1個 M-x customize-group RET package RET
添加回答
舉報
