亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Emacs 24軟件包系統初始化問題

Emacs 24軟件包系統初始化問題

慕少森 2019-10-17 15:42:52
在我看來,Emacs 24內置的新Package系統在正確加載和初始化已安裝的軟件包時存在一些缺陷。最近,我升級到了2012年6月10日實現的Emacs 24.1.1,我一直在嘗試使用內置的軟件包系統,并使用它安裝了多個軟件包,但是它們都具有與自動加載和初始化。例如,我使用一個名為的程序包,該程序包smex增強了使用M-x和弦的功能。它要求您為定義一個密鑰M-x,因此我(global-set-key (kbd "M-x") 'smex)在init.el文件中添加了密鑰。但是啟動emacs之后,按下M-x和弦,我得到消息“符號的函數定義為空:smex” ...如果我也將(require 'smex)init.el文件放入,則會收到錯誤消息“文件錯誤:無法打開加載文件,smex ”將smex的位置添加到load-path變量可以使其按預期工作,但是,這似乎使首先擁有軟件包系統的整個目標無法實現...有什么想法嗎?有沒有更好的方法,或者我們暫時還沒有這種限制?
查看完整描述

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


查看完整回答
反對 回復 2019-10-17
  • 2 回答
  • 0 關注
  • 519 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號