]> git.eshelyaron.com Git - emacs.git/commitdiff
(Info-extract-menu-counting): New argment no-detail to
authorMartin Rudalics <rudalics@gmx.at>
Fri, 10 Oct 2008 13:47:49 +0000 (13:47 +0000)
committerMartin Rudalics <rudalics@gmx.at>
Fri, 10 Oct 2008 13:47:49 +0000 (13:47 +0000)
skip detailed node listings.
(Info-forward-node): New argument not-up to inhibit going up.
(Info-final-node): Call Info-extract-menu-counting and
Info-forward-node with the new arguments set to avoid infinite
looping.  (Bug#1116)

lisp/ChangeLog
lisp/info.el

index cb4bd363f8cd51c5f9c3c9e71bec9042b0388d47..562f43f1f75d966529f0f0adc189c9b10b25a788 100644 (file)
@@ -1,3 +1,12 @@
+2008-10-10  Martin Rudalics  <rudalics@gmx.at>
+
+       * info.el (Info-extract-menu-counting): New argment no-detail to
+       skip detailed node listings.
+       (Info-forward-node): New argument not-up to inhibit going up.
+       (Info-final-node): Call Info-extract-menu-counting and
+       Info-forward-node with the new arguments set to avoid infinite
+       looping.  (Bug#1116)
+
 2008-10-10  Eli Zaretskii  <eliz@gnu.org>
 
        * startup.el (command-line): Don't invoke tool-bar-mode if it is
index 3b7603a2f838c1cb9c5cda13ca0aaf4f076b148a..19604424970275f42d9a95e515aa57680ccb50d6 100644 (file)
@@ -2412,17 +2412,21 @@ new buffer."
        (Info-extract-menu-node-name nil (Info-index-node))))))
 
 ;; If COUNT is nil, use the last item in the menu.
-(defun Info-extract-menu-counting (count)
+(defun Info-extract-menu-counting (count &optional no-detail)
   (let ((case-fold-search t))
     (save-excursion
-      (let ((case-fold-search t))
+      (let ((case-fold-search t)
+           (bound (when (and no-detail
+                             (re-search-forward
+                              "^[ \t-]*The Detailed Node Listing" nil t))
+                    (match-beginning 0))))
        (goto-char (point-min))
-       (or (search-forward "\n* menu:" nil t)
+       (or (search-forward "\n* menu:" bound t)
            (error "No menu in this node"))
        (if count
-           (or (search-forward "\n* " nil t count)
+           (or (search-forward "\n* " bound t count)
                (error "Too few items in menu"))
-         (while (search-forward "\n* " nil t)
+         (while (search-forward "\n* " bound t)
            nil))
        (Info-extract-menu-node-name nil (Info-index-node))))))
 
@@ -2445,17 +2449,19 @@ N is the digit argument used to invoke this command."
   (Info-goto-node "Top")
   (let ((Info-history nil)
        (case-fold-search t))
-    ;; Go to the last node in the menu of Top.
-    (Info-goto-node (Info-extract-menu-counting nil))
+    ;; Go to the last node in the menu of Top.  But don't delve into
+    ;; detailed node listings.
+    (Info-goto-node (Info-extract-menu-counting nil t))
     ;; If the last node in the menu is not last in pointer structure,
-    ;; move forward until we can't go any farther.
-    (while (Info-forward-node t t) nil)
+    ;; move forward (but not down- or upward - see bug#1116) until we
+    ;; can't go any farther.
+    (while (Info-forward-node t t t) nil)
     ;; Then keep moving down to last subnode, unless we reach an index.
     (while (and (not (Info-index-node))
                (save-excursion (search-forward "\n* Menu:" nil t)))
       (Info-goto-node (Info-extract-menu-counting nil)))))
 
-(defun Info-forward-node (&optional not-down no-error)
+(defun Info-forward-node (&optional not-down not-up no-error)
   "Go forward one node, considering all nodes as forming one sequence."
   (interactive)
   (goto-char (point-min))
@@ -2473,7 +2479,8 @@ N is the digit argument used to invoke this command."
          ((save-excursion (search-backward "next:" nil t))
           (Info-next)
           t)
-         ((and (save-excursion (search-backward "up:" nil t))
+         ((and (not not-up)
+               (save-excursion (search-backward "up:" nil t))
                ;; Use string-equal, not equal, to ignore text props.
                (not (string-equal (downcase (Info-extract-pointer "up"))
                                   "top")))
@@ -2481,7 +2488,7 @@ N is the digit argument used to invoke this command."
             (Info-up)
             (let (Info-history success)
               (unwind-protect
-                  (setq success (Info-forward-node t no-error))
+                  (setq success (Info-forward-node t nil no-error))
                 (or success (Info-goto-node old-node))))))
          (no-error nil)
          (t (error "No pointer forward from this node")))))