Tomotaka SUWA
t-suw****@users*****
2006年 5月 12日 (金) 21:07:32 JST
諏訪です。 最近の進捗です。 At Wed, 03 May 2006 12:06:38 +0900, Tomotaka SUWA wrote: > ■ メッセージ通信について この内容は commit しました。 > ■ SkkConfig について (snip) > (3) 改善方法 > > 単純に、MacCharCodes に加えて、KeyModifier も管理するようにします。合わ > せて、初期値の設定を外出しにします。 AquaSKK で扱っている Carbon イベントは、クラスが kEventClassKeyboard で、 種類が kEventRawKeyDown と kEventRawKeyRepeat のどちらかです。 これらのイベントに付随するパラメータは、MacCharCode、Modifier、KeyCode の三つになります。 ・MacCharCode: U.S. や Dvorak などに合わせて変換されたコード ・Modifier: 装飾キーの状態(Shift, Control, Option, Command など) ・KeyCode: 仮想キーコード(物理的なキーコード) 現状では、各入力モードが処理する引数には上記のうち MacCharCode だけしか 渡されていません。 今回の改善ではこの引数を unsigned char から int に変更し、MacCharCode に加えて 8bit 左シフトさせた Modifier の情報も持たせます。 ただ、型が int のままでは「MacCharCode に Modifier が含まれてますよ〜」 という意味が希薄になってしまうかなぁと思ったので、SKKChar として以下の ように再定義することにしました。 ===================== ここから ==================== // 各入力モードが処理する基本単位 typedef int SKKChar; // 装飾キーの状態を格納する(Shift を除く) #define SKKCHAR(code, mods) (code | ((mods & ~shiftKey) << 8)) ===================== ここまで ==================== ということで、SKKChar の中身は以下のようになります 24 ------------ 16 ------------ 8 ------------ 0 bit | Shift 以外の装飾キーの状態 | MacCharCode | +-------------------------------+--------------+ KeyModifier は UInt32 ですが、現状では 16bit までしか使っていないよう なので、当分は int で足りると思います。 これに合わせて、SkkConfig でも "\C-j" などのキーコードを SKKChar に変換 して保持するように修正します。 - * - SKKChar という名前は「イマイチ」だと思うのですが、いい名前が浮かびませ んでした。もしもいい案があったら教えて下さい。 その他、気付いたことがあれば指摘してもらえると助かります。 よろしくお願いします。 -- Tomotaka SUWA