(Info-insert-dir): Ignore duplicate directories.
authorRichard M. Stallman <rms@gnu.org>
Fri, 28 May 1993 18:35:23 +0000 (18:35 +0000)
committerRichard M. Stallman <rms@gnu.org>
Fri, 28 May 1993 18:35:23 +0000 (18:35 +0000)
lisp/info.el

index 914e35f..e207964 100644 (file)
@@ -287,36 +287,39 @@ to read a file name from the minibuffer."
   (if Info-dir-contents
       (insert Info-dir-contents)
     (let ((dirs Info-directory-list)
-         buffers buffer others nodes)
+         buffers buffer others nodes dirs-done)
 
       ;; Search the directory list for the directory file.
       (while dirs
-       ;; Try several variants of specified name.
-       ;; Try upcasing, appending `.info', or both.
-       (let* (temp
-              (buffer
-               (cond
-                ((progn (setq temp (expand-file-name "DIR" (car dirs)))
-                        (file-exists-p temp))
-                 (find-file-noselect temp))
-                ((progn (setq temp (expand-file-name "dir" (car dirs)))
-                        (file-exists-p temp))
-                 (find-file-noselect temp))
-                ((progn (setq temp (expand-file-name "DIR.INFO" (car dirs)))
-                        (file-exists-p temp))
-                 (find-file-noselect temp))
-                ((progn (setq temp (expand-file-name "dir.info" (car dirs)))
-                        (file-exists-p temp))
-                 (find-file-noselect temp)))))
-         (if buffer (setq buffers (cons buffer buffers)))
-         (setq dirs (cdr dirs))))
+       (or (member (file-truename (expand-file-name (car dirs))) dirs-done)
+           (member (directory-file-name (file-truename (expand-file-name (car dirs))))
+                   dirs-done)
+           ;; Try several variants of specified name.
+           ;; Try upcasing, appending `.info', or both.
+           (let* (temp
+                  (buffer
+                   (cond
+                    ((progn (setq temp (expand-file-name "DIR" (car dirs)))
+                            (file-exists-p temp))
+                     (find-file-noselect temp))
+                    ((progn (setq temp (expand-file-name "dir" (car dirs)))
+                            (file-exists-p temp))
+                     (find-file-noselect temp))
+                    ((progn (setq temp (expand-file-name "DIR.INFO" (car dirs)))
+                            (file-exists-p temp))
+                     (find-file-noselect temp))
+                    ((progn (setq temp (expand-file-name "dir.info" (car dirs)))
+                            (file-exists-p temp))
+                     (find-file-noselect temp)))))
+             (setq dirs-done
+                   (cons (file-truename (expand-file-name (car dirs)))
+                         dirs-done))
+             (if buffer (setq buffers (cons buffer buffers)))))
+       (setq dirs (cdr dirs)))
 
       ;; Distinguish the dir file that comes with Emacs from all the
-      ;; others.  [This sounds like baloney - who knows what order
-      ;; Info-directory-list is in, especially after checking the
-      ;; INFOPATH variable, and why should Emacs's dir be special?  If
-      ;; you understand what this comment should have said, please
-      ;; change it.]
+      ;; others.  Yes, that is really what this is supposed to do.
+      ;; If it doesn't work, fix it.
       (setq buffer (car buffers)
            others (cdr buffers))