org-modeやらmagitやらWanderlustやら、Emacs Lispを最新版へ更新するのが億劫になってきたのでEmacsのパッケージ管理システムを検討してみました。
Emacs24からはpackage.elというのが標準で使えるようになったそうで、package-list-packagesでいきなりパッケージのリストが表示されるというお手軽さなのです。
でも、このシステムはパッケージのリポジトリへの登録にハードルがあるらしく、扱えるパッケージに限りがあるようなのです(参考:elispをpackageとel-get両方で管理する - $shibayu36->blog;)。
なので、el-getを試してみることにしました。公式サイトは dimitri/el-get です。
インストールは簡単で、scratchバッファなどから次のelispを実行するだけ。
;; So the idea is that you copy/paste this code into your *scratch* buffer, ;; hit C-j, and you have a working el-get. (url-retrieve "https://raw.github.com/dimitri/el-get/master/el-get-install.el" (lambda (s) (goto-char (point-max)) (eval-print-last-sexp)))
のはずだったのですが、Windows上でgnupackのemacs-24.3-20130503を使っていると落ちます。強制終了です。
どうも、httpsから任意のページをurl-retrieveしようとしただけで落ちるみたいです。
Emacs内部に組み込まれたgnutls、実際にはlibgnutls-28.dll内で問題が起きるようです。
解決方法は elpa形式じゃない野良elispをpackage-installする #Emacs @robario や cookieswap補助、gist.el、ちょっとtombloo - うぇぶとらばぁす にありました。
(eval-after-load "gnutls" '(setq gnutls-trustfiles (mapcar 'expand-file-name gnutls-trustfiles)))
gnutlsが読み込まれる前に上を実行しておけば(.emacsのel-getの設定等より先に書いておけば)落ちなくなりました。
どうもlibgnutls-28.dllがcygwin的なパスを認識できないことが原因のようです。expand-file-nameを通すことでWindows形式の絶対パスに展開され、落ちなくなるようです。
というわけで、無事にインストールできました。el-get-list-packageでパッケージの一覧を見ることが出来ます。iでマークしてxでインストールできます。
公式の Basic Setup のところに書いていますが、.emacsは次のようにすると良いみたいですね。
(add-to-list 'load-path "~/.emacs.d/el-get/el-get") (unless (require 'el-get nil 'noerror) (with-current-buffer (url-retrieve-synchronously "https://raw.github.com/dimitri/el-get/master/el-get-install.el") (goto-char (point-max)) (eval-print-last-sexp))) (add-to-list 'el-get-recipe-path "~/.emacs.d/el-get-user/recipes") (el-get 'sync)
こうすると、el-getがインストールされていなければ自動的にインストールされます。
.emacsをバージョン管理して他のマシンと共有している場合は便利ですね。
.emacsを共有している他のマシンにも同じパッケージを自動的にインストールしたいことがあると思います。
そういう場合は、
(el-get 'sync 'color-moccur 'magit )
のように'syncの後にパッケージ名を書いておくと良いみたいです。(参考: 自分の el-get のワークフローについて整理する - そんなこと覚えてない)