Fork me on GitHub

Windows版Emacsでvc-gitを使う

  • Nov 20, 2013

概要

Windows版Emacsは動作も速くなってかなり使えるようになりましたが、 vc-gitが日本語ファイル名でうまく動作しないという問題があったので、 その解決方法です。

環境

  • Windows 7
  • Emacs 24.3
  • Cygwin 1.7.20
  • [Git] for Win 1.8.4

インストール

Emacsは、Chocolateyを使うと

> cinst emacs

でインストールできます。

ここでは、

set LANG=ja_JP.UTF-8

となっていて、Gitは全てUTF-8を前提にしています。

設定

環境変数 HOME を設定した後、~/.emacs.d/init.elに、 以下の設定を追加します。

(set-language-environment 'utf-8)
(setq file-name-coding-system 'cp932)
(setq default-process-coding-system '(utf-8 . cp932))
(setq git-commits-coding-system 'utf-8)

要はgitコマンドを実行する際に、引数に渡すファイル名やらを cp932(WindowsのシフトJIS)に文字コード変換してやります。

これでvc-print-logvc-diffもうまく動くようになりました。

おまけ

どうもfile-name-coding-systemを指定しただけでは、そもそも 日本語のファイルをGitに入っていると認識してくれない。

そこで、lisp/vc/vc-git.elvc-git-registeredあたりを追っていくと、

(vc-git--out-ok "ls-files" "-c" "-z" "--" name)

でチェックしていることがわかる。

そこで試しに、*scratch*モードで

(cd "hoge")
(vc-git--out-ok "ls-files" "-c" "-z" "--" "日本語ファイル")

とすると、ファイル名が返ってこない。 どうもvc-git--out-okprocess-fileを使っているようなので、 default-process-coding-systemあたりが怪しい感じがする。

Emacsのマニュアルを見るとcons cellを設定しろというので、

(setq default-process-coding-system '(utf-8 . cp932))

としてから、

(vc-git--out-ok "ls-files" "-c" "-z" "--" "日本語ファイル")

を実行すると、無事ファイル名が返ってきた。

参考