emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] emacs-25 9da53e2 2/2: Let describe-function work for lambd


From: Noam Postavsky
Subject: [Emacs-diffs] emacs-25 9da53e2 2/2: Let describe-function work for lambda again
Date: Sat, 22 Oct 2016 02:47:08 +0000 (UTC)

branch: emacs-25
commit 9da53e2d353c97ab955fe8c35482b5eb335316c1
Author: Noam Postavsky <address@hidden>
Commit: Noam Postavsky <address@hidden>

    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'.
---
 lisp/help-fns.el |   33 +++++++++++++++++----------------
 1 file changed, 17 insertions(+), 16 deletions(-)

diff --git a/lisp/help-fns.el b/lisp/help-fns.el
index 26d8839..7dfa670 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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]