NTEmacs で git.el を使ってコミットするときに日本語が使えない

特殊な環境なのかもしれないので役に立たない情報になるだろうが、個人的には困ったので書いておく。

環境は、Windows で、NTEmacs 23.1*1Cygwin の git 1.6.1.2*2、git のソースアーカイブに付属の git.el を使っている。

git-commit-file でコミットするときにコミットメッセージに日本語が含まれていると、コミットがうまくいかない。ASCII 文字のみなら問題ない。

git.el の git-update-ref 関数あたりを調べてみた結果、とりあえず以下の workaround を .emacs.el へ加えればよさそうだ。

(eval-after-load "git"
  '(defun git-update-ref (ref newval &optional oldval reason)
     "Update a reference by calling git-update-ref."
     (let ((args (and oldval (list oldval))))
       (when newval (push newval args))
       (push ref args)
       (when reason
         (push (format "'%s'" reason) args)
         (push "-m" args))
       (unless newval (push "-d" args))
       (apply 'git-call-process-display-error "update-ref" args))))

要するに、コミットメッセージをシングルクォートで囲えばいい。直接 git.el を書き換えてもいいだろう。

*1:2ちゃんねるの有志の方にいただいたもの。

*2:新しくしよう。