xml-mode などにハマる
xml-mode に hook して define-key でキーバインドを変更したいとする。
よくある方法が
(add-hook 'xml-mode-hook '(lambda () (define-key xml-mode-map "\C-ck" 'my-hoge)))
試しに xml ファイルを開いてみて C-c k してみる。
エラーにもならず、Kill-Ring の機能が起動してしまった。
describe-key C-c k をしても当然 Kill-Ring の手続きが登録されている。
ふーむ。なぜ上手くいかないのだろうか?調べ方も分からないので探り探りやってみましょう。
まずそのファイルがどのメジャーモードで開かれているかを調べてみたい。
M-x describe-mode があった。XML mode と出ました。合っているっぽいですね。
では xml-mode-hook という hook が存在しないとか?
(add-hook 'xml-mode-hook '(lambda () (error "xml-mode-hook error") (define-key xml-mode-map "\C-ck" 'my-hoge)))
上手い方法が思いつかないので hook 時にエラーを起こしてみることにした。
再起動して xml を開いてみると、error は起きない。
つまり xml-mode-hook に処理が行ってない?
*Message* バッファにヒントがあるだろうか。見に行ってみよう。
Loading sgml-mode...done
えぇぇ。 sgml-mode がロードされている。
xml-mode-hook => sgml-mode-hook, xml-mode-map => sgml-mode-map と書き換えたら動いた。
まとめると xml を開くと sgml.el がロードされてそれは XML mode というメジャーモードであるという理解で良いのでしょうか。
もっとスマートな調べ方はあるでしょうか。もしご存知の方がいらっしゃいましたら教えてください<(_ _)>。