NTEmacs の vc-git で Cygwin の git を使う

訳あって NTEmacs 23.2.1 と Cygwin 1.7.6 の git 1.7.1 を使っている。 これがどうも NTEmacs の vc-git と相性が良くないようだ。 log (C-x v l) や diff (C-x v =) は便利に使えるのだが、 commit (C-x v v) が期待通りに動かない。

デフォルトだと日本語が文字化けしてしまう。 しかしこれは .emacs あたりに

(setq git-commits-coding-system 'sjis)
とか書いておけばいいみたい。

ただ、 commit log メッセージがダブルクォートで囲まれてしまう。

そこでちょっと ELisp を追っかけてみた。 すると vc-dispatcher.el の vc-do-command 関数の中で、

(let (...
      (w32-quote-process-args t))

という式があった。 この変数を C-h v で調べてみると、 プロセスを実行する時に引数の空白をクォートする等の目的で使われているみたいだ。

そこで tnil に書き換えてみたところ、 ログメッセージがダブルクォートで囲まれなくなった。 ああよかった、 と思ったのもつかの間、 今度はメッセージに改行があるとエラーになるようになってしまった。 どうにも 2 行目の文字列がファイル名と認識されているようだ。

ためしにログメッセージがシングルクォートで囲まれるようにしてみたら、 見事、 シングルクォートで囲まれたメッセージが記録されてしまった。 これじゃあダブルクォートと同じことだ。

ちなみに Git と一緒に配布されている git.el は、 ちょっと修正する必要はあるけれども、 日本語も複数行もうまくいくようだ。

今のところ複数のファイルにまたがって修正していくことが少ないから、 log と diff は VC の方が便利なんだよね。 commit する時だけ git.el の方を使うようにしてみようか。