Emacsがインストールしたパッケージをエクスポートしますか?


10

emacs 24.4を使用しています。Mx list-packagesディレクティブを使用して、約1年間使用するインストール済みパッケージを多数追加しました。インストールしたパッケージのリストを他の場所で使用するためにエクスポートしたいと思います。.emacsをコピーすると、起動時にいくつかのエラーが発生し、メモリを動かして特定のものをインストールします。私は.emacs.dをコピーできると思いますが、それはおそらく悪い考えのようです。

インストールされたパッケージのリストを、外部のマシンで簡単に取得するために使用できるファイルにダンプするために発行できる手順またはディレクティブはありますか?



1
.emacs.dディレクトリをコピーする(またはできればバージョン管理下に置く)ことは、一般的には良い考えです。(これを行うことにした場合は、に名前を変更~/.emacsするのも賢明~/.emacs.d/init.elです。)
phils

回答:


5

ディレクトリに~/.emacs.d/elpaは、でインストールされたすべてのパッケージが含まれていますlist-packages。このディレクトリをコピーできます。

Emacsのバージョン間でバイトコンパイルされたファイルには互換性がないと思うので、おそらく(byte-recompile-directory "~/.emacs.d/elpa" 0 t)0尋ねないこと、t強制的に再コンパイルすることなど)すべてをバイト再コンパイルすることもできます。


この質問をして以来、私はこの戦略を数回使用しています。入力いただきありがとうございます。
sanimalp

4

package.elファイルを調べたところ、変数が見つかりましたpackage-alist。これは、インストールしたパッケージに必要なパッケージを含む、インストールされたすべてのパッケージのリストのようです。

インストールしたいパッケージ名のリストが必要な場合は、次のコードでこのリストからパッケージの名前を*Messages*バッファーに書き出します。

(dolist (p1 (sort (mapcar 'symbol-name (mapcar 'car package-alist)) 'string<))
  (message "%s" p1))

私はLispプログラマではないので、誰かがこのコードのはるかに優れたバージョンを書くことができると確信しています。

新しいPCにすべてのパッケージをインストールするために、オプション付きのパッケージ使用コードも使い始めました:ensure t


2

まだインストールされていない場合は、パッケージをインストールする方法の1つとして、initファイルを更新して、次の行を追加する必要があります。

(defvar my-packages
  '(color-theme db-pg db kv magit-push-remote magit-tramp
                magit git-rebase-mode git-commit-mode pg
                pretty-lambdada projectile pkg-info epl dash
                python-mode rich-minority s yasnippet yasnippet-bundle
                use-package key-chord undo-tree guide-key move-text
                openwith ack ag aggressive-indent nginx-mode multiple-cursors
                smartparens with-editor haskell-mode)
  "A list of packages to ensure are installed at launch.")

(defun my-packages-installed-p ()
  (loop for p in my-packages
        when (not (package-installed-p p)) do (return nil)
        finally (return t)))

(unless (my-packages-installed-p)
  ;; check for new packages (package versions)                                  
  (package-refresh-contents)
  ;; install the missing packages                                                                               
  (dolist (p my-packages)
    (when (not (package-installed-p p))
      (package-install p))))

my-packages変数を変更し、インストールするパッケージを追加/削除します。M-x describe-variable package-activated-list現在インストールされているパッケージのリストが表示されます。

その後、共有する唯一のものはあなたのinitファイルです。お役に立てば幸いです。


おっと、あなたはリストをダンプする方法に答えたようです。おそらくそれはあなたの答えでもっと目立つようにすべきですか?
verdammelt 2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.