我想编写一个为describe-function
调用current-word
的Emacs函数。如果没有名为current-word
的函数,则会调用describe-variable
。
我试着写它,但我甚至无法拨打describe-function
current-word
...
(defun describe-function-or-variable ()
(interactive)
(describe-function `(current-word)))
我怎么写呢?
答案 0 :(得分: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)))))
答案 1 :(得分: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
。
在尝试描述变量之前,它还确保变量被绑定。