2007年6月23日の日記を表示中

2007年 6月23日 (土)

uim.el と shifted-motion-keys-select-region

XEmacsでuim.elをONにするとシフト矢印で領域選択(Emacs的にはマークの活性化っていうんだっけ?)ができない問題ですが,対処に挑戦してみましたよ.

まず,ヒントを求めて previous-line の説明を見てみたところ,シフトキーを押してるときの挙動について書かれてました.この機能は shifted-motion-keys-select-region というらしいです.previous-line が定義されてる simple.el を見てみると,この中に shifted-motion-keys-select-region に関する記述も含まれてますなぁ.

shifted-motion-keys-select-region は handle-pre-motion-command や handle-post-motion-command という関数の中で使われている模様.この関数は lisp の方からではなく,src/event-stream.c の pre_command_hook や post_command_hook 関数で呼ばれているようです.うーん,この辺が呼ばれないから動かないのか.

というわけで,とりあえず uim.el の中で,uimがスルーしたキーを処理する前後に handle-pre-motion-command と handle-post-motion-command を挟んでやったんですが,状況は変わりませんでした.やっぱ世の中そう甘くはないですね(´・ω・`).

よく見ると,この辺の関数は中で last-input-event を見てシフトキーが押されてるかどうかを判定しているようです.uim.elでは,シフト+何かのキー にキーバインドが割り当てられていなかった場合,シフト無しで何かのキーが押されたことにしてキー処理をやり直すようになってます.というわけで,uim.el 内部でキーバインドを処理する時点で,last-input-event からはシフトが取り除かれてしまっていることになります.だからダメなのか?

ということは,シフトを取り除く前に,last-input-event の値をコピーしておいて, handle-pre-motion-command を呼ぶ際に last-input-event を値を元に戻せばいいはず.というわけで,早速 uim-original-input-event なる適当な変数を作って退避・復元処理を追加・・・してみたんですが,なぜか全然動きませんorz.値を見ると,uim-original-input-event の値がバリバリ変わってます.setq してるところを通らないのに変わるってどういうことなんだ・・・.

last-input-event の説明を見てみたら,なんと以下の記述が.

If you want to keep a pointer to this value, you must use `copy-event'.

うおー,これか!? 試しに (copy-event last-input-event) をsetqするようにしたらバッチリ XEmacsでシフト矢印が効くようになりました.わーい.そしてそのままcommit.まあ,この修正が誰かの役に立つことがあるのかどうかについては謎ですが,とりあえず直せてよかったっす・・・.

そういや,最近,家でLinuxとかUNIX系OS使ってる人と新規に出会うことが結構あるんですが,話の流れで「日本語入力何使ってんの?」と聞くと(この時点で相当キモいわけですがw),Anthy + uimという答えが意外と多くてひゃっほうな感じです.でも,uim.el を使っているかどうかまでは怖くて聞けません(笑)

ドラブレ

今日もドラブレ.5面以降は危なくなる前にボムを打つように心掛けた結果,ついにラスボスまで到達するようになりました.といっても残機0,残ボム1とかそんな状態ばっか.4〜5回到達して1回だけ第2形態までいけましたが,他は瞬殺です(´・ω・`).7面道中よりも,6ボスで削られまくるので,この辺,もっと練習して,計画的にボムで押しきれるようにせねば (弾速すぎて「少しだけ左右にずれて回避します」とかそういうのが全然できないんで,真っ向勝負は諦め orz).

2007年6月23日の日記を表示中

中の人情報

名前:
nosuke (のすけ)
メール:
sasugaanijaのgmail.com
「の」は「@」みたいな
関連リンク:

カレンダー

2007年6月
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

<<先月分

翌月分>>

最新の10件のエントリ

最近の10件のコメント

過去ログ