2008年2月18日の日記の1番目の記事へのコメント
■XEmcas の Multi_key
XEmacsはデフォルトで Multi_Key に対応しているようで,Multi_key → 「~」 → 「a」 とか入力すると,ちゃんと 「ã」 がバッファに挿入されます.が,uim.el が ON になっていると,エラーに落ちてしまうことが判明.で,これに,対処してみたという話.
まず,「Multi_key」は,デフォルトだと function-key-map で 「compose-map」というキーマップにマップされてます.が,これ,autoload を使って,Multi_key が押された時点で読み込まれるようになってまして,どうもこれがうまく読み込めていない模様です.Emacs だと何もしないでも勝手に読んでくれる気がするんですが (何かした記憶がないし),この辺,XEmacsならではなんですかねー.というわけで,まず,function-key-map を引いた際に,中身が keymap か マクロの autoload だったら先に load しちゃうようにして対処してみました.
これで,function-key-map を引いた時点でキーマップが取れて,先に進めるようになったんですが,なぜか Multi_key を起点に何か叩いても文字が挿入されません. Multi_key → 「A」 → 「A」 とやっても,何も起こらず(本来「@」が入るはず),さらに何か押すとエラー発生 (´・ω・`). デバッグメッセージを見ると,ちゃんとキーマップ引いて文字列に変換されてるのに・・・.あ,その後何もしていじゃん (;´Д`).これは普通に Emacs でも問題になるバグですな・・・.というわけで,function-key-map での変換結果が文字列だったらそのままバッファに挿入するように修正.
これで終わりかと思いきや,まだ続きが.「@」は入るけど,Multi_key → 「~」 → 「a」 で 「ã」 が入ってくれず「a」が挿入されます.よくわからんのですが,こういう特殊な文字は「[atilde]」みたいなベクトルになって,self-insert-command で挿入されるっぽい感じ? って,ここだけ XEmacs っぽくないなぁw.このテのベクトルだけ特殊扱いすれば良さそうだったので,場当たり的にコマンドを実行する部分でベクトルの中身を eventp して nil だったら違うことをする,みたいにして対処しました.これでようやく特殊なアルファベットも Multi_key で一通り入力出きるようになりましたとさ.ふー.大した差分もないのに,何かやたらと疲れたなー.
ちなみに,Multi_key は XEmacsの中では 「multi-key」って名前なんですが,どこでこの名前に変換されているのか全然見つかりません.何か他にもこういうのがあればついでに足しておきたいところなんですが・・・.
[コメントを書く]
2008年2月18日の日記の1番目の記事へのコメント
ところで、Multi_key+A+Aは"å"なのでは?
GTKだと確かに+A+Aでaの上にまるが出ますね.
ちなみに,XEmacsでこれを入力するには Multi_key + a + * らしいです.
同じcomposeでも,出所が違うんですかねー. x-compose.el には,以下のように書いてありますなー.
;; This file implements DEC-, OpenWindows-, and HP-compatible "Compose"
;; processing for XEmacs.
勉強になりました( ´・ω・)つ゛ ヘー