<前の日記(2016-06-20) 次の日記(2018-12-03)> 最新

おおいわのこめんと (2016-09-06)


2016-09-06

[Comp] xtermの日本語文字幅

Linuxを1999年ごろからずーっと使っていて、 未だにデスクトップ環境を使わずに 素の fvwm を使っているような化石だったりするのですが、 何だかんだいって必要が出てきたので、 少し前に EUC-JP から UTF-8 にごそっと移行しました。 コンソールも kterm から xterm に。

でも、Unicode の日本語 (CJKV全般) の文字幅の扱いには いろいろ問題があって、en-US.UTF-8 だけでなく ja_JP.UTF-8 ロカールでも ★ とか £ とかいろいろな文字が 半角幅になってしまうなど、なかなか困っていました。 最近になって、silenvxさんの記事 辺りを 参考に xterm の周辺をいじっていたのですが、 今度は aptitude など curses の罫線が崩れるなど、 それはそれで問題が生じるので、 ぼぎ〜てっくさんの xterm のバグっぽい仕様辺りも参考に、とりあえず 自分なりに解消してみました。

具体的には、「日本語の罫線って使わないよね?」ということで、 「CJK環境向けの全角優先の文字幅」「ただし罫線だけ半角」というロカールを作りました。 本当は xterm が、『DEC 罫線のエスケープシーケンス [ESC ( 0]*1 で出した罫線』を強制で半角扱いしてくれれば小細工要らないんですが、 プログラムにパッチ当てるのは後のメンテナンスが面倒そうなので、小手先で。

Debianでの使い方 (wheezy-lts で確認):

  • まず、こちらにある UTF-8-CJK-LD.gz を、 /usr/share/i18n/charmaps/ に置きます。
  • /etc/locale.gen の、ja_JP.UTF-8 の行を、
    ja_JP.UTF-8 UTF-8
    から、
    ja_JP.UTF-8 UTF-8-CJK-LD
    に置き換えます。 ファイルに「自動生成が云々」と英語で書いてある場合は、 上書きされないようにその指示に従ってください。*2
  • /usr/sbin/locale-gen を実行します。

root なしで解決したいとか、他のディストリビューションの場合は、 ぼぎ〜てっくさんの記事やその周辺を参考に、各自工夫してください。

とりあえずこれで、xterm はそこそこ「希望通り」に動いてくれるように。 思いっきり「Unicode の標準に準拠しない解決」なので、正式採用される見込みは0ですが、個人的には満足。

screen とか putty は世話しきれないので、silenvx さんのサイトで見つけた terminfo の改変でごっそり罫線機能を削除して、 罫線を ASCII で表示するようにしてしまいました。

*1 これ、DEC 罫線って正式なコードじゃなくて、思いっきり user-defined の外字扱いなんですね。

*2 手元の2つの環境で食い違っていて、どちらがより「クリーン」なのかがわからないんです...。

[TrackBack URL: http://www.oiwa.jp/~yutaka/tdiary/trackback.rb/20160906 (note: TrackBacks are moderated: spams will not be shown.) ]

大岩 寛 (おおいわ ゆたか) <yutaka@oiwa.jp.nospam ... remove .nospam> .

Copyright © 2005-2014 Yutaka OIWA. All rights reserved.
Posted comments and trackbacks are copyrighted by their respective posters.

記事の内容について (Disclaimer / Terms and Conditions)