YamaKen
yamak****@bp*****
2004年 1月 28日 (水) 23:06:02 JST
ヤマケンです。 uimのキーバインド定義を簡単に行えるように関数を書いてみました。 commit済みなのでsvn updateして試してみて下さい。 現在は以下のようにキー操作毎に関数を定義する必要がありますが、 (define generic-end-of-preedit-key (lambda (key key-state) (and (control-key-mask key-state) (= (to-lower-char key) 101)))) 以下のように書けるようにしました。呼び出し側のコードは変更不要です。 (define generic-end-of-preedit-key (make-key-predicate "C-i-e")) 上記の"C-i-e"は Control + case insensitive + e という意味になり ます。現在使用できるプリフィクスは以下の通りです。 "S-" Shift "C-" Control "A-" Alt "M-" Meta "i-" case insensitive 最後に来る文字は単純なASCIIコードの他、uim-key.cのkey_tabで定義 されているkeysymも使えます。"C-prior"や"F7"、"C-A-delete"といっ た記述が可能です。 現時点ではアルファベットの小文字化が各IMの中で独自に行われていた りするのと、今回書いた関数の中でのShiftキーの扱いがはっきり決まっ ていないので、"C-A"のようなアルファベット大文字の検出はうまく動 きません("C-S-A"ならIMによっては動くかもしれません)。当面は "C-i-a"のようなコントロールキーの定義やkeysym単体で使う事になる と思います。将来的にはuimにも柔軟なキーバインド定義機構が導入さ れると思いますが、それまでのつなぎには使えると思います。 しばらく使ってもらって問題が無いようであればこの関数を使って uim-anthyやuim-skkのキーバインド定義を書き換えたいと思います。 最後にいくつか相談を。 ・"C-i-e"のような表記のフォーマットに何か要望はあるでしょうか ・Emacsで言うところの"\C-a"のような表記って何か呼称がありましたっ け? 一般的な呼び名があるなら変数名に使いたいです ・make-key-predicateは関数を返す関数ですが、Schemeでは慣習的にこ のような名前を付ける、というものはあるでしょうか? ・現在定義されているpredicateは"generic-end-of-preedit-key"のよ うに末尾に"?"が付かない形になっていますが、個人的に"?"付きの方 がコードを読みやすいので変更させてもらえないでしょうか。おまけ として「SchemeってRubyみたいだネ!」と逆の勘違いした人がコード に親近感を持って敷居が低くなるという副作用があります。 ------------------------------- ヤマケン yamak****@bp*****