web-dev-qa-db-fra.com

Erreur "Argument de type incorrect: commandp" lors de la liaison d'un lambda à une clé

J'obtiens ici un "argument de type incorrect: commandp, (lambda nil (forward-line 5))".

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

Quelle est l'erreur? Je suis assez sûr que c'est simple et il me manque quelque chose d'évident.

78
Paul Nathan

global-set-key attend une commande interactive. (lambda () (interactive) (forward-line 5)) devrait fonctionner.

Au fait, C-h f commandp est un assez bon point de départ pour de telles erreurs.

116
brendan

La forme correcte devrait être la suivante -

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

Le problème était que vous avez oublié de mettre (interactive) (comme Brendan l'a mentionné).

Au fait, vous remarquerez que j'ai utilisé le (kbd) fonction pour spécifier le raccourci clavier. Cette fonction est extrêmement utile car vous pouvez mettre les raccourcis clavier presque littéralement.

34
Baishampayan Ghose

J'ai également vu cette erreur sur une nouvelle machine sur laquelle j'utilise mon .emacs fichier mais je n'ai pas installé mes packages, et la commande à exécuter se trouve dans l'un de ces packages. (Parce qu'une commande qui ne peut pas être exécutée n'est certainement pas interactive!)

2
Paul Bissex