Ошибка Emacs Lisp " неверный аргумент типа: commandp"

что не так со следующим кодом:

(defun test
  (interactive)
  (message "hello"))
(global-set-key '[f4]  'test)

при оценке с eval-region и нажмите клавишу Ф4 Я получаю сообщение об ошибке:

Wrong type argument: commandp, test

1 ответов


вам не хватает списка аргументов вашего test функция, поэтому Emacs интерпретирует (interactive) форма как arglist. Таким образом, вы определили неинтерактивную функцию 1 аргумента вместо интерактивной команды без аргументов.

ты хочешь:

(defun test ()
  "My command test"
  (interactive)
  (message "hello"))

уроки:

  1. всегда добавляйте строку doc - если бы вы это сделали, Emacs пожаловался бы
  2. использовать elint (поставляется с Emacs, попробуйте C-h A elint РЕТ).