Я получаю здесь «Аргумент неправильного типа: commandp, (лямбда ноль (прямая строка 5))».
(global-set-key [?\M-n] (lambda () (forward-line 5)))
В чем ошибка? Я почти уверен, что это просто, и мне не хватает чего-то очевидного.
Я получаю здесь «Аргумент неправильного типа: commandp, (лямбда ноль (прямая строка 5))».
(global-set-key [?\M-n] (lambda () (forward-line 5)))
В чем ошибка? Я почти уверен, что это просто, и мне не хватает чего-то очевидного.
global-set-key
ожидает интерактивную команду. (lambda () (interactive) (forward-line 5))
должно работать.
Кстати, C-h f commandp
— неплохая отправная точка для подобных ошибок.
(commandp)
, лямбда-функции с вызовом верхнего уровня (interactive)
работают, но как я могу определить функцию с (defun)
, которая будет работать?
- person peterhil; 26.08.2020
Правильная форма должна быть такой -
(global-set-key (kbd "M-n") (lambda () (interactive) (forward-line 5)))
Проблема была в том, что вы забыли поставить (interactive)
(как упомянул Брендан).
Кстати, вы заметили, что я использовал функцию (kbd)
для указания привязки клавиш. Эта функция чрезвычайно полезна, так как вы можете буквально вводить сочетания клавиш.
Я также видел эту ошибку на новой машине, где я использую свой обычный файл .emacs
, но не устанавливаю свои пакеты, и команда, которую нужно выполнить, находится в одном из этих пакетов. (Потому что команда, которая не может быть выполнена, определенно не интерактивна!)