2013-07-19 16 views
5

describe-functionを呼び出すEmacs関数を書きたいと思っています。そして、current-wordという名前の関数がない場合は、describe-variableを呼び出します。Emacsでcurrent-wordのdescribe-functionを呼び出す方法は?

私はそれを書くことを試みたが、私も、私はそれを書くことができますどのように

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

... current-wordため describe-functionを呼び出すことができませんでしたか?このような

答えて

6

何か作業をする必要があります:

(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

クールなもの - current-wordの結果は、describe-functionが動作する前に(intern-softを介して)シンボルに変換する必要があります。 – spike

+0

ありがとう、これは私を助けてくれる! – Tetsu

2

ここではより一般的な機能です:

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

それは特別な形式のために働く、例えばand、ならびにマクロのために、例えば、 case。 これは、変数を記述しようとする前に、変数がバインドされていることを確認します。

+0

この機能は私の考えよりも手軽です。ありがとう! – Tetsu

関連する問題