Я получаю здесь «Аргумент неправильного типа: commandp, (lambda nil (forward-line 5))».
(global-set-key [?\M-n] (lambda () (forward-line 5)))
В чем ошибка? Я почти уверен, что это просто, и мне не хватает чего-то очевидного.
Я получаю здесь «Аргумент неправильного типа: commandp, (lambda nil (forward-line 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)
которая будет работать?
Правильная форма должна быть такой -
(global-set-key (kbd "M-n") (lambda () (interactive) (forward-line 5)))
Проблема заключалась в том, что вы забыли поставить (interactive)
(как упомянул Брендан).
Кстати, вы заметите, что я использовал (kbd)
функцию для указания привязки клавиш. Эта функция очень полезна, так как привязки клавиш можно разместить практически буквально.
Я также видел эту ошибку на новом компьютере, где я использую свой обычный .emacs
файл, но не установил свои пакеты, и команда, которую нужно выполнить, находится в одном из этих пакетов. (Потому что команда, которую невозможно выполнить, определенно не интерактивна!)