_ [comp] 続々・rxvt-unicode ×問題再び

いろいろ腑に落ちないけど、locale のほうをいじってみることにした。てか、そもそも locale って何からどうやって生成されてるんだ? ということで /usr/sbin/locale-gen を見てみる。これ自体シェルスクリプトで、実体の /usr/bin/localedef に渡す引数とかをいろいろやってるようだ。locale.gen(5) より、ja_JP.UTF-8 だと /usr/share/i18n/locales/ja_JP と /usr/share/i18n/charmaps/UTF-8.gz が locale の基になるようだ。で、/usr/share/i18n/charmaps/UTF-8.gz を見てみると、

% Character width according to Unicode 3.2.
% - Default width is 1.
% - Double-width characters have width 2; generated from
%        "grep '^[^;]*;[WF]' EastAsianWidth.txt"
%   and  "grep '^[^;]*;[^WF]' EastAsianWidth.txt"
(略)
WIDTH
(略)
<U3041>...<U3096>       2
(略)

どうやら、デフォルトの文字幅は 1 で、EastAsianWidth.txt で W(Wide) か F(FullWidth) になっているものの文字幅が 2 になるようだ。つまり、A(Ambiguous) の文字幅はデフォルトの 1 ということになる。 ということで、A(Ambiguous) の文字幅は 2 に決め打ちしたリストを作って、/usr/share/i18n/charmaps/UTF-8.gz にねじ込んだ UTF-8-EAW-FULLWIDTH.gz なるものを作ってみた(2015/12/10 追記: これはだいぶ古くなっています。East Asian Ambiguous Width問題の修正ロケール にて新しいものが配布されています)。これを /usr/share/i18n/charmaps/UTF-8-EAW-FULLWIDTH.gz に配置して、/etc/locale.gen を

ja_JP.EUC-JP EUC-JP
ja_JP.UTF-8 UTF-8-EAW-FULLWIDTH

として locale-gen してみた。

# locale-gen 
Generating locales (this might take a while)...
  ja_JP.EUC-JP... done
  ja_JP.UTF-8-EAW-FULLWIDTH.../usr/share/i18n/charmaps/UTF-8-EAW-FULLWIDTH:28441: unknown character `U00002614'
 done
Generation complete.
#

なんか警告が出たけど生成は成功したようだ。これで生成された ja_JP.UTF-8 locale 上だと、素の rxvt-unicode でも×とかの幅は当たり前だけど全く問題ない。 この捏造 ja_JP.UTF-8 locale があれば個人的には今のところ問題ないんだけど、ひとまず食い下がってみた

_ [debian] iceweasel 2.0.0.3-1vd1

などのパッチ

  • vd_iceweasel-2.0.0.3_without-gconf.patch
  • vd_bugzilla-jp_bug-4575_attachment-3106+bugzilla-org_bug-337036_attachment-221583.patch
  • vd_bugzilla-org_bug-255990_attachment-213337_iceweasel-2.0.0.1.patch
  • bugzilla-org_bug-330852_attachment-215418.patch

を当てて作成。 #413954 だけど、graphicsmagick-imagemagick-compat が Build-Conflicts に指定されて回避されている。