From: Tomohiro K. <tk...@ri...> - 2001-12-11 12:49:12
|
久保田です。 ちょっとやっかいな問題を見つけてしまいました。とりあえず mlterm を 起動し、それから mlconfig を使って現在のロケール以外のエンコーディングに 切り替えたとき、そのエンコーディングの文字が入力できないのです。 たとえば、ja_JP.eucJP ロケールで mlterm を起動し、mlconfig を使って EUC-JP から UTF-8 に切り替え、setxkbmap il などの状態で AltGr と 他のキーを押しても、何も入力されません。 あるいは、ja_JP.eucJP ロケールで、mlterm -E UTF8 と起動しても、同じ ことになります。 この原因は明らかで、キー入力に使っている XmbLookupString() は ロケールが指示するエンコーディングで文字列を取得します。上記の例なら EUC-JP エンコーディングで文字列を得ます。とうぜん、ヘブライ文字を EUC-JP で表現することはできないので、入力することができません。 いくつか解決策があります。 1. ロケールによってしかエンコーディングを決められないようにする。 つまり、ロケールが指定する以外のエンコーディングを使いたいと 考えるユーザのほうが悪い、という立場をとる。 (mlconfig 等からエンコーディングの設定を廃止する)。 これだと、ロケールにないエンコーディングが使えなくなってしまいます。 2. mlconfig でエンコーディングを変えたとき、相当するロケールに 自動的に変更するようにする。 XIM の変更と同じようにする、ということです。が、これも、 利用できるロケールがなければそのエンコーディングは使えません。 3. Xutf8LookupString() を使う。 ぼくはこれがいちばんきれいな解のように思えます。CJK Han Unification などに原理的に対応できなくなりますが、どうせ現状でも対応できている OS などありませんし (つまり、XmbLookupString() を使うことで、 CJK の漢字を使い分けることが可能な OS ってないでしょう、ということ)。 ちなみに、XTerm は、ja_JP.eucJP ロケールで xterm -u8 と起動しても、 その状態でヘブライ文字の入力ができます。それは、Xutf8LookupString() を使っているからです。 いかがでしょうか。 --- 久保田智広 Tomohiro KUBOTA <ku...@de...> http://www.debian.or.jp/~kubota/ "Introduction to I18N" http://www.debian.org/doc/manuals/intro-i18n/ |