[aquaskk-dev 55] Re: 修正方針について(メッセージ通信、SkkConfig など)

Back to archive index

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



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