From: Araki K. <j00...@ip...> - 2001-12-02 22:42:07
|
荒木 @ mlterm開発者 です:-) Subject: [Mlterm-dev-ja] UTF-8 locale に起こる kinput2 の問題 From: Mike Fabian <mf...@su...> Message-ID: <s3t...@gr...> Date: Sun, 02 Dec 2001 22:16:48 +0100 > UTF-8 localeにmltermとkinput2を使用して見ましたが、小さな問題が起 > こりました。 ご報告ありがとうございます_o_ > 次の様にmltermを実行しました: > > mfabian@gregory:~$ LC_ALL=ja_JP.UTF-8 XMODIFIERS=@im=kinput2 mlterm > > Shift-Spaceを使って日本語の入力モードに入って、平仮名を入力して、 > 変換を押して、Return を押しました。 > Return を押した時、日本語の言葉が削除されました。 手元の環境には、ja_JP.UTF-8 locale がありませんので、ご報告いただいた 問題を再現できていないのですが、これは、kinput2から入力した文字列が、変 換確定後、一切画面に表示されないということでしょうか? まず、mlterm では、XIM からの文字列を処理するにあたって、 1. 指定された locale (この場合は、ja_JP.UTF-8) にて、OpenXIM() 2. その locale のコードセット(この場合は、UTF-8)用の parser object を、 その XIM に bind (ml_xim.h:ml_xim_t の XIM , mkf_parser_t メンバ) 3. XIM から受け取った文字列を、その XIM に bind されている parser object を使って解釈し、pty 側の encoding に変換、出力。 という、少々特殊な手順をとっております。 # pty 側の encoding と、XIM 側の locale が、矛盾していても構わない(たと # えば、pty 側が、UTF-8 encoding で、XIM の locale が ko_KR.eucKR でも構 # わない)ような実装になっているということです。 もし、画面に入力文字列が一切表示されないということでしたら、OpenXIM()す る際の locale と、XIM に bind されている parser object が噛み合っていな いのかな、と思います。 そのため、parser object が、XIM から受け取った文字列を、不正な文字コード だよ、として無視しているような気がします。 ml_xim.c の、 open_xim()にて、OpenXIM()した直後、 if( ( xim->encoding = ml_get_encoding( ml_get_codeset())) == ML_UNKNOWN_ENCODING) { goto error ; } if( ( xim->parser = ml_parser_new( xim->encoding)) == NULL) { goto error ; } if( ( xim->xmod = strdup( xmod)) == NULL) { goto error ; } if( ( xim->locale = strdup( ml_get_locale())) == NULL) { goto error ; } このようなコードがあるかと思いますが、この、xim->encoding が 19 、xim->locale が "ja_JP.UTF-8" になっているかどうか、もしくは、ml_xic.c の ml_xic_get_str() にて、XmbLookupString() で取得している文字列 (seq,seq_len) が、正しい UTF-8 文字列になっているかどうかを調べていただけませんでしょうか? > しかし、mltermを次のように実行すると、その問題が > 起こりません: > > mfabian@gregory:~$ LC_ALL=ja_JP.UTF-8 XMODIFIERS="" mlterm > > mlterm の中に Control-Mouse-3 を押して、「Input Method: kinput2」 > と 「XIM Locale: ja_JP.eucJP」を選択しました。そすると、 > 日本語の入力がちゃんとできました。 XIM Locale: ja_JP.eucJP を選択しますと、その Input Method を、ja_JP.eucJP locale にて OpenXIM() しますので、その場合に問題が起こらないということでしたら、kinput2 を ja_JP.UTF-8 locale で OpenXIM() した場合にだけ(XmbLookupString()で受け取 った文字列が UTF-8 の時にだけ)、問題が起こるようですね。 もしよろしければ、 LC_ALL=ja_JP.UTF-8 XMODIFIERS="" mlterm したのち、設定画面にて、Input Method として kinput2 を 選択、さらに XIM Locale 欄をja_JP.UTF-8 に書き換えて、apply した場合(*)も同様の問題が 発生するかについても、調べていただけると幸いです。 (*) この場合、XIM を ja_JP.UTF-8 locale で Open し、かつ、pty 側の encoding は、UTF-8 になります。 > kinput2 以外の XIM サーバの場合にも、そのような問題が起こりません。 > > mfabian@gregory:~$ LC_ALL=ja_JP.UTF-8 XMODIFIERS=@im=jmode mlterm > mfabian@gregory:~$ LC_ALL=ja_JP.UTF-8 XMODIFIERS=@im=nicolatter mlterm > mfabian@gregory:~$ LC_ALL=ja_JP.UTF-8 XMODIFIERS=@im=htt mlterm > > は全て大丈夫です。 それは不思議ですね。 kinput2 のときだけ、ja_JP.UTF-8 で問題が起こるということになりますと、上 に書いたような原因は、少々的を外しているような気もします。はてさて ? 久保田さんのところでも、再現できるか、試してみていただけますでしょうか? > SuSE Linux 7.3 のためのパッケージをここに保存しました: > ftp://ftp.suse.com/pub/people/mfabian/7.3-i386/mlterm-2.0.0-0.i386.rpm > ftp://ftp.suse.com/pub/people/mfabian/7.3-src/mlterm-2.0.0-0.src.rpm ありがとうございます:) では -- kiken j00...@ip... |