2010年9月16日木曜日

NTEmacs+vista compilation-modeで文字化けする場合の対策

12年前,会社の先輩にMeadowの存在を教えてもらってから,ずーっとEmacsを使い続けている.
今ではEmacsなしの仕事は考えられないのだ
Windows XPまでは Meadowにお世話になったが,Vistaを使うようになってからはMeadowが動かないのでやむなくNTEmacsへ切り替えた.

最近になってWindowsで動作する簡単なテストプログラムを開発するときに重いVisual Studioを起動するのがめんどくさくなって,NTEmacs+make+VCという組み合わせを使う機会が増えてきた.
そうしたら NTEmacsのcompilation-modeに表示されるVCコンパイラの吐き出す日本語のエラーメッセージが文字化けするではないか.
しばらくは我慢してcmd.exeを起動し,日本語のエラーメッセージを確認してたけど,ダラダラと長ーい行数のエラーが吐出されたときは全てが表示されず困ったことになった.
ググって調べたところ下記のコードを.emacs.elに書いて解決に至った.
参考にしたサイトは,間違ってとじてしまったので参照元は後ほど.
解決への重要なアドバイスを頂いた@osamuさんに感謝!

(setq compilation-read-command t)
(defun compile (command)
(interactive
(if (or compilation-read-command current-prefix-arg)
(list (read-from-minibuffer "Compile command : "
compile-command nil nil
'(compile-history . 1)))
(list compile-command)))
(setq compile-command command)
(save-some-buffers (not compilation-ask-about-save) nil)
(let ((coding-system-for-read 'sjis-dos) ;; この辺を適当なコード名にする
(coding-system-for-write 'sjis-dos))
(compile-internal compile-command "No more errors")))

(add-hook
'shell-mode-hook
'(lambda ()
(set-buffer-process-coding-system 'sjis 'sjis)))