[Anthy-dev 1534] Re: uim-euro: dead keys をエミュレーションして欧文文字を表示

Back to archive index

Etsushi Kato ekato****@ees*****
2005年 1月 2日 (日) 12:50:15 JST


ちょっと前の話題ですみません。compose key についてです。

On Wed, Nov 10, 2004 at 08:00:55PM +0900,
TOKUNAGA Hiroyuki <tkng****@xem*****> wrote:

>  ウムラウトやアクサンなどを入力する方法としてはDead keyやMulti keyがあ
> ります。これらをまとめてComposeKeyと呼びます。GTK+のgtk_compose_seqsとい
> うテーブルにはdead keyとmulti keyの両方が定義してあるので、たぶんこれが
> 正しい呼び方だと思います。
> 
>  GTK+ではCompose Keyに関してどういう扱いをしているかというと、
> GtkIMContextSimpleという専用のcontextを用意しています。
> GtkIMContextSimpleはContextという名前ではありますが、実際にはGTK+組込み
> のimmoduleの一種と捉えた方がわかりやすいと思います。GtkIMContextSimpleは
> 800個以上の要素を持ったCompose用のテーブルを持っており、これを使って
> ComposeKeyに対応しています。試してはいませんが、たぶんX側のcompose
> sequenceのファイルは利用していません。

そうですね。Perl script によって変換した物を table にして使っていると
gtkimcontextsimple.c にコメントしてありますね。

>  uimでは、GTK+用のBridgeは内部にGtkIMContextSimpleをもっており、これを
> slave contextと呼んでいます。uim側で処理しなかったkey eventはこのslave
> contextに処理させています。例えば、uim-anthyで半角英数モードになっている
> 場合、Multi_key a eと入力すると、これら3つのkey eventが全部uim側ではスル
> ーされてslave contextに回されるので、結果としてaeがくっついた奴が入力さ
> れます。
>  このmaster/slave contextの方法でGTK+の範囲では快適な生活が送れるはずで
> すが、GtkIMContextSimpleに頼っているので、他の環境、例えばuim-ximだとか
> UimQtだとかでは悲しい状態になります。(悲しいというか、これまでの事を考
> えると変わらない訳ですが。)

確かに海外の方から、XMODIFIERS=@im=uim を設定している場合 XIM client
で compose が使えない、と幾つかメールが来てました。

>  では単純に、GtkIMContextSimpleのデッドコピーをlibuim側に取り込んで
> GTK+用のBridgeからslave contextを削除すればそれで問題は解決するのかと言
> うと、他にkey eventの扱いの問題があります。
>  libuim側ではkey eventは32から126までの間のキーコードを表すkeyと、
> shiftやctrlなどの修飾キーが押されているかを表すstateの組合せで表現されま
> す。32〜126というところでわかると思いますが、これでは表現できないキーイ
> ベントがあります。この問題を解決しない間は、libuim側では満足な
> ComposeKeyサポートを提供できないので、GTK+用Bridgeからslave contextを削
> 除できません。

そういった理由があるので、昨日 uim-xim 側で X の compose を扱うように
コードを追加しておきました。機能的には、XMODIFIERS を設定しない状態と
まったく同じものが使えるようにしておきました。client の locale に応じ
て、/usr/X11R6/lib/X11/locale/*/Compose の機能をすべて使えます。

libuim 側で deadkey と Multi_key が扱えるようになった時には、この機能
は disable しておきます。

-- 
Etsushi Kato
ekato****@ees*****



Anthy-dev メーリングリストの案内
Back to archive index