changeset 46437:6987a52d9b98

(view): Always require. (help-xref-mule-regexp): Don't use defconst for variables. (help-setup-xref): Keep the last 10 elements of the stack. (help-xref-override-view-map): New var. (help-make-xrefs): Use it instead of building a new map each time. (help-function-def): Allow help-fun to take a buffer as arg.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Tue, 16 Jul 2002 16:02:35 +0000
parents ca3ac4d14e9e
children fd2419f6c4d9
files lisp/help-mode.el
diffstat 1 files changed, 23 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/help-mode.el	Tue Jul 16 15:50:57 2002 +0000
+++ b/lisp/help-mode.el	Tue Jul 16 16:02:35 2002 +0000
@@ -31,7 +31,7 @@
 ;;; Code:
 
 (require 'button)
-(eval-when-compile (require 'view))
+(require 'view)
 
 (defvar help-mode-map (make-sparse-keymap)
   "Keymap for help mode.")
@@ -147,10 +147,11 @@
   :supertype 'help-xref
   'help-function (lambda (fun file)
 		   (require 'find-func)
-		  ;; Don't use find-function-noselect because it follows
+		   ;; Don't use find-function-noselect because it follows
 		   ;; aliases (which fails for built-in functions).
-		   (let* ((location (find-function-search-for-symbol
-				     fun nil file)))
+		   (let ((location
+			  (if (bufferp file) (cons file fun)
+			    (find-function-search-for-symbol fun nil file))))
 		     (pop-to-buffer (car location))
 		     (goto-char (cdr location))))
   'help-echo (purecopy "mouse-2, RET: find function's definition"))
@@ -197,8 +198,8 @@
 	(list (cons (selected-window) help-return-method))))
 
 
-;;; Grokking cross-reference information in doc strings and
-;;; hyperlinking it.
+;; Grokking cross-reference information in doc strings and
+;; hyperlinking it.
 
 ;; This may have some scope for extension and the same or something
 ;; similar should be done for widget doc strings, which currently use
@@ -220,7 +221,7 @@
 The words preceding the quoted symbol can be used in doc strings to
 distinguish references to variables, functions and symbols.")
 
-(defconst help-xref-mule-regexp nil
+(defvar help-xref-mule-regexp nil
   "Regexp matching doc string references to MULE-related keywords.
 
 It is usually nil, and is temporarily bound to an appropriate regexp
@@ -245,11 +246,12 @@
 because we want to record the \"previous\" position of point so we can
 restore it properly when going back."
   (with-current-buffer (help-buffer)
-    (if interactive-p
-	;; Why do we want to prevent the user from going back ??  -stef
-	(setq help-xref-stack nil)
-      (when help-xref-stack-item
-	(push (cons (point) help-xref-stack-item) help-xref-stack)))
+    (when help-xref-stack-item
+      (push (cons (point) help-xref-stack-item) help-xref-stack))
+    (when interactive-p
+      (let ((tail (nthcdr 10 help-xref-stack)))
+	;; Truncate the stack.
+	(if tail (setcdr tail nil))))
     (setq help-xref-stack-item item)))
 
 (defvar help-xref-following nil
@@ -261,6 +263,13 @@
        (current-buffer)
      (get-buffer-create "*Help*"))))
 
+(defvar help-xref-override-view-map
+  (let ((map (make-sparse-keymap)))
+    (set-keymap-parent map view-mode-map)
+    (define-key map "\r" nil)
+    map)
+  "Replacement keymap for `view-mode' in help buffers.")
+
 ;;;###autoload
 (defun help-make-xrefs (&optional buffer)
   "Parse and hyperlink documentation cross-references in the given BUFFER.
@@ -406,11 +415,7 @@
 				   (current-buffer))))
       ;; View mode steals RET from us.
       (set (make-local-variable 'minor-mode-overriding-map-alist)
-           (list (cons 'view-mode
-                       (let ((map (make-sparse-keymap)))
-                         (set-keymap-parent map view-mode-map)
-                         (define-key map "\r" 'help-follow)
-                         map))))
+           (list (cons 'view-mode help-xref-override-view-map)))
       (set-buffer-modified-p old-modified))))
 
 ;;;###autoload
@@ -517,7 +522,7 @@
 	  (help-setup-xref (list #'help-xref-interned symbol) nil)))))))
 
 
-;;; Navigation/hyperlinking with xrefs
+;; Navigation/hyperlinking with xrefs
 
 (defun help-follow-mouse (click)
   "Follow the cross-reference that you CLICK on."