Ошибка «Неправильный тип аргумента: commandp» при привязке лямбды к ключу - PullRequest
78 голосов
/ 09 августа 2009

Я получаю «Неверный аргумент типа: commandp, (лямбда-ноль (прямая строка 5))» здесь.

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

В чем ошибка? Я уверен, что все просто, и я упускаю что-то очевидное.

Ответы [ 3 ]

116 голосов
/ 09 августа 2009

global-set-key ожидает интерактивную команду. (lambda () (interactive) (forward-line 5)) должно работать.

Кстати, C-h f commandp - неплохая отправная точка для подобных ошибок.

34 голосов
/ 09 августа 2009

Правильная форма должна быть такой -

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

Проблема была в том, что вы забыли поставить (interactive) (как упомянул Брендан).

Кстати, вы заметите, что я использовал функцию (kbd) для указания привязки клавиш. Эта функция очень полезна, поскольку вы можете буквально связывать привязки клавиш.

2 голосов
/ 18 июня 2018

Я также видел эту ошибку на новой машине, где я использую свой обычный файл .emacs, но не установил свои пакеты, и команда, которая должна быть выполнена, находится в одном из этих пакетов. (Потому что команда, которая не может быть выполнена определенно, не является интерактивной!)

...