"Wrong type argument: commandp" error when binding a lambda to a key

EmacsElisp

Emacs Problem Overview


I am getting a "Wrong type argument: commandp, (lambda nil (forward-line 5))" here.

(global-set-key [?\M-n] (lambda () (forward-line 5)))

What is the error? I'm fairly sure it's simple & I'm missing something obvious.

Emacs Solutions


Solution 1 - Emacs

global-set-key expects an interactive command. (lambda () (interactive) (forward-line 5)) ought to work.

By the way, C-h f commandp is a pretty good starting point for errors like that.

Solution 2 - Emacs

The correct form should be this -

(global-set-key (kbd "M-n") (lambda () (interactive) (forward-line 5)))

The problem was that you forgot to put (interactive) (as brendan mentioned).

By the way, you will notice that I used the (kbd) function for specifying the key-binding. That function is immensely useful since you can put the key-bindings almost literally.

Solution 3 - Emacs

I've also seen this error on a new machine where I am using my usual .emacs file but haven't installed my packages, and the command to be executed is in one of those packages. (Because a command that can't be executed definitely isn't interactive!)

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionPaul NathanView Question on Stackoverflow
Solution 1 - EmacsbrendanView Answer on Stackoverflow
Solution 2 - EmacsBaishampayan GhoseView Answer on Stackoverflow
Solution 3 - EmacsPaul BissexView Answer on Stackoverflow