2018年10月27日

(neo)mutt で半角カナを表示させる

mutt (neomutt) を ISO-2022-JP + 半角カナ、通称 ISO-2022-JP-MS に対応させる話。

2つの iconv

大抵のUNIXマシンに入ってるのが GNU の Cライブラリ (glibc / libc) による iconv。

$ dpkg -S /usr/bin/iconv
libc-bin: /usr/bin/iconv

$ /usr/bin/iconv --version
iconv (Ubuntu GLIBC 2.27-3ubuntu1) 2.27
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Writen by Ulrich Drepper。

この iconv には通常の ISO-2022-JP とその改正版しかない。

$ /usr/bin/iconv -l | grep -Ei "2022-?jp"
CSISO2022JP//
CSISO2022JP2//
ISO-2022-JP-2//
ISO-2022-JP-3//
ISO-2022-JP//
ISO2022JP//
ISO2022JP2//

一方で libiconv には前回の記事で見たように ISO-2022-JP-MS が入っている(はず)。そういうわけでこっちの iconv を使ってみる。

libiconv のインストール

ソースを落としてきて make。とくに追加で必要な依存関係はなかった。glibc を完全に置き換えるのは怖いのでデフォルトの /usr/local ではなく /opt に入れたのと、ローカライズが必要ないのでディスク節約も兼ねて NLS を無効化。

tar xf libiconv-1.15.tar.gz
cd /var/tmp/libiconv-1.15/
./configure --prefix=/opt/libiconv --disable-nls
make
sudo checkinstall

確認。

$ /opt/libiconv/bin/iconv --version
iconv (GNU libiconv 1.15)
Copyright (C) 2000-2017 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by Bruno Haible.

$ /opt/libiconv/bin/iconv -l | grep -Ei "2022-?jp"
ISO-2022-JP CSISO2022JP
ISO-2022-JP-1
ISO-2022-JP-2 CSISO2022JP2
CP50221 ISO-2022-JP-MS

glibc の実装と比べると -MS が入っている。一方で -3 が入っていないが、これはリジェクトされたものらしい。

muttの設定

あとは .muttrc でエンコーディング名をエイリアス化(?)する。ついでに Content-Type で文字コードを設定されていない場合に -MS とみなす。

charset-hook iso-2022-jp iso-2022-jp-ms
set assumed_charset="iso-2022-jp-ms:euc-jp:shift_jis:utf-8"

最後に neomutt の呼び出し時に libiconv の方の iconv を使うようにする。
libiconv は一時的に libc を上書きできる機構を提供しているので環境変数をセットするだけで libiconv の方が呼ばれる。

alias neomutt="LD_PRELOAD=/opt/libiconv/lib/preloadable_libiconv.so neomutt"


posted by かぷらす at 23:35| Comment(0) | 作業記録・備忘録 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
コチラをクリックしてください