2013-12-12 8 views
6

Cosa c'è di sbagliato con il seguente codice:errore di Emacs Lisp "tipo di argomento sbagliato: commandp"

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

Nella valutazione di questo con eval-region e premendo F4 ottengo l'errore:

Wrong type argument: commandp, test 
+4

Provare '(defun test() ...)' con un elenco di parametri vuoto. – uselpa

+0

Sì, funziona. Grazie mille! Puoi darlo come risposta, e lo accetterò .. –

+0

Prego ;-) – uselpa

risposta

10

Manca l'elenco degli argomenti della funzione test, quindi Emacs interpreta il modulo (interactive) come arglist. Quindi hai definito una funzione non interattiva di 1 argomento invece del comando interattivo di nessun argomento.

Quello che vuoi è:

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

Lezioni apprese:

  1. sempre aggiungere una stringa doc - se l'avete fatto, Emacs sarebbe lamentato
  2. Usa elint (viene fornito con Emacs, provare Ch a elint RET).
+0

Grazie per il consiglio! –

+0

Dove posso trovare informazioni su 'elint'? –

+1

@ HåkonHægland: elint arriva con Emacs, guarda la modifica – sds