diff-mode-hook ではダメだった。

どうもりんこ。
こないだ言っていた件です。

結果

いうまでも無く,惨敗。

M-x git-status から見る diff が化けるのでなんとかしたい。

というのをモットーに,今回の大会へ望んだわけです。
しかし,下記の方法では効果がなかったので,やらないようにしましょう。

  • *git-status* は,git-status-mode
  • *git-diff* は,diff-mode

なので,diff-mode.el を眺めてみる。diff-mode-hook があることに気付く。
下のような関数をこしらえて試してみると,
両モードにおいて,たしかにモードラインには,`u' とでる。
出るが,化ける。
ソースコードの日本語部分は,utf-8-unix

(defun my-diff-mode-hook-func ()
  (setq buffer-file-coding-system 'utf-8))
;;(add-hook 'diff-mode-hook 'my-diff-mode-hook-func)
;;(remove-hook 'diff-mode-hook 'my-diff-mode-hook-func)

(defun my-git-status-mode-hook-func ()
  (setq buffer-file-coding-system 'utf-8))
;;(add-hook 'git-status-mode-hook 'my-git-status-mode-hook-func)
;;(remove-hook 'git-status-mode-hook 'my-git-status-mode-hook-func)

なので,remove-hook で hook を取り除く。
余談ですが,hook する際 (lambda () ...) みたいにすると,
remove-hook するときにどうするんだ? となるわけで,
なるたけ無名関数? は使わない方がいいかと,僭越ながら,思います。

次の一手

なし。あるとすれば,どういう流れで diff の結果がバッファに出力されるかを
調べればわかりそうだが,そこまでのテクがないという罠。

感想

まだ負けてない!
けど,諦めてしまいそうな予感。