■ Emacs 共通の設定
【お知らせ】
<2019/02/12 追記>
漢字をプロンプトの文字化けを回避するため、利用するフックを comint-input-filter-functions から comint-output-filter-functions に変更しました。(でも、時々文字化けは発生します。原因調査中。)
<2018/07/29 追記>
decode の coding-system を設定する方法を advice から hook に変更しました。
【本題】
shell-mode で複数の漢字コードを混在して利用できるようにするための設定です。
<前提設定>
(prefer-coding-system 'utf-8-unix)
;; プロセスが出力する文字コードを判定して、process-coding-system の DECODING の設定値を決定する
(setq default-process-coding-system '(undecided-dos . utf-8-unix))
<本設定>
;; カレントバッファが shellバッファのときに、動いている process の decode の coding-system
;; の設定を undecided にする
(defun set-process-coding-system-for-decode (ignore)
(let ((process (get-buffer-process (current-buffer))))
(when process
(let ((coding-system (process-coding-system process)))
(set-process-coding-system process
(coding-system-change-text-conversion
(car coding-system) 'undecided)
(cdr coding-system))))))
;; shellバッファで、コマンド実行結果出力前に set-process-coding-system-for-decode を実行する。
;; この設定により、shellバッファで utf-8 の出力をする UNIX コマンドと、cp932 の出力をする
;; Windows コマンドの漢字の文字化けが回避される。
(add-hook 'shell-mode-hook
(lambda ()
(add-hook 'comint-output-filter-functions
'set-process-coding-system-for-decode nil t)))
comint-mode で動作するバッファすべてに対して本設定を適用したい場合は、上記の最後の4行の設定を次の設定に置き換えてご利用ください。
(add-hook 'comint-output-filter-functions 'set-process-coding-system-for-decode)
<変更履歴>
- 2015/05/15 このページを作成した。
- 2015/09/10 advice を Emacs-24.4 以降の書式に見直した。
- 2018/07/29 decoding-system を設定する方法を advice から hook に変更した。
- 2018/09/05 一応、前提となる設定を追記した。
- 2019/02/12 漢字をプロンプトの文字化けを回避するため、利用するフックを comint-input-filter-functions から comint-output-filter-functions に変更した。
最終更新:2019年11月01日 12:36