よく分からないでコピペで増やしたlocal-set-keyだが
(local-set-key "\C-j" (lambda () (interactive) (insert " -> ")))
と、ラムダ式に(interactive)が含まれている。試しに(interactive)を排除して
(local-set-key "\C-j" (insert " -> ")))
を評価(C-x C-e)してC-jを押してみると
Wrong type argument: commandp, (lambda nil (insert " -> "))
とミニバッファにエラーが出力される。commandpとは一体なんだろうか?と f1 f commandp
(commandp FUNCTION &optional FOR-CALL-INTERACTIVELY)
commandかどうかを判定する関数らしいが、よく分からんのでf1 f local-set-keyで見てみると
(local-set-key KEY COMMAND)
関数ではなくてCOMMANDである必要があるらしい。
コマンドとは、定義の最初にinteractiveスペシャルフォームが置かれた関数ですEmacsLISPテクニックバイブル p.79
EmacsLISPテクニックバイブルにちゃんと書いてあった。
最近elispをよく読むのでかなりお世話になっている本だ。