書き散らかし:[2022-05-14 土]
Table of Contents
-
- magit 導入できない問題:解決:EMACS:MSYS2:
- Windows で使う文字コードを検討:メモ:ENVIRONMENT:
- magit で文字化け:解決:EMACS:GIT:
- emacs 文字コード設定(init.el):EMACS:
magit 導入できない問題:解決 :EMACS:MSYS2:
先日までインストールできなかったのですが、結局、gnupg を導入してあげ ると EMSCS でパッケージインストールすることができました。
※M-x package-list-packages を実行(M-x package-refresh-contents を忘れずに)
Windows で使う文字コードを検討:メモ :ENVIRONMENT:
- 将来的には、UNICODE になっていく → 流れは、 Unicode UTF-8 BOMなしの方向らしいです。
- 20219年にメモ帳の文字コードが、UTF-8 CR/LF がデフォルト設定になった
- 改行コードを LF にするか、 CR/LF にするか悩む・・・。
magit で文字化け:解決 :EMACS:GIT:
Magit は導入できたのですが、ステータス表示で文字化けしてしまったので 解析します。
最初に、Emacs の .init.elでの文字コード設定を整理し、調査を進めます。
MSYS の文字コードは utf-8 なので init.el の以下の設定が問題になって いるかもしれない。
(setq default-process-coding-system '(undecided-dos . utf-8-unix))
→ init.el をコメントアウトしてもmagit の表示はかわらなかった。
→ ちなみにコメントアウトした状態での値(default-process-coding-system)は (japanese-shift-jis-dos . japanese-shift-jis-unix) となっています。
→ 次のように設定してもだめ。
(setq default-process-coding-system '(utf-8-unix . utf-8-unix))
magit 表示の文字コード
Emacs の magit バッファ上で次のように SJIS になっています。
Default coding system (for new files): S -- japanese-shift-jis (alias: shift_jis sjis)
→ 新しいバッファを開くときの coding system を utf-8 にすればよいのではないだろうか?
新しいバッファを開くときのコーディングシステムが選択できないか調査する
参考: http://blog.livedoor.jp/tek_nishi/archives/8698333.html
これは参考になるが、新しいファイルの場合なので非該当。
(set-coding-system-priority 'utf-8) 参考: https://kfujieda.hatenablog.com/entry/20130905/1378361586
これが有力と思われたが、残念ながら改善されなかった。ただし、 "(コミット時に)UTF8なのにshift_jisと判定されて文字化けする"、 と書いてあるところがある。これは参考になるかもしれない。
→ set-coding-system-priority を utf-8 にしているのに describe-coding-system では sjis のままだった。なぜか?
msys2 のコンソールで echo コマンドを使ってリダイレクトすると、utf-8 で出力されている。
- msys2 のコンソールで git log コマンドを使うと文字化けする。
msys2 のコンソールで git log コマンドをリダイレクトしてファイル に落とし、ファイルを開くと sjis に近い文字で保存されているのがわ かる。文字化けの様子↓。
ツコツミツッツトツつオツてみて禿コツ本ツ語がツ可サツつッツるこツとづーツ確ツ認ツつキツづゥツ。
git の文字コード設定がどうなっているのか調べる
init.el で coding-system を sjis に戻すようなところがないか確認する。
→ init.el内で、 (set-language-environment "Japanese") が (set-default-coding-systems 'utf-8) の後になっててこれが set-default-coding-systems を SJIS に戻していたこといたことが原因 と思われる。
つまり、set-language-environment "Japanese" にすると、暗黙的にsjis が選択されるということだろう。
(set-language-environment "Japanese") は、(prefer-coding-system 'utf-8) で代替できるはずなので、(set-language-environment "Japanese") をコメントアウトして問題がないか確認する。
→ 特に問題なかった
magit のコミットバッファは、 undicided-Unx だったが、 default-coding-systems が utf-8 ならコミット結果の文字化けが消えた。
【結論】
- magit のコミットログが文字化けしていたのは、utf-8 で構築していた msys2, emacs 環境で default-coding-systems が sjis になっていたから。
- これは, (prefer-coding-system 'utf-8) の後に (set-language-environment "Japanese") を init.el に書いていたから。
emacs 文字コード設定(init.el) :EMACS:
Reference
- 文字コード設定例
http://yohshiy.blog.fc2.com/blog-entry-273.html
- emacs マニュアル
https://ayatakesi.github.io/lispref/25.3/html/Default-Coding-Systems.html
キーワード調査
set-language-environment 言語環境の設定。これは Windows では SJIS(cp932)なのでこの指定を最初に行う。 UFT-8の設定はこの後に行うこと。
prefer-coding-system (prefer-coding-system 'utf-8)
- デフォルトの文字コードを設定するもの。
- こちらは改行コードとのセットのシンボルにも使える。
set-file-name-coding-system (set-file-name-coding-system 'cp932) → (set-file-name-coding-system 'utf-8)
locale-coding-system なし
default-process-coding-system
(setq default-process-coding-system '(undecided-dos . utf-8-unix))set-buffer-process-coding-system (add-hook 'shell-mode-hook (lambda () (set-buffer-process-coding-system 'utf-8-unix 'utf-8-unix) ))
set-keyboard-coding-system (set-keyboard-coding-system 'utf-8)
coding-system-put ;; UTF-8エンコードの表記変更 (coding-system-put 'utf-8 :mnemonic ?U) (coding-system-put 'utf-8-with-signature :mnemonic ?u)
eol-mnemonic-**
;; 改行コードの表記追加 (setq eol-mnemonic-dos ":Dos ") (setq eol-mnemonic-mac ":Mac ") (setq eol-mnemonic-unix ":Unx ") (setq eol-mnemonic-undecided ":??? ")set-default-coding-systemsデフォルトの文字コードを設定するもの。改行 コードとセットで使える prefer-coding-system の方がベターらしい。
set-terminal-coding-system
set-buffer-file-coding-system (set-file-coding-systemでもよい(エイリアス)) バッファの coding-system を変更する関数。
なお、ここで設定した値は変数 buffer-file-coding-system に保存される。 M-x help
v buffer-file-coding-system でヘルプと供に値を確認できる。 編集バッファの内容がファイルに書き出される時は、この変数に指定された文字コードで書き出される。 M-x describe-coding-system でも確認は可能。 set-coding-system-priority 文字コード自動判定の優先順位を決める。describe-coding-system の最後の方に優先順位が記載される。
process-coding-system-alist
ex
(add-to-list 'process-coding-system-alist '("git" utf-8 . utf-8)) (add-hook 'git-commit-mode-hook '(lambda () (set-buffer-file-coding-system 'utf-8)))
-
- LANG : ja_JP.UTF-8