2012-12-13 63 views
42

我正在使用前奏作爲基礎Emacs配置。 我已經從軟件包管理器安裝了很多軟件包,並且想在另一臺機器上使用我的設置。如何在Emacs 24中保存所有已安裝軟件包的列表?

我不想攜帶安裝的軟件包,也是我不想手動創建一個列表。

什麼是保存列表中的所有已安裝的軟件包爲前奏,package.el或任何其他文件,這樣,當我把這個配置我的其他機器,它們會自動得到安裝有在第一次使用的方法是什麼?

回答

59

您可以從可變package-activated-list獲得當前已安裝的程序包(不包括在建包)的列表。要在啓動時自動安裝它們,看到了這個問題:how to automatically install emacs packages by specifying a list of package names?

更具體地說,如果你這樣做章V包激活名單,複製顯示的值,然後將它作爲prelude-packages值,Emacs會自動確保這些軟件包在啓動時安裝。

+0

哦,這太棒了。 – uchuugaka

+0

值得注意的是,軟件包激活列表並未通過刪除軟件包來更新,但似乎僅在重新啓動時纔會更新。 – uchuugaka

11

規範的方法是最好的(由ataylor描述)。這是一個更笨拙的方法。

M-X列表包C-s安裝直到找到已安裝軟件包的第一行。從開始選擇C-SPC。往下走,直到你到達內置的軟件包。複製M-w用於新緩衝區的C-x b。粘貼C-yC-x C-s保存文件。

唯一的好處,我看到的是這是一點點更多的描述。顯示你的軟件包的一個小的描述。當你安裝一些軟件包並忘記它時很有用。

+0

是的 - 我喜歡這比'package-activated-list'多一點點的描述 –

1

截至how to automatically install emacs packages by specifying a list of package names?提到的那樣,這將是更好也記錄你所需要的軟件包的版本。爲了做到這一點,你可以使用下面的功能:

(defun list-packages-and-versions() 
    "Returns a list of all installed packages and their versions" 
    (mapcar 
    (lambda (pkg) 
    `(,pkg ,(package-desc-version 
       (cadr (assq pkg package-alist))))) 
    package-activated-list)) 

這會給你的(NAME VERSION)對列表。不幸的是,我一直無法找到安裝特定版本的軟件包的方法。看起來package.el總是抓住最新的可用。我現在正在做的是:

(defun install-packages-with-specific-versions (package-version-list) 
    "Install the packages in the given list with specific versions. 
PACKAGE-VERSION-LIST should be a list of (NAME VERSION) lists, 
where NAME is a symbol identifying the package and VERSION is 
the minimum version to install." 
    (package-download-transaction 
    (package-compute-transaction() package-version-list))) 

我寫了一個較長的功能,安裝軟件包匹配的確切版本號,但它失敗,因爲package.el在默認情況下只檢索可用於每個包的最新版本。 gist

相關問題