TOKUNAGA Hiroyuki
tkng****@xem*****
2004年 1月 30日 (金) 23:04:58 JST
徳永です。 On Wed, 28 Jan 2004 23:06:02 +0900 YamaKen <yamak****@bp*****> wrote: > uimのキーバインド定義を簡単に行えるように関数を書いてみました。 > commit済みなのでsvn updateして試してみて下さい。 まだcheckoutできてません…(;_;) > 以下のように書けるようにしました。呼び出し側のコードは変更不要です。 > > (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にも柔軟なキーバインド定義機構が導入さ > れると思いますが、それまでのつなぎには使えると思います。 私が考えていたキーバインド定義機構は、yamakenさんが実装された物と大差 ありません。たぶんこれで十分だとおもうのですが、なにか足りないですか? > ・"C-i-e"のような表記のフォーマットに何か要望はあるでしょうか i- がcase insensitiveのプレフィクスであるというのはなんだか違和感があ ります。論理的に考えると悪くないと思うのですが、C-i-eとC-e-iの意味が違う (というか、後者は通らない)というのは嫌な感じがします。大して良い対案で もないのですが、 I- をプレフィックスにするというのはどうでしょう? プレフィクスの間にはハイフンを入れないというのもアリかもしれません。 "CA-i"とか"CI-e"みたいな感じで。 > ・Emacsで言うところの"\C-a"のような表記って何か呼称がありましたっ > け? 一般的な呼び名があるなら変数名に使いたいです 私も知りません。ちょっと調べてみましたが、このように表記します、という 文章しか見付かりませんねぇ。 > ・make-key-predicateは関数を返す関数ですが、Schemeでは慣習的にこ > のような名前を付ける、というものはあるでしょうか? クロージャに対して特別な名前のつけかた事はたぶんないと思います。 > ・現在定義されているpredicateは"generic-end-of-preedit-key"のよ > うに末尾に"?"が付かない形になっていますが、個人的に"?"付きの方 > がコードを読みやすいので変更させてもらえないでしょうか。おまけ > として「SchemeってRubyみたいだネ!」と逆の勘違いした人がコード > に親近感を持って敷居が低くなるという副作用があります。 OKです。 -- 徳永拓之 http://kodou.net/