Я получаю здесь «Аргумент неправильного типа: 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файл, но не установил свои пакеты, и команда, которую нужно выполнить, находится в одном из этих пакетов. (Потому что команда, которую невозможно выполнить, определенно не интерактивна!)