web-dev-qa-db-ja.com

Emacs 24にインストールされているすべてのパッケージのリストを保存する方法は?

基本的なEmacs構成としてpreludeを使用しています。パッケージマネージャーから多数のパッケージをインストールしましたが、別のコンピューターで設定を使用したいです。

インストールしたパッケージを持ち歩きたくないし、リストを手動で作成したくない。

すべてのインストール済みパッケージのリストをprelude-package.elまたは他のファイルに保存して、この構成を他のマシンに持って行くと、最初の使用時に自動的にインストールされるようにする方法は何ですか?

47
Akash Kothawale

変数package-activated-listから、現在インストールされているパッケージ(組み込みパッケージを除く)のリストを取得できます。起動時にそれらを自動的にインストールするには、この質問を参照してください: パッケージ名のリストを指定してemacsパッケージを自動的にインストールする方法?

より具体的には、あなたが C-h v package-activated-list、表示されている値をコピーし、prelude-packagesの値として挿入すると、emacsは起動時にこれらのパッケージが自動的にインストールされるようにします。

66
ataylor

標準的な方法論が最適です(ayaylorによって説明されています)。以下は、より不格好な方法です。

M-x list-packages。 C-s installed インストール済みパッケージの最初の行が見つかるまで。で選択を開始 C-SPC。組み込みのパッケージに到達するまで下に移動します。コピーする M-w。 C-x b 新しいバッファ用。貼り付け C-yC-x C-s ファイルを保存します。

私が見る唯一の利点は、これが少し説明的であることです。パッケージの簡単な説明を表示します。いくつかのパッケージをインストールし、それを忘れたときに便利です。

14
knight17

パッケージ名のリストを指定してemacsパッケージを自動的にインストールする方法 で述べたように、必要なパッケージのバージョンも記録する方が良いでしょう。そのためには、次の機能を使用できます。

(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はデフォルトで各パッケージで利用可能な最新バージョンのみを取得するため失敗します。 要点

3
Felipe