GitのコミットメッセージがEmacsで文字化け

僕はEDITOR=emacsclientして、GitのコミットメッセージをEmacsで書いている。git commit --amendすると直前のコミットメッセージがEmacsのバッファに挿入されるんだけど、UTF-8なのにShift_JISと判定されて文字化けする問題にぶつかった。「お前コミットメッセージ日本語で書くの?」という話はさておき、これは困る。

「git emacs 文字化け」でググってみたら、git のコミットメッセージを Emacs で書くときに自動で文字コードを指定するというページが見つかった。これでも解決しそうだけど、これは他ではShift_JISを使うけど、GitのコミットメッセージはUTF-8で書きたい場合だろう。

どこにもShift_JISを使う設定をしていないのに、Shift_JISが出てくる原因を突き止めないと本質的な解決にはならない。それでdescribe-coding-systemの表示を注意深く見たら、いつもは見ない下のほうにこんなのがあった。

Priority order for recognizing coding systems when reading files:
  1. japanese-shift-jis (alias: shift_jis sjis)

なるほど自動認識の優先順位はShift_JISが一番上なのね。というわけで以下のようにして解決。

(set-coding-system-priority 'utf-8)

この問題は最近のEmacsに慣れてる人なら3秒で解決できた気がする。「coding system priorityではまっていいのは小学生までだよねー」みたいな。