diff lisp/info.el @ 30763:46173131cdc4

(Info-find-emacs-command-nodes): Rewrite to use technique similar to Info-index, instead of relying on specific names of relevant Index nodes. (Info-goto-emacs-command-node): Bind Info-history to nil when going to the first node found by Info-find-emacs-command-nodes.
author Eli Zaretskii <eliz@gnu.org>
date Fri, 11 Aug 2000 13:08:11 +0000
parents 5d4414327c06
children 928516355e95
line wrap: on
line diff
--- a/lisp/info.el	Fri Aug 11 13:01:28 2000 +0000
+++ b/lisp/info.el	Fri Aug 11 13:08:11 2000 +0000
@@ -2194,7 +2194,7 @@
 \(FILENAME NODENAME BUFFERPOS\)."
   (let ((where '())
 	(cmd-desc (concat "^\\* +" (regexp-quote (symbol-name command))
-			  ":\\s *\\(.*\\)\\.$"))
+			  "\\( <[0-9]+>\\)?:\\s *\\(.*\\)\\.$"))
 	(info-file "emacs"))		;default
     ;; Determine which info file this command is documented in.
     (if (get command 'info-file)
@@ -2213,36 +2213,30 @@
 	    (if (string-match regexp (symbol-name command))
 		(setq info-file file file-list nil))
 	    (setq file-list (cdr file-list))))))
-    (save-excursion
-      (condition-case nil
-	  (Info-find-node info-file "Command Index")
-	;; Some manuals may not have a separate Command Index node,
-	;; so try other variations as well.
-	(error
-	 (condition-case nil
-	     (Info-find-node info-file "Function Index")
-	   (error
-	    (condition-case nil
-		(Info-find-node info-file "Function and Variable Index")
-	      (error
-	       (condition-case nil
-		   (Info-find-node info-file "Concept Index")
-		 (error
-		  (condition-case nil
-		      (Info-find-node info-file "Index")
-		    (error
-		     (message "Info file `%s' seems to lack an Index"
-			      info-file)
-		     (sit-for 2)))))))))))
-      ;; Take the index node off the Info history.
-      (setq Info-history (cdr Info-history))
-      (goto-char (point-max))
-      (while (re-search-backward cmd-desc nil t)
-	(setq where (cons (list Info-current-file
-				(match-string-no-properties 1)
+    (Info-find-node info-file "Top")
+    (or (and (search-forward "\n* menu:" nil t)
+	     (re-search-forward "\n\\* \\(.*\\<Index\\>\\)" nil t))
+	(error "Info file `%s' appears to lack an index" info-file))
+    (goto-char (match-beginning 1))
+    ;; Bind Info-history to nil, to prevent the index nodes from
+    ;; getting into the node history.
+    (let ((Info-history nil)
+	  (exact nil)
+	  node found)
+      (Info-goto-node (Info-extract-menu-node-name))
+      (while
+	  (progn
+	    (goto-char (point-min))
+	    (while (re-search-forward cmd-desc nil t)
+	      (setq where
+		    (cons (list Info-current-file
+				(match-string-no-properties 2)
 				0)
 			  where)))
-      where)))
+	    (and (setq node (Info-extract-pointer "next" t))
+		 (string-match "\\<Index\\>" node)))
+	(Info-goto-node node)))
+    where))
 
 ;;;###autoload
 (defun Info-goto-emacs-command-node (command)
@@ -2262,13 +2256,17 @@
 	  ;; FIXME It would be cool if this could use a buffer other
 	  ;; than *info*.
 	  (pop-to-buffer "*info*")
-	  (Info-find-node (car (car where))
-			  (car (cdr (car where))))
+	  ;; Bind Info-history to nil, to prevent the last Index node
+	  ;; visited by Info-find-emacs-command-nodes from being
+	  ;; pushed onto the history.
+	  (let ((Info-history nil))
+	    (Info-find-node (car (car where))
+			    (car (cdr (car where)))))
 	  (if (> num-matches 1)
 	      (progn
-		;; Info-find-node already pushed (car where) onto
-		;; Info-history.  Put the other nodes that were found on
-		;; the history.
+		;; (car where) will be pushed onto Info-history
+		;; when/if they go to another node.  Put the other
+		;; nodes that were found on the history.
 		(setq Info-history (nconc (cdr where) Info-history))
 		(message "Found %d other entr%s.  Use %s to see %s."
 			 (1- num-matches)