summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNoam Postavsky <npostavs@gmail.com>2016-10-03 18:49:56 -0400
committerNoam Postavsky <npostavs@gmail.com>2016-10-21 22:39:37 -0400
commit9da53e2d353c97ab955fe8c35482b5eb335316c1 (patch)
treec2765fbfffffec106172529c8832a9dd860fcb24
parent5c2da93015abb2e6746d54e5946dfaa5ede4e685 (diff)
downloademacs-9da53e2d353c97ab955fe8c35482b5eb335316c1.tar.gz
Let describe-function work for lambda again
Since commit "* lisp/help-fns.el (describe-function): More type checking[...]", `describe-function' throws a user-error when given a non-symbol. This prevents the [back] button in a *Help* buffer from working when the page it goes back to describes an anonymous function (e.g., the result of `describe-key' on a key which is bound to a lambda form). * lisp/help-fns.el (describe-function): Move the checks on FUNCTION being an fbound symbol into the `interactive' form. This allows non-interactive calls to pass an anonymous function (Bug #24221). Note that passing a non-bound symbol non-interactively will still trigger a `void-function' error from `describe-function-1'.
-rw-r--r--lisp/help-fns.el33
1 files changed, 17 insertions, 16 deletions
diff --git a/lisp/help-fns.el b/lisp/help-fns.el
index 26d8839f7cb..7dfa6700b29 100644
--- a/lisp/help-fns.el
+++ b/lisp/help-fns.el
@@ -50,23 +50,24 @@ to get buffer-local values.")
;;;###autoload
(defun describe-function (function)
- "Display the full documentation of FUNCTION (a symbol)."
+ "Display the full documentation of FUNCTION (a symbol).
+When called from lisp, FUNCTION may also be a function object."
(interactive
- (let ((fn (function-called-at-point))
- (enable-recursive-minibuffers t)
- val)
- (setq val (completing-read (if fn
- (format "Describe function (default %s): " fn)
- "Describe function: ")
- obarray 'fboundp t nil nil
- (and fn (symbol-name fn))))
- (list (if (equal val "")
- fn (intern val)))))
- (or (and function (symbolp function))
- (user-error "You didn't specify a function symbol"))
- (or (fboundp function)
- (user-error "Symbol's function definition is void: %s" function))
-
+ (let* ((fn (function-called-at-point))
+ (enable-recursive-minibuffers t)
+ (val (completing-read
+ (if fn
+ (format "Describe function (default %s): " fn)
+ "Describe function: ")
+ obarray 'fboundp t nil nil
+ (and fn (symbol-name fn)))))
+ (unless (equal val "")
+ (setq fn (intern val)))
+ (unless (and fn (symbolp fn))
+ (user-error "You didn't specify a function symbol"))
+ (unless (fboundp fn)
+ (user-error "Symbol's function definition is void: %s" fn))
+ (list fn)))
;; We save describe-function-orig-buffer on the help xref stack, so
;; it is restored by the back/forward buttons. 'help-buffer'
;; expects (current-buffer) to be a help buffer when processing