2005年9月27日の日記の1番目の記事へのコメント
■uim.elとマウス
昨日の続きです.キーマップで「その他のキー入力は全部これね」と指定すると,Emacsではマウス操作も全部「これ」にマップされてしまうという仕様になってるみたいです.つーわけで,放っとくとマウスクリックとかダブルクリックとかドラッグとか,あらゆるマウスに関連するイベントがuim-agentに渡されてしまいますorz.
こんだけなら,スルーされたのをEmacs側でまた処理すればいいんじゃん?という感じなのですが,そこが微妙にうまくいきません.そこそこEmacsで処理はできるんですが,キーと違って順番に発生した複数イベント見てやらないとうまくいかないっぽい感じ?それはいくらなんでもしんどいです.
というわけで,一番簡単なのは,マウス操作はまとめて未定義(nil)にすること・・・.なんですが,Emacsのマウス操作に関する定義は,Metaみたいに別キーマップにわかれてなくて,キーと同じキーマップ上に定義する必要があります.マウスボタンは「mouse-1」「mouse-2」「mouse-3」と3種類ですが,クリック回数に応じて「double」or「triple」がつき,動きによって「down」or「drag」が付きます.更にこれに「Control」,「Shift」,「Meta」,「Alt」,「Super」,「Hyper」が組み合わさるので,結局キーテーブルが脹れあがりることに_|‾|○(元のに比べりゃましですが・・・).「Alt」「Super」「Hyper」は要らないとしても,なんだかなーって感じ.しかもこのへん,XEmacsだとまたちょっと違うっぽいし・・・.ああっΣ(゜д゜lll) !モードラインクリックも拾われるのかよ (;´Д`).keymap.c見ても,特に抜け道みたいのなさそうだし(あってもXEmacsのこと考えると使いたくないし・・・).うごごごごご.
Σ(゜∀゜ )アッ,あるいはマイナモード初期化時に既存のキーマップ見て,マウス関連のところだけ決め打ちで全部nilにして,defadviceでdefine-keyにdefadviceして何か追加される度にuim-mode-mapにはnilを書き足していきゃいいのかな・・・.まあ,こっちの方がましっぽいですけどdefine-key見るだけでいいのかな?・・・と思ったけど,キーマップにデフォルトのエントリがあると,他にどこでも定義されてないようなイベントでも拾っちゃうから全然意味無いしorz.やっぱくまなくマウスイベントつぶすしか無いのか(;´Д`).
まあ,こんな感じでいじっている内に,次々と無駄な処理が削られたり統合されたりしていき,あんま関係ないところで多少コードがすっきりしました(^^;.
[コメントを書く]
2005年9月27日の日記の1番目の記事へのコメント
[コメントを書く]