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 というメジャーモードであるという理解で良いのでしょうか。
もっとスマートな調べ方はあるでしょうか。もしご存知の方がいらっしゃいましたら教えてください<(_ _)>。