2013-12-12 2 views
6

Что случилось со следующим кодом:ошибка Emacs Lisp "Неправильный тип аргумента: commandp"

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

При оценке этого с eval-region и нажав F4 я получаю ошибку:

Wrong type argument: commandp, test 
+4

Попробуйте '(defun test() ...)' с пустым списком параметров. – uselpa

+0

Да, это работает. Большое спасибо! Вы можете дать это как ответ, и я приму это. –

+0

Добро пожаловать ;-) – uselpa

ответ

10

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

Что вы хотите:

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

уроки:

  1. Всегда добавить строку документации - если вы сделали, Emacs бы жаловался
  2. Использование elint (поставляется с Emacs, попробуйте Ch a elint RET).
+0

Спасибо за совет! –

+0

Где я могу найти информацию о 'elint'? –

+1

@ HåkonHægland: elint поставляется с Emacs, см. Редактирование – sds

Смежные вопросы