11

el-getポータブルな emacs 構成セットアップを実現するのに大いに役立ちます。アイデアは、emacs 構成ファイルで必要なパッケージを宣言し、そのファイルをリポジトリにプッシュし、同一の emacs 構成が必要なすべてのコンピューターでそれをプルすることです。コードは次のようになりますelisp

(setq my-packages (append '(el-get switch-window yasnippet ...)
    (mapcar 'el-get-source-name el-get-sources)))                  
(el-get 'sync my-packages)                                                

el-getパッケージが自動的にインストールされ、適切に初期化されるようにします。ただし、パッケージを逆参照してもアンインストールされないというのが私の理解です。また、手動でアンインストールする場合は、すべてのコンピューターで手動で行う必要があります。言い換えれば、el-get は、真にポータブルなソリューションを実現するには道のりの半分しか進んでいません。私の質問は、init.el でパッケージを逆参照するだけでパッケージをアンインストールする elisp コードを書いた人がいるかどうかです。または、完全に移植可能な emacs 用の宣言型依存関係管理ソリューションを他の場所で探すべきでしょうか?

4

2 に答える 2

9

最終的に別の解決策を選択したため、ここで自分自身に答えています。

philsの答えはまだ有効ですが、.emacs.dディレクトリをバージョン管理下に置くのは面倒で、公平を期すために、偽のサブモジュールに煩わされたくありませんでした。

代わりに私がしたこと: el-get のメンテナーである Dimitri に連絡し、問題を提示しました。

ディミトリは次のように述べています。

パッケージの現在のリストで呼び出す必要があり、すでにローカルにインストールされているが提供されたリストにないパッケージを el-get-remove する el-get-cleanup 関数を追加することがわかりました。

(el-get-cleanup my-packages)

必要に応じてユーザー初期化ファイルからそれを使用するか、時々ルーチンとしてそれを行うことができます。

彼の指導を受けて、私は問題の関数を書きました。

(defun el-get-cleanup (packages)
  "Remove packages not explicitly declared"
  (let* ((packages-to-keep (el-get-dependencies (mapcar 'el-get-as-symbol packages)))
         (packages-to-remove (set-difference (mapcar 'el-get-as-symbol
                                                     (el-get-list-package-names-with-status
                                                      "installed")) packages-to-keep)))
    (mapc 'el-get-remove packages-to-remove)))

ああ、オープンソースの喜び...

(私のブログ投稿も参照してください)

于 2012-09-28T01:19:23.783 に答える
4

何らかの形式のバージョン管理と組み合わせて el-get を使用する必要があります。これにより移植性が提供されるため、パッケージを削除して結果をリポジトリにコミットすると、他のインスタンスがそれらの変更をプルすると、パッケージもアンインストールされます。

パッケージ ファイルを管理するために el-get に残している場合、パッケージが 1 つのインスタンスから削除された後も、それらのファイルは他のコピーにまだ存在している可能性がありますが、el-get のステータス ファイルと自動ロード ファイルがリポジトリにある場合は、各パッケージの状態は正しいはずです。

個人的には、パッケージをインストールした後、すべてのファイルをリポジトリにコミットすることをお勧めします。そうすれば、パッケージを削除し、変更をコミットし、それらの変更を別のインスタンスからプルすると、両方のコピーが同じ状態になります。

さらに、Emacs 構成の新しいインスタンスをセットアップする場合、リモート ソースの可用性、一貫性、または永続性を信頼することは決してありません。動作するシステムを取得するために必要なのは、リポジトリのクローンを作成することだけです。

そのため、パッケージのインストールと更新には el-get を使用し、バージョン管理を使用して移植可能にします。

于 2012-09-24T10:58:28.940 に答える