]> git.eshelyaron.com Git - emacs.git/commitdiff
(Info-read-subfile): Allow a file name as arg.
authorRichard M. Stallman <rms@gnu.org>
Sun, 6 Oct 1996 22:50:07 +0000 (22:50 +0000)
committerRichard M. Stallman <rms@gnu.org>
Sun, 6 Oct 1996 22:50:07 +0000 (22:50 +0000)
(Info-search): Restore previous subfile correctly.

lisp/info.el

index 39908c90713cfcee7041f0aea80aa5b32f63593f..efbd3e0fcf4d85b0913f380db328e9d4a44bcffc 100644 (file)
@@ -549,28 +549,34 @@ In standalone mode, \\<Info-mode-map>\\[Info-exit] exits Emacs itself."
   (setq default-directory Info-dir-contents-directory))
 
 (defun Info-read-subfile (nodepos)
-  (set-buffer (marker-buffer Info-tag-table-marker))
-  (goto-char (point-min))
-  (search-forward "\n\^_")
+  ;; NODEPOS is either a position (in the Info file as a whole,
+  ;; not relative to a subfile) or the name of a subfile.
   (let (lastfilepos
        lastfilename)
-    (forward-line 2)
-    (catch 'foo
-      (while (not (looking-at "\^_"))
-       (if (not (eolp))
-           (let ((beg (point))
-                 thisfilepos thisfilename)
-             (search-forward ": ")
-             (setq thisfilename  (buffer-substring beg (- (point) 2)))
-             (setq thisfilepos (read (current-buffer)))
-             ;; read in version 19 stops at the end of number.
-             ;; Advance to the next line.
-             (forward-line 1)
-             (if (> thisfilepos nodepos)
-                 (throw 'foo t))
-             (setq lastfilename thisfilename)
-             (setq lastfilepos thisfilepos))
-         (forward-line 1))))
+    (if (numberp nodepos)
+       (save-excursion
+         (set-buffer (marker-buffer Info-tag-table-marker))
+         (goto-char (point-min))
+         (search-forward "\n\^_")
+         (forward-line 2)
+         (catch 'foo
+           (while (not (looking-at "\^_"))
+             (if (not (eolp))
+                 (let ((beg (point))
+                       thisfilepos thisfilename)
+                   (search-forward ": ")
+                   (setq thisfilename  (buffer-substring beg (- (point) 2)))
+                   (setq thisfilepos (read (current-buffer)))
+                   ;; read in version 19 stops at the end of number.
+                   ;; Advance to the next line.
+                   (forward-line 1)
+                   (if (> thisfilepos nodepos)
+                       (throw 'foo t))
+                   (setq lastfilename thisfilename)
+                   (setq lastfilepos thisfilepos))
+               (forward-line 1)))))
+      (setq lastfilename nodepos)
+      (setq lastfilepos 0))
     (set-buffer (get-buffer "*info*"))
     (or (equal Info-current-subfile lastfilename)
        (let ((buffer-read-only nil))
@@ -582,7 +588,8 @@ In standalone mode, \\<Info-mode-map>\\[Info-exit] exits Emacs itself."
          (setq Info-current-subfile lastfilename)))
     (goto-char (point-min))
     (search-forward "\n\^_")
-    (+ (- nodepos lastfilepos) (point))))
+    (if (numberp nodepos)
+       (+ (- nodepos lastfilepos) (point)))))
 
 ;; Select the info node that point is in.
 (defun Info-select-node ()
@@ -727,6 +734,7 @@ In standalone mode, \\<Info-mode-map>\\[Info-exit] exits Emacs itself."
        (onode Info-current-node)
        (ofile Info-current-file)
        (opoint (point))
+       (ostart (window-start))
        (osubfile Info-current-subfile))
     (save-excursion
       (save-restriction
@@ -771,9 +779,10 @@ In standalone mode, \\<Info-mode-map>\\[Info-exit] exits Emacs itself."
                  (message "")
                (signal 'search-failed (list regexp))))
          (if (not found)
-             (progn (Info-read-subfile opoint)
+             (progn (Info-read-subfile osubfile)
                     (goto-char opoint)
-                    (Info-select-node)))))
+                    (Info-select-node)
+                    (set-window-start (selected-window) ostart)))))
     (widen)
     (goto-char found)
     (Info-select-node)