Вам не хватает закрывающих скобок. Вероятно, не в вашем коде, а только в вопросе.
Helder S Ribeiro,
В качестве побочного примечания: когда вы цитируете анонимную функцию таким образом, она не будет скомпилирована. Я полагаю, что в вашем случае это не проблема.
Фил Джексон,
Ответы:
129
global-set-keyожидает интерактивной команды. (lambda () (interactive) (forward-line 5))должно работать.
Кстати, C-h f commandpэто неплохая отправная точка для подобных ошибок.
Думаю, минусов нет. Из документации: >> «Вызов» к «интерактивному» на самом деле является объявлением, а не функцией; он сообщает «интерактивно по вызову», как читать аргументы для передачи функции. При фактическом вызове «интерактивный» просто возвращает ноль.
Дангелов
Итак, согласно (commandp)документации, лямбда-функции с вызовом верхнего уровня (interactive)работают, но как я могу определить функцию, (defun)которая будет работать?
Проблема заключалась в том, что вы забыли поставить (interactive)(как упомянул Брендан).
Кстати, вы заметите, что я использовал (kbd)функцию для указания привязки клавиш. Эта функция очень полезна, так как привязки клавиш можно разместить практически буквально.
Я также видел эту ошибку на новом компьютере, где я использую свой обычный .emacsфайл, но не установил свои пакеты, и команда, которую нужно выполнить, находится в одном из этих пакетов. (Потому что команда, которую невозможно выполнить, определенно не интерактивна!)
Ответы:
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
файл, но не установил свои пакеты, и команда, которую нужно выполнить, находится в одном из этих пакетов. (Потому что команда, которую невозможно выполнить, определенно не интерактивна!)источник