YamaKen
yamak****@bp*****
2004年 2月 25日 (水) 13:47:52 JST
ヤマケンです。 At Mon, 23 Feb 2004 07:04:24 +0900, yamak****@bp***** wrote: > このままだとdefine-keyに渡す変数名をquoteする必要があるので、第1 > 引数をquoteしてdefine-key-internalを呼ぶだけのdefine-keyをCで定 > 義しました。これで、以下のようにキーバインドを定義できるようにな > りました。この機能はuim 0.3.0に含まれています。 > > (define-key skk-commit-key? "<Control>j") > (define-key skk-on-key? '(generic-on-key? "<Control>j")) > > 大文字・小文字とシフト状態の扱いですが、case sensitiveにして、シ > フトキーの状態だけ無視するようにしました。"<Control>A"と > "<Control>a"は区別され、CAPSキーやシフトprefix のようにシフトキー > が押し下げられていない状態でも、入力された文字が大文字かどうかだ > けを見ます。ただし、現在はdefine-keyで定義されたpredicateはシフ > トキーを完全に無視してしまうので"<Shift>space"や"<Shift>home"の > ような定義ができません。これについては後日改善しようと思います。 define-keyで"<Shift>home"のような定義を受け付けるようにしました。 これで機能的に十分になったと思うので、手始めにanthy.scmのキーバ インドをdefine-keyを使って書き直してみました。 http://freedesktop.org:8080/svn/uim/trunk/scm/anthy.scm シフトキーとコントロールキーの組み合わせの扱いについては最後まで 悩んだんですが、以下のように大文字・小文字を両方記述するようにし ました。これは今までの定義と同等で、CapsLockが有効になっている時 も同じ操作を可能にするためのものです。 (define-key anthy-hankaku-kana-key? '("<Control>q" "<Control>Q")) <IgnoreCase>を使わなかったのは、この方が一見して理解しやすいと思っ たからです。また、暗黙の<IgnoreCase>もキーバインド定義ルールが複 雑になるので導入を見送りました。現在のdefine-key実装では内部で <IgnoreRegularShift>というプリフィクスだけを付けてpredicateを定 義しています。これはkeyが 32< c < 127 の範囲の時だけシフトキー修 飾を無視するというもので、"<Shift>home"などの場合にはちゃんとシ フト押し下げ状態を見ます。 仕様についてなにかご意見があればお願いします。 ------------------------------- ヤマケン yamak****@bp*****