wcwidthパッチ、その3

8月18日の記事の続きです。

追加した文字

追加した文字は次の7文字です。

Unicode グリフ
00A2 ¢
00A3 £
00A5
00A6
00AC ¬
00AF
2212

なんというか、どこでも問題となっている文字ですね。

ちなみに、mutt-dev本家に投げることを前提として作っているので、この追加はEUC-JP/Shift_JISなどのレガシーエンコーディングでのみ有効です。UTF-8の場合は"Unicode Standard Annex #11"通りの挙動を行います。Ambiguousな文字は1桁として扱います。これを2桁として扱うために次のcjk_widthパッチを作りました。

cjk_width

Unicode上、文字幅がはっきりしない(Ambiguous)な文字がCJKに存在します。
このAmbiguousな文字をどう扱うかは端末次第です。

私が把握している端末の種類としては次の3つになると思います。
1. Ambiguousな文字を1桁で表示する端末
2. Ambiguousな文字を2桁で表示する端末
3. JIS X 0208にある文字を全て2桁で表示する端末
Muttの標準の挙動としては1にしか対応していません。cjk_widthパッチを当ててを$cjk_widthを設定することにより、2に対応します。3に完全には対応できていませんが、$cjk_widthを設定することである程度対応できます。異なる文字数は数文字ですし、文字幅が狭くなる方向で異なるので、表示はほとんどずれないと思います。