[Anthy-dev 604] Re: uimのキーバインド定義を簡単に

アーカイブの一覧に戻る

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*****



Anthy-dev メーリングリストの案内
アーカイブの一覧に戻る