kbd でキーバインドを定義
オレオレ elisp のキーバインディングがいろんな表記でごっちゃになっていたので、kbd でまとめてみるって話。
基本的にはこんな感じ。
(define-key foo-mode-map (kbd "key") 'foo-fn)
「emacs kbd」でググってみたら、最初に引っかかったページにしっかり書かれてた。
How to Define Keyboard Shortcuts in Emacs
特殊なキーの表記(Shift)
リンク先を読んでて気になったのが、Shift を使うときに、"S-a" と "A" のどっちで表記すればいいのかという問題。単独で使う場合は (kbd "A") が正解。他のキーと組み合わせる場合は、Shifted Key Combination という節で説明されてるように Meta+Shift+
よくわからない場合
もうちょっとしっかり読んでみると、よく分からないときは C-h k (M-x describe-key) で調べろと書いてある。describe-key はキーにバインドされているコマンドを調べるときに使う関数で、その説明文に出てくるキーの表記に従うのが一番確実ってことらしい。例えば、
C-h k C-A
とタイプしてみると、
C-a (translated from C-S-a) runs the command move-beginning-of-line, which is an interactive compiled Lisp function in `simple.el'. ... ...
と出てくるので、(kbd "C-S-a") と書くのが正解。
C-h k C-:
とタイプしてみると、
C-: is undefined
と message が出てくるので (kbd "C-:") が正解。ちなみに、うちの環境だと undefined なときに Cocoa Emacs だとメッセージが出たけど、Carbon Emacs だと出なかったので、環境によっては上手くいかないのかも。
まあ、そもそもリンク先には C-S- のコンビネーションは避けろ、と書いてあるけど。
マウスイベント
kbd って言うくらいだからマウスイベントは無理だと思っていたけど、しっかり解釈してくれる。例えば、Ctrl+<右クリック> は (kbd "