From 55eb72816b32f5a869e843036fb122065c1ed56f Mon Sep 17 00:00:00 2001 From: Artur Malabarba Date: Thu, 5 Feb 2015 15:28:04 -0200 Subject: [PATCH] help-fns.el (describe-function-or-variable): New function on `C-h o' --- lisp/ChangeLog | 10 ++++++++++ lisp/help-fns.el | 31 +++++++++++++++++++++++++++++++ lisp/help-mode.el | 9 ++++++--- lisp/help.el | 2 ++ 4 files changed, 49 insertions(+), 3 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 694a35be61d..92026c7c10e 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,13 @@ +2015-02-05 Kelly Dean + + * help-mode.el (help-xref-interned): Pass BUFFER and FRAME to + `describe-variable'. + + * help-fns.el (describe-function-or-variable): New function. + + * help.el (help-map): Bind `describe-function-or-variable' to o. + (help-for-help-internal): Document o key. + 2015-02-05 Stefan Monnier * delsel.el: Deprecate the `kill' option. Use lexical-binding. diff --git a/lisp/help-fns.el b/lisp/help-fns.el index c0d63935035..61e8d54acb3 100644 --- a/lisp/help-fns.el +++ b/lisp/help-fns.el @@ -930,6 +930,37 @@ file-local variable.\n") ;;;###autoload +(defun describe-function-or-variable (symbol &optional buffer frame) + "Display the full documentation of the function or variable SYMBOL. +If SYMBOL is a variable and has a buffer-local value in BUFFER or FRAME +\(default to the current buffer and current frame), it is displayed along +with the global value." + (interactive + (let* ((v-or-f (variable-at-point)) + (found (symbolp v-or-f)) + (v-or-f (if found v-or-f (function-called-at-point))) + (found (or found v-or-f)) + (enable-recursive-minibuffers t) + val) + (setq val (completing-read (if found + (format + "Describe function or variable (default %s): " v-or-f) + "Describe function or variable: ") + obarray + (lambda (vv) + (or (fboundp vv) + (get vv 'variable-documentation) + (and (boundp vv) (not (keywordp vv))))) + t nil nil + (if found (symbol-name v-or-f)))) + (list (if (equal val "") + v-or-f (intern val))))) + (if (not (symbolp symbol)) (message "You didn't specify a function or variable") + (unless (buffer-live-p buffer) (setq buffer (current-buffer))) + (unless (frame-live-p frame) (setq frame (selected-frame))) + (help-xref-interned symbol buffer frame))) + +;;;###autoload (defun describe-syntax (&optional buffer) "Describe the syntax specifications in the syntax table of BUFFER. The descriptions are inserted in a help buffer, which is then displayed. diff --git a/lisp/help-mode.el b/lisp/help-mode.el index c62ddc3dcd0..564362a0c43 100644 --- a/lisp/help-mode.el +++ b/lisp/help-mode.el @@ -621,10 +621,13 @@ See `help-make-xrefs'." ;; Additional functions for (re-)creating types of help buffers. -(defun help-xref-interned (symbol) + +;;;###autoload +(defun help-xref-interned (symbol &optional buffer frame) "Follow a hyperlink which appeared to be an arbitrary interned SYMBOL. Both variable, function and face documentation are extracted into a single -help buffer." +help buffer. If SYMBOL is a variable, include buffer-local value for optional +BUFFER or FRAME." (with-current-buffer (help-buffer) ;; Push the previous item on the stack before clobbering the output buffer. (help-setup-xref nil nil) @@ -640,7 +643,7 @@ help buffer." (get symbol 'variable-documentation)) ;; Don't record the current entry in the stack. (setq help-xref-stack-item nil) - (describe-variable symbol)))) + (describe-variable symbol buffer frame)))) (cond (sdoc ;; We now have a help buffer on the variable. diff --git a/lisp/help.el b/lisp/help.el index bf724252d5a..fb1719ac9c9 100644 --- a/lisp/help.el +++ b/lisp/help.el @@ -95,6 +95,7 @@ (define-key map "k" 'describe-key) (define-key map "l" 'view-lossage) (define-key map "m" 'describe-mode) + (define-key map "o" 'describe-function-or-variable) (define-key map "n" 'view-emacs-news) (define-key map "p" 'finder-by-keyword) (define-key map "P" 'describe-package) @@ -218,6 +219,7 @@ L LANG-ENV Describes a specific language environment, or RET for current. m Display documentation of current minor modes and current major mode, including their special commands. n Display news of recent Emacs changes. +o SYMBOL Display the given function or variable's documentation and value. p TOPIC Find packages matching a given topic keyword. P PACKAGE Describe the given Emacs Lisp package. r Display the Emacs manual in Info mode. -- 2.11.4.GIT