]> git.eshelyaron.com Git - emacs.git/commitdiff
(Info-find-emacs-command-nodes): Rewrite to use
authorEli Zaretskii <eliz@gnu.org>
Fri, 11 Aug 2000 13:10:55 +0000 (13:10 +0000)
committerEli Zaretskii <eliz@gnu.org>
Fri, 11 Aug 2000 13:10:55 +0000 (13:10 +0000)
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.

lisp/ChangeLog
lisp/info.el

index f508d70515fe37d06e265d0a02c34bcb2d9c7310..691a611178c9f097424dff29ad49d9928145f752 100644 (file)
@@ -1,3 +1,11 @@
+2000-08-11  Eli Zaretskii  <eliz@is.elta.co.il>
+
+       * info.el (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.
+
 2000-08-11  eliz  <eliz@is.elta.co.il>
 
        * menu-bar.el (menu-bar-help-menu): Add a :help string.
index 62482127f853758d5748831f895e02a804dc6e5e..eb71449e6c4a699119c995d6027185d14591f27f 100644 (file)
@@ -2194,7 +2194,7 @@ The locations are of the format used in `Info-history', i.e.
 \(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 @@ The locations are of the format used in `Info-history', i.e.
            (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 @@ the variable `Info-file-list-for-emacs'."
          ;; 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)