@kyanny's blog

My life. Opinions are my own.

特殊なキーを含むキーバインドを変更したいときの設定方法と調べかた

Emacs で「このキーバインド上書きしたいなぁ」と思うことがよくあって、でも "\C-x" とか (kbd "x") とか "M-" とかいろんな表現があるけどどれが正しいのかどれがちゃんと動くのかよくわからないし検索しづらくて困ることが多かったけど、簡単で確実なやり方がわかった。

  1. M-x describe-key して上書きしたいキーバインドに割り当てられてる関数のヘルプをひらく
  2. そのヘルプのバッファから定義もとのファイルへ飛ぶか M-x find-function 関数名 する
  3. 定義元のファイルで M-x occur 関数名 して define-key してる箇所をみつける
  4. define-key の部分を .emacs にコピペして自分の好きな関数を割り当てる

俺の場合、 ns-toggle-fullscreen を M-RET に割り当てたかったんだけど eshell バッファだと eshell-queue-input が呼ばれてしまい、 eshell-mode-hook で上書きしたかったけど M-RET をどう書いたらいいのかわかんなくて、上のやり方でどうにかした。

(global-set-key [(meta return)] 'ns-toggle-fullscreen)

(add-hook 'eshell-mode-hook
          '(lambda ()
             (progn
               (define-key eshell-mode-map "\C-a" 'eshell-bol)
               (define-key eshell-mode-map [up] 'previous-line)
               (define-key eshell-mode-map [down] 'next-line)
               (define-key eshell-mode-map [(meta return)] 'ns-toggle-fullscreen)
               )
             ))