基本的なEmacs構成としてpreludeを使用しています。パッケージマネージャーから多数のパッケージをインストールしましたが、別のコンピューターで設定を使用したいです。
インストールしたパッケージを持ち歩きたくないし、リストを手動で作成したくない。
すべてのインストール済みパッケージのリストをprelude-package.elまたは他のファイルに保存して、この構成を他のマシンに持って行くと、最初の使用時に自動的にインストールされるようにする方法は何ですか?
変数package-activated-list
から、現在インストールされているパッケージ(組み込みパッケージを除く)のリストを取得できます。起動時にそれらを自動的にインストールするには、この質問を参照してください: パッケージ名のリストを指定してemacsパッケージを自動的にインストールする方法?
より具体的には、あなたが C-h v package-activated-list、表示されている値をコピーし、prelude-packages
の値として挿入すると、emacsは起動時にこれらのパッケージが自動的にインストールされるようにします。
標準的な方法論が最適です(ayaylorによって説明されています)。以下は、より不格好な方法です。
M-x list-packages。 C-s installed インストール済みパッケージの最初の行が見つかるまで。で選択を開始 C-SPC。組み込みのパッケージに到達するまで下に移動します。コピーする M-w。 C-x b 新しいバッファ用。貼り付け C-y。C-x C-s ファイルを保存します。
私が見る唯一の利点は、これが少し説明的であることです。パッケージの簡単な説明を表示します。いくつかのパッケージをインストールし、それを忘れたときに便利です。
パッケージ名のリストを指定して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
はデフォルトで各パッケージで利用可能な最新バージョンのみを取得するため失敗します。 要点