2013-07-19 13 views
5

Desidero scrivere una funzione Emacs che chiama describe-function per current-word. E se non vi è alcuna funzione denominata current-word, allora chiama describe-variable.Come chiamare la funzione descrittiva per la parola corrente in Emacs?

ho cercato di scriverlo, ma non potevo nemmeno chiamare describe-function per current-word ...

(defun describe-function-or-variable() 
(interactive) 
(describe-function `(current-word))) 

Come posso scriverlo?

risposta

6

Qualcosa del genere dovrebbe funzionare:

(defun describe-function-or-variable() 
    (interactive) 
    (let ((sym (intern-soft (current-word)))) 
    (cond ((null sym) 
      "nothing") 
      ((functionp sym) 
      (describe-function sym)) 
      (t 
      (describe-variable sym))))) 
+0

Cose interessanti: il risultato della parola corrente deve essere convertito in un simbolo (tramite 'intern-soft') prima che la funzione descriva funzioni su di esso. – spike

+0

Grazie, questo mi aiuta molto! – Tetsu

2

Ecco una funzione più generale:

(defun describe-function-or-variable() 
    (interactive) 
    (let ((sym (intern-soft (current-word)))) 
    (unless 
     (cond ((null sym)) 
       ((not (eq t (help-function-arglist sym))) 
       (describe-function sym)) 
       ((boundp sym) 
       (describe-variable sym))) 
     (message "nothing")))) 

Funziona per forme speciali, per esempio and, nonché per macro, ad es. case. Si assicura anche che la variabile sia vincolata, prima di provare a descriverla.

+0

Questa funzione sembra più maneggevole della mia idea. Grazie! – Tetsu

Problemi correlati