XTerm は、 XFree86 の配布物に含まれ、 世界で最も広く使われているターミナルエミュレータです。 私は、この XTerm の国際化にかかわるパッチを書いています。
ここで国際化とは、主に、LC_CTYPE ロケールに従って動作エンコーディングを 自動的に決定する、という意味です。たとえば、 LANG=ja_JP.eucJP としておけば、XTerm は自動的に EUC-JP を選択する、ということです。 そもそも LANG 変数 (など) は、ソフトウェアがそれを参照して 動作を決定するために存在するので、LANG (など) が指定する エンコーディング (など) とは異なるエンコーディング (など) を用いる動作はバグだと考えるべきです。 従って、この国際化の作業は、XTerm のバグを修正していく 作業だと言えます。
そこで、こ のパッチを使うと、8 ビットモード用と UTF-8 モード用に個別の フォント設定を持つことができ、また、UTF-8 モードでは自動的に UTF-8 モード用のフォント設定が使われるようになります。
ダウンロード → CVS 版 XTerm (20020817)、 フォント設定パッチ。
以降の開発は、細かい不具合の修正や改良などがメインとなります。
試用方法は、以下の通りです。
まず、CVS レポジトリから XTerm (xc/programs/xterm) をダウンロードしてください。 コンパイルは、sh configure --enable-luit ; make とやってください。従来必要だった --enable-wide-chars は不要になりました。(--enable-luit を指定することで自動的に指定される)。
次に、luit をコンパイルする必要があります。XFree86 の CVS から luit (xc/programs/luit) をダウンロードし、 コンパイルしてください。XFree86 4.2 に含まれている luit にはコマンドライン解析部にバグがあるために使えません。 必ず CVS 版を用いてください。また、XFree86 4.1 またはそれ以前の バージョンでコンパイルする際には、fontenc パッチ (以下でダウンロード可能) が必要です。 コンパイル法は、xmkmf ; make です。作成したバイナリは、XFree86 のバイナリがインストールされる ディレクトリ (例えば /usr/X11R6/bin) に置いて下さい。 (別の場所に置くことも可能ですが、その場合、以下で localeFilter リソースの設定が必要になります)。
次にリソースです。詳しくは、マニュアルページを参照して下さい。
次にフォントです。どのロケールでも、iso10646-1 フォントを用います。 例えば、
XTerm*Font: -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso10646-1 XTerm*Font5: -misc-fixed-medium-r-normal--18-120-100-100-c-90-iso10646-1とするとよいでしょう。このとき、 上記フォントの平均文字幅 (60 と 90) を倍 (120 と 180) にした フォント
-misc-fixed-medium-r-normal-ja-13-120-75-75-c-120-iso10646-1 -misc-fixed-medium-r-normal-ja-18-120-100-100-c-180-iso10646-1が自動的に検出され、全角文字の表示に用いられます。 これらのフォントはすべて、XFree86 に含まれているものです。
この状態で、ロケールを適切に設定して (例、 LANG=ja_JP.eucJP ; export LANG) XTerm を起動すれば、 好きなエンコーディングを用いることができます。 ただし、サポートされるエンコーディングの種類は luit がサポートするものに限られます。
既知の問題は、以下のとおりです。
ダウンロード →
CVS 版 XTerm (20020817)。
CVS 版 luit (20020701)
(必須)、
20020704パッチ
(Shift_JIS と GBK が使えるようになる拡張)、
fontenc
パッチ (XFree86 4.1 以前のみ必須)。
ダウンロード → CVS 版 luit (20020701) (必須)、 パッチ (必須)、 fontenc パッチ (XFree86 4.1 以前のみ)。
ダウンロード → CVS 版 XTerm (20020513)、 パッチ。
ダウンロード → パッチ。
EUC-JP ロケールにおいては、 多くの記号やロシア文字など、全角であるべき文字が半角になるという不具合 (現在のところ仕様) があります。 「XTerm*Locale: true」というリソース設定が必要です。 また、./configure 時に --enable-wide-chars をつける必要があります。
ダウンロード → CVS 版 XTerm (20020513)、 luit パッチ。
ダウンロード → CVS 版 luit (20020606) (必須)、 fontenc パッチ (XFree86 4.1 以前のみ)。
このパッチは、 2002 年 2 月ごろに XFree86 の i18n メーリングリストで議論され、 ここ にまとめがあります (これらをまとめて、patch #5279 として再提出しました)。
なお、CVS 版 luit は、XFree86 4.2 以降でないとコンパイルできません。が、それ以前の XFree86 環境でもコンパイルできるようにする「fontenc パッチ」があります。
ダウンロード → CVS 版 luit (20020513) (必須)、 種々のバグ修正・改良パッチ (必須)、 fontenc パッチ (XFree86 4.1 以前のみ)。
私のパッチを使うには、以下に示すファイルを入手する必要があります。
国際化機能を試すには、./configure 時に --enable-wide-chars を指定してください。また、libiconv を使うときは、 --with-libiconv[=DIR] を指定してください。
フォントは、XFree86 4.0 に含まれている、 -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso10646-1 (半角用) と -misc-fixed-medium-r-normal-ja-13-120-75-75-c-120-iso10646-1 (全角用) の組み合わせが使えます。 xterm -fn -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso10646-1 というふうにして起動すると、自動的に -misc-fixed-medium-r-normal-ja-13-120-75-75-c-120-iso10646-1 を検出して使用します。
動作報告、バグ報告、パッチ等おねがいします。 とくに、私は Debian GNU/Linux しか使っていませんので、 configure スクリプトまわりのテストが、ほとんどできません。 また、開発に興味がある方、私やほかの開発者たちと議論したい方は、 XFree86 Internationalization メーリングリストまでお越し下さい。
既知のバグは以下の通りです。
以下にパッチとその説明を示します。各パッチは、Robert Brady さん版の XTerm に対するものとなっています。(k1 をあてて k2 をあてて... という必要はない)。
------------------------------------------------------------------- オプション 'widthMode'リソース 注意 ------------------------------------------------------------------- -wcs 'system' または 'locale' -wcu 'unicode' 'standard' 'markus' のどれか 以前の '-wcm' -wcc 'cjk' 'eastasia' 'doublewidth' のどれか 以前の '-wcl' -------------------------------------------------------------------
---------------------------------------------------------------------- オプション 'encodingMode'リソース これがデフォルトとなるのは... ---------------------------------------------------------------------- -8 '8bit' ロケールが 'C', 'POSIX', ISO-8859-* (6 と 8 以外) のとき -u8 'utf8' or 'utf-8' ロケールが UTF-8 のとき -lc 'locale' or 'lc_ctype' その他の場合 ---------------------------------------------------------------------