changeset 42679:8e00fb340b95

(describe-mode): Call help-setup-xref in the help buffer. Switch buffers only after calling `help-buffer'.
author Richard M. Stallman <rms@gnu.org>
date Sat, 12 Jan 2002 20:53:27 +0000
parents 3e3348e192cf
children 3814cb15269e
files lisp/help.el
diffstat 1 files changed, 41 insertions(+), 37 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/help.el	Sat Jan 12 20:17:00 2002 +0000
+++ b/lisp/help.el	Sat Jan 12 20:53:27 2002 +0000
@@ -501,45 +501,49 @@
 \(listed in `minor-mode-alist') must also be a function whose documentation
 describes the minor mode."
   (interactive)
-  (when buffer (set-buffer buffer))
-  (help-setup-xref (list #'describe-mode (current-buffer)) (interactive-p))
+  (help-setup-xref (list #'describe-mode (or buffer (current-buffer)))
+		   (interactive-p))
+  ;; For the sake of help-do-xref and help-xref-go-back,
+  ;; don't switch buffers before calling `help-buffer'.
   (with-output-to-temp-buffer (help-buffer)
-    (when minor-mode-alist
-      (princ "The major mode is described first.
+    (save-excursion
+      (when buffer (set-buffer buffer))
+      (when minor-mode-alist
+	(princ "The major mode is described first.
 For minor modes, see following pages.\n\n"))
-    (princ mode-name)
-    (princ " mode:\n")
-    (princ (documentation major-mode))
-    (let ((minor-modes minor-mode-alist))
-      (while minor-modes
-	(let* ((minor-mode (car (car minor-modes)))
-	       (indicator (car (cdr (car minor-modes)))))
-	  ;; Document a minor mode if it is listed in minor-mode-alist,
-	  ;; bound locally in this buffer, non-nil, and has a function
-	  ;; definition.
-	  (if (and (boundp minor-mode)
-		   (symbol-value minor-mode)
-		   (fboundp minor-mode))
-	      (let ((pretty-minor-mode minor-mode))
-		(if (string-match "\\(-minor\\)?-mode\\'"
-				  (symbol-name minor-mode))
-		    (setq pretty-minor-mode
-			  (capitalize
-			   (substring (symbol-name minor-mode)
-				      0 (match-beginning 0)))))
-		(while (and indicator (symbolp indicator)
-			    (boundp indicator)
-			    (not (eq indicator (symbol-value indicator))))
-		  (setq indicator (symbol-value indicator)))
-		(princ "\n\f\n")
-		(princ (format "%s minor mode (%s):\n"
-			       pretty-minor-mode
-			       (if indicator
-				   (format "indicator%s" indicator)
-				 "no indicator")))
-		(princ (documentation minor-mode)))))
-	(setq minor-modes (cdr minor-modes))))
-    (print-help-return-message)))
+      (princ mode-name)
+      (princ " mode:\n")
+      (princ (documentation major-mode))
+      (let ((minor-modes minor-mode-alist))
+	(while minor-modes
+	  (let* ((minor-mode (car (car minor-modes)))
+		 (indicator (car (cdr (car minor-modes)))))
+	    ;; Document a minor mode if it is listed in minor-mode-alist,
+	    ;; bound locally in this buffer, non-nil, and has a function
+	    ;; definition.
+	    (if (and (boundp minor-mode)
+		     (symbol-value minor-mode)
+		     (fboundp minor-mode))
+		(let ((pretty-minor-mode minor-mode))
+		  (if (string-match "\\(-minor\\)?-mode\\'"
+				    (symbol-name minor-mode))
+		      (setq pretty-minor-mode
+			    (capitalize
+			     (substring (symbol-name minor-mode)
+					0 (match-beginning 0)))))
+		  (while (and indicator (symbolp indicator)
+			      (boundp indicator)
+			      (not (eq indicator (symbol-value indicator))))
+		    (setq indicator (symbol-value indicator)))
+		  (princ "\n\f\n")
+		  (princ (format "%s minor mode (%s):\n"
+				 pretty-minor-mode
+				 (if indicator
+				     (format "indicator%s" indicator)
+				   "no indicator")))
+		  (princ (documentation minor-mode)))))
+	  (setq minor-modes (cdr minor-modes))))
+      (print-help-return-message))))
 
 
 ;;; Automatic resizing of temporary buffers.