我剛剛在MacOS上將GNU Emacs從23升級到24,並且一些ELPA安裝包停止工作。其中之一是AucTeX。刪除它並通過軟件包管理器重新安裝後,它再次運行,但我不想爲每個軟件包手動執行此操作。我有點困惑,我沒有在互聯網上找到任何有關這方面的信息。如何在Emacs升級後重建ELPA包
不需要爲新版本的Emacs重新編譯.elc嗎?爲什麼這不是package.el的特性?
我剛剛在MacOS上將GNU Emacs從23升級到24,並且一些ELPA安裝包停止工作。其中之一是AucTeX。刪除它並通過軟件包管理器重新安裝後,它再次運行,但我不想爲每個軟件包手動執行此操作。我有點困惑,我沒有在互聯網上找到任何有關這方面的信息。如何在Emacs升級後重建ELPA包
不需要爲新版本的Emacs重新編譯.elc嗎?爲什麼這不是package.el的特性?
你並不需要重新安裝所有的軟件包。包本身可能很好,但是,它們需要重新編譯,因爲Emacs Lisp字節碼通常在主要版本中不兼容。
要重新編譯所有包,請鍵入M-: (byte-recompile-directory package-user-dir nil 'force)
。重新啓動Emacs後,包應該再次正常工作。
變量package-activated-list
包含我們感興趣的軟件包列表。所以我們只需要再次安裝每個軟件包。我們不需要明確刪除它們;呼籲package-install
將吹走舊版本。
將這個代碼在臨時緩衝區,並評估它(也就是,把你的光標在最後,並按C-x C-e
):
(dolist (package-name package-activated-list)
(package-install package-name))
這種失敗:調試進入 - Lisp的錯誤:(錯誤的類型參數arrayp AC-dabbrev):第1行:包遞減全-name(ac-dabbrev)第2行: package-install(ac-dabbrev) –
這對我的作品在Emacs的25.1和26:
(defun package-reinstall-activated()
"Reinstall all activated packages."
(interactive)
(dolist (package-name package-activated-list)
(when (package-installed-p package-name)
(unless (ignore-errors ;some packages may fail to install
(package-reinstall package-name)
(warn "Package %s failed to reinstall" package-name))))))
只要'M-x重新安裝包RET包名稱'交互式地爲一個包工作。 – peterhil
我的理解是,如果您要降級(或類似)到較早的主要版本的Emacs,字節碼兼容性只是一個問題。較新的Emacs版本將運行由舊版Emacs編譯的字節碼。 – phils
儘管emacs字節代碼確實保持向後兼容性,但重新編譯通常是一個好主意,尤其是在轉移到更高版本的主要版本時。原因在於後來的主要版本經常會引入新的功能,其中一些可能會導致性能或功能的改進。 –