最近混乱したsubstitute-key-definition
何となく引数の意味が分からないのでSourceを見てみた。
(defun substitute-key-definition (olddef newdef &optional (keymap *global-keymap*) (okeymap keymap)) (dolist (x (expand-command-keys (command-keys olddef okeymap nil))) (define-key keymap x newdef)) t)
(define-key keymap x newdef)と書いてあるのを見ると、keymapのキーxにnewdefを定義すると言うことらしい。xはokeymapでolddeffが割り当てられているkey全部らしい。
;;; text-mode での行の移動を物理行単位にする (substitute-key-definition 'next-virtual-line 'next-line *text-mode-map* *global-keymap*)
keymapのキーバインドを変更するのかokeymapのキーバインを変更するのかどっちなんだろう。例の場合はだとokeymap=*text-mode-map*でkeymap=*global-keymap*に成りそうだけど、それだと*global-keymap*のキー設定が変更されていることになるような。何かよく分からん。
良く引数を見てみたら。逆だったorz。keymap=*text-mode-map*でokeymap=*global-keymap*なのか。(keymap *global-keymap*)が*text-mode-map*で(okeymap keymap)が*global-keymap*なのか。なんだか頭が混乱してる。