2013-07-19 12 views
5

Chcę napisać funkcję Emacs, która wywołuje describe-function dla current-word. A jeśli nie ma funkcji o nazwie current-word, wówczas wywołuje describe-variable.Jak wywołać funkcję opisującą bieżące słowo w Emacs?

próbowałem go napisać, ale nie mogę nawet zadzwonić describe-function dla current-word ...

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

Jak mogę napisać?

Odpowiedz

6

Coś jak to powinno działać:

(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

Fajne rzeczy - wynik bieżącego słowa musi zostać przekonwertowany na symbol (przez 'intern-soft') zanim funkcja opisywania będzie na nim działała. – spike

+0

Dzięki, To mi bardzo pomaga! – Tetsu

2

Oto bardziej ogólnego funkcja:

(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")))) 

Działa na specjalnych formach, na przykład and, a także dla makr, np. case. Upewnia się również, że zmienna jest związana, zanim spróbujesz ją opisać.

+0

Ta funkcja wydaje się bardziej poręczna niż mój pomysł. Dzięki! – Tetsu

Powiązane problemy