2007年8月11日の日記の4番目の記事へのコメント
■uim.el 〜function-key-map
uim.elのキーマップ処理にも色々問題が.キーマップ眺めて,ソース眺めて,「あれ,この場合どうすんのが正しいんだ?」とリファレンスを読んで,今までfunction-key-mapの扱い方を微妙に間違えてたことを知りました.
たとえば,Emacs22だと,function-key-map には [M-return] がデフォルトで設定されてて,「(lookup-key function-key-map [M-return])」とやると 「[134217741]」 が返ってきます.なので,Altキーを押しながらEnterを押すと,まず「[134217741]」に変換されて,その上で 「[134217741] 」で global-map とかの探索が行われます.
ただ,デフォルトで 「[134217741]」 にはキーが設定されてないので,Alt+Enterで何もおきません.そこで,たとえば以下のような設定をしてやると,C-eを押したときと同じような動きになります.
(define-key global-map [134217741] `move-end-of-line)
まあ,ここまではいいんですが,ここで,以下のように,global-mapで M-return 自体にもコマンドを設定するとどうなるかといいますと・・・
(define-key global-map [M-return] `move-beginning-of-line)
入力されたキー列は,まず function-key-map で変換されることになるので,結局 「[134217741]」 になって move-end-of-line が実行される・・・と思ってたんですが,実は違いました.global-mapとかに同じキーバインドが設定されている場合は,function-key-map で変換されないそうで.この場合は move-beginning-of-line が走ります.uim.elは,これを知らず,この場合も move-end-of-line を走らせてました(´・ω・`).ああ,直さなきゃこれ・・・でも・・・なんかもう・・・
2007年8月11日の日記の4番目の記事へのコメント
[コメントを書く]