この投稿はEmacs Advent Calendar 2012の14日目の記事です。 (Qiita で行われています)
"Emacs Advent Calendar 2012 - Qiita" - http://qiita.com/advent-calendar/2012/emacs
導入
Emacs の elisp 管理に el-get はいまやかかせないものになっています。
が、しかし git に依存しているため、 windows では工夫してやる必要がありました。 msysgit(msys) は大きな助けになります。
"Git for Windows" - http://msysgit.github.com/
msys の環境設定を引き継いだまま Emacs を起動するには msys のプロンプト上から
runemacs
を実行するだけですので簡単です。
したがってこれで終わり……とはいかないのが windows の悩ましいところですね。
問題
この状態で M-! で git が使えるにも関わらず、 el-get を使おうとするとエラーが発生してしまい el-get 自体の clone とインストールに失敗してしまいます。
この問題は msys に含まれる bin/install-info.exe が影響しています。 その顛末はこれを書いている今もここでやりとりがされています。
"install-info strangeness... · Issue #861 · dimitri/el-get" - https://github.com/dimitri/el-get/issues/861
問題としては、cygwin や msys が windows ネイティブの install-info.exe と 混ざって呼び出してしまうことのようですが、 てっとり早く回避方法を試しましょう。
回避方法
その1
msys の install-info.exe をリネームして使わないようにします。 強引ですが手間もかからず簡単です。 ただし今のところリネームによる問題は発生していませんが、 もしかすると Emacs 以外で問題が発生するかもしれません。
その2
el-get を手動で clone します。 el-get のインストールスクリプトは単純に el-get 管理下のディレクトリに まず el-get 自身を clone します。 ですのでこれを手で行なってしまいます。 msys のプロンプトで ~/.emacs.d/el-get などの環境に合わせた el-get の管理ディレクトリに移動して 手動で clone しましょう。
その2の方法で入れた el-get を el-get が誤作動で吹き飛ばした経験があるので、 現在は1の方法で運用しています。
おまけ
yasnippet は github 上で el-get でのインストールが紹介されています。
"capitaomorte/yasnippet · GitHub" - https://github.com/capitaomorte/yasnippet
しかし windows 環境では使用不可能なパスの形式で 一部の snippets が登録されています。 これらの snippets は git submodule で管理されているのですが、 公式で紹介されている el-get からのインストール方法を試すと git submodule も実行されてしまいます。 git submodule が実行されたタイミングで OS がエラーを出すために、 el-get が動作を停止した上 GUI では削除不可能なファイルが出来てしまいます。
この問題を回避するためには el-get に追加されたオプションを有効にしてインストールを行います。
通常、
(:name yasnippet
:website "https://github.com/capitaomorte/yasnippet.git"
:description "YASnippet is a template system for Emacs."
:type github
:pkgname "capitaomorte/yasnippet"
:features "yasnippet"
:compile "yasnippet.el"
のように記述する部分に :submodule nil を追加し、
(:name yasnippet
:website "https://github.com/capitaomorte/yasnippet.git"
:description "YASnippet is a template system for Emacs."
:type github
:pkgname "capitaomorte/yasnippet"
:features "yasnippet"
:compile "yasnippet.el"
:submodule nil
というように変更します。 これで git submodule は実行されないため問題が回避出来ます。 (当然本来であればインストールされる snippets がインストールされません。) あくまで回避策、ですね。
終わりに
windows 環境は地雷がいっぱいなので、 VM に Linux を入れてそこで Emacs を使うのが一番楽だなと感じる今日このごろです。