2010-04-24

Meadow上でMagitを使う設定(git-encwrapper使用)

言語まわりの方針・設定はこの前のままで。

.emacs

; *Meadowとgitとの間はutf-8にする。
;  コミットログをutf-8で記録したい。
;  i18n.commitEncodingはコミット時に変換してくれるわけではないっぽい。
;  また、magit.el内でgit log --format %sを使っている場所があるので、
;  どうしてもutf-8でやりとりせざるを得ない。
;  この設定はshell-file-name経由でgitを呼ぶ場合には適用されないので注意。
(modify-coding-system-alist 'process "git" '(utf-8-dos . utf-8-unix))

; magitを使えるようにする。
(cond ((locate-library "magit")
       (require 'magit)

       ;; git diffとgit applyの文字エンコーディングを
       ;; .gitattributesのencoding属性に合わせて調整するラッパーを使う。
       ;; git-encwrapperをコンパイルしてパスの通ったところに置くこと。
       (setq magit-git-executable "git-encwrapper")

       ;; magitがshell-file-name(sh.exe)経由でgitを呼ぶとき、utf-8で入出力する。
       ;; magitがshell-file-nameを使ってprocess-fileやcall-processする関数には次のものがある(magit-0.7では)。
       ;; - magit-shell-command-to-string
       ;; - magit-git-exit-code
       ;; - magit-run-shell
       ;; これらの呼び出し時、一時的にprocess-coding-system-alistを書き換える。
       ;;
       ;; shに対するprocess-coding-system-alistをutf-8にしている人は不要。
       (defun add-sh-utf8-process-coding-system-alist ()
         (cons (cons shell-file-name '(utf-8-dos . utf-8-unix)) process-coding-system-alist))

       (defadvice magit-shell-command-to-string (around magit-shell-command-to-string-proc-coding activate)
         (let ((process-coding-system-alist (add-sh-utf8-process-coding-system-alist)))
           ad-do-it))

       (defadvice magit-git-exit-code (around magit-git-exit-code-proc-coding activate)
         (let ((process-coding-system-alist (add-sh-utf8-process-coding-system-alist)))
           ad-do-it))

       (defadvice magit-run-shell (around magit-run-shell-proc-coding activate)
         (let ((process-coding-system-alist (add-sh-utf8-process-coding-system-alist)))
           ad-do-it))

 ))

2010-07-07追記: magit-0.8.1ではshell-file-name経由でgitを呼ぶ箇所は無くなったので、上記のdefun~defadvice部分は削除してよい。