]> git.eshelyaron.com Git - emacs.git/commitdiff
(help-setup-xref): Change all callers to
authorKarl Heuer <kwzh@gnu.org>
Mon, 1 Jun 1998 21:11:47 +0000 (21:11 +0000)
committerKarl Heuer <kwzh@gnu.org>
Mon, 1 Jun 1998 21:11:47 +0000 (21:11 +0000)
use (function args...) instead of (function . arg).  Doc fix.
(help-follow): Put (point) at front of elts of help-xref-stack.
(help-xref-stack): Elt format now (POSITION FUNCTION ARGS).
(help-xref-stack-item): Doc fix.
(help-xref-go-back): Assume new format for help-xref-stack.
(help-follow): Look for prop on previous char if next char has none.
Avoid error at beginning or end of buffer.
(describe-bindings): New optional arg BUFFER.
Use help-setup-xref.

lisp/help.el

index 1c15f4f87e4fd36fd4061db82378e47e4daae3e9..8d9f94f425406547af7cc0907afb078de19561b5 100644 (file)
 
 (defvar help-xref-stack nil
   "A stack of ways by which to return to help buffers after following xrefs.
-Used by `help-follow' and `help-xref-go-back'.")
+Used by `help-follow' and `help-xref-go-back'.
+An element looks like (POSITION FUNCTION ARGS...).
+To use the element, do (apply FUNCTION ARGS) then (goto-char POSITION).")
 (put 'help-xref-stack 'permanent-local t)
 
 (defvar help-xref-stack-item nil
-  "An item for `help-follow' in this buffer to push onto `help-xref-stack'.")
+  "An item for `help-follow' in this buffer to push onto `help-xref-stack'.
+The format is (FUNCTION ARGS...).")
 (put 'help-xref-stack-item 'permanent-local t)
 
 (setq-default help-xref-stack nil help-xref-stack-item nil)
@@ -377,7 +380,7 @@ followed by the major mode, which is described on the last page.\n\f\n"))
     (princ mode-name)
     (princ " mode:\n")
     (princ (documentation major-mode))
-    (help-setup-xref (cons #'help-xref-mode (current-buffer)) (interactive-p))
+    (help-setup-xref (list #'help-xref-mode (current-buffer)) (interactive-p))
     (print-help-return-message)))
 
 ;; So keyboard macro definitions are documented correctly
@@ -658,7 +661,7 @@ C-w Display information on absence of warranty for GNU Emacs."
       (if doc
          (progn (terpri)
                 (princ doc)
-                (help-setup-xref (cons #'describe-function function) (interactive-p)))
+                (help-setup-xref (list #'describe-function function) (interactive-p)))
        (princ "not documented")))))
 
 ;; We return 0 if we can't find a variable to return.
@@ -732,7 +735,7 @@ Returns the documentation as a string, also."
          (terpri)
          (let ((doc (documentation-property variable 'variable-documentation)))
            (princ (or doc "not documented as a variable.")))
-          (help-setup-xref (cons #'describe-variable variable) (interactive-p))
+          (help-setup-xref (list #'describe-variable variable) (interactive-p))
 
          ;; Make a link to customize if this variable can be customized.
          (if (or (get variable 'custom-type)
@@ -756,17 +759,21 @@ Returns the documentation as a string, also."
            (buffer-string))))
     (message "You did not specify a variable")))
 
-(defun describe-bindings (&optional prefix)
+(defun describe-bindings (&optional prefix buffer)
   "Show a list of all defined keys, and their definitions.
 We put that list in a buffer, and display the buffer.
 
 The optional argument PREFIX, if non-nil, should be a key sequence;
-then we display only bindings that start with that prefix."
+then we display only bindings that start with that prefix.
+The optional argument BUFFER specifies which buffer's bindings
+to display (default, the current buffer)."
   (interactive "P")
-  (describe-bindings-internal nil prefix)
+  (or buffer (setq buffer (current-buffer)))
+  (with-current-buffer buffer
+    (describe-bindings-internal nil prefix))
   (with-current-buffer "*Help*"
-    (setq help-xref-stack nil
-         help-xref-stack-item nil)))
+    (help-setup-xref (list #'describe-bindings prefix buffer)
+                    (interactive-p))))
 
 (defun where-is (definition &optional insert)
   "Print message listing key sequences that invoke specified command.
@@ -889,7 +896,7 @@ distinguish references to variables, functions and symbols.")
 (defun help-setup-xref (item interactive-p)
   "Invoked from commands using the \"*Help*\" buffer to install some xref info.
 
-ITEM is a (function . args) pair appropriate for recreating the help
+ITEM is a (FUNCTION . ARGS) pair appropriate for recreating the help
 buffer after following a reference.  INTERACTIVE-P is non-nil if the
 calling command was invoked interactively.  In this case the stack of
 items for help buffer \"back\" buttons is cleared."
@@ -1032,7 +1039,7 @@ help buffer."
     (goto-char (point-max))
     (insert "\n\n" fdoc))
   (goto-char (point-min))
-  (help-setup-xref (cons #'help-xref-interned symbol) nil))
+  (help-setup-xref (list #'help-xref-interned symbol) nil))
 
 (defun help-xref-mode (buffer)
   "Do a `describe-mode' for the specified BUFFER."
@@ -1055,17 +1062,17 @@ help buffer."
 (defun help-xref-go-back (buffer)
   "Go back to the previous help buffer text using info on `help-xref-stack'."
   (interactive)
-  (let (item method args)
+  (let (item position method args)
     (with-current-buffer buffer
       (when help-xref-stack
        (setq help-xref-stack (cdr help-xref-stack)) ; due to help-follow
        (setq item (car help-xref-stack)
-             method (car item)
-             args (cdr item))
+             position (car item)
+             method (cadr item)
+             args (cddr item))
        (setq help-xref-stack (cdr help-xref-stack))))
-    (if (listp args)
-       (apply method args)
-      (funcall method args))))
+    (apply method args)
+    (goto-char position)))
 
 (defun help-go-back ()
   (interactive)
@@ -1076,10 +1083,14 @@ help buffer."
 
 For the cross-reference format, see `help-make-xrefs'."
   (interactive "d")
-  (let* ((help-data (get-text-property pos 'help-xref))
+  (let* ((help-data (or (and (not (= pos (point-max)))
+                            (get-text-property pos 'help-xref))
+                       (and (not (= pos (point-min)))
+                            (get-text-property (1- pos) 'help-xref))))
          (method (car help-data))
          (args (cdr help-data)))
-    (setq help-xref-stack (cons help-xref-stack-item help-xref-stack))
+    (setq help-xref-stack (cons (cons (point) help-xref-stack-item)
+                               help-xref-stack))
     (setq help-xref-stack-item nil)
     (when help-data
       ;; There is a reference at point.  Follow it.