emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 60a3c94a14: Remove duplicates from Info-read-node-name-2


From: Lars Ingebrigtsen
Subject: master 60a3c94a14: Remove duplicates from Info-read-node-name-2
Date: Sun, 17 Apr 2022 06:51:42 -0400 (EDT)

branch: master
commit 60a3c94a14da8c9f4fa591bea25ea5189d92fe7a
Author: Oleh Krehel <ohwoeowho@gmail.com>
Commit: Lars Ingebrigtsen <larsi@gnus.org>

    Remove duplicates from Info-read-node-name-2
    
    * lisp/info.el (Info-read-node-name-2): Remove duplicates from
    completions (bug#20365).
---
 lisp/info.el | 45 +++++++++++++--------------------------------
 1 file changed, 13 insertions(+), 32 deletions(-)

diff --git a/lisp/info.el b/lisp/info.el
index ac4169b550..380a8e2780 100644
--- a/lisp/info.el
+++ b/lisp/info.el
@@ -1822,41 +1822,22 @@ directories to search if FILENAME is not absolute; 
SUFFIXES is a
 list of valid filename suffixes for Info files.  See
 `try-completion' for a description of the remaining arguments."
   (setq suffixes (remove "" suffixes))
-  (when (file-name-absolute-p string)
-    (setq dirs (list (file-name-directory string))))
   (let ((names nil)
-       (names-sans-suffix nil)
-        (suffix (concat (regexp-opt suffixes t) "\\'"))
-        (string-dir (file-name-directory string)))
+        (suffix (concat (regexp-opt suffixes t) "\\'")))
     (dolist (dir dirs)
-      (unless dir
-       (setq dir default-directory))
-      (if string-dir (setq dir (expand-file-name string-dir dir)))
       (when (file-directory-p dir)
-       (dolist (file (file-name-all-completions
-                      (file-name-nondirectory string) dir))
-         ;; If the file name has no suffix or a standard suffix,
-         ;; include it.
-         (and (or (null (file-name-extension file))
-                  (string-match suffix file))
-              ;; But exclude subfiles of split Info files.
-              (not (string-match "-[0-9]+\\'" file))
-              ;; And exclude backup files.
-              (not (string-match "~\\'" file))
-              (push (if string-dir (concat string-dir file) file) names))
-         ;; If the file name ends in a standard suffix,
-         ;; add the unsuffixed name as a completion option.
-         (when (string-match suffix file)
-           (setq file (substring file 0 (match-beginning 0)))
-           (push (if string-dir (concat string-dir file) file)
-                 names-sans-suffix)))))
-    ;; If there is just one file, don't duplicate it with suffixes,
-    ;; so `Info-read-node-name-1' will be able to complete a single
-    ;; candidate and to add the terminating ")".
-    (if (and (= (length names) 1) (= (length names-sans-suffix) 1))
-       (setq names names-sans-suffix)
-      (setq names (append names-sans-suffix names)))
-    (complete-with-action action names string pred)))
+        (dolist (file (directory-files dir))
+          ;; If the file name has a standard suffix,
+          ;; include it (without the suffix).
+          (when (and (string-match suffix file)
+                     ;; But exclude subfiles of split Info files.
+                     (not (string-match "\.info-[0-9]+" file))
+                     ;; And exclude backup files.
+                     (not (string-match "~\\'" file)))
+            (push (substring file 0 (match-beginning 0))
+                  names)))))
+    (complete-with-action action (delete-dups (nreverse names))
+                          string pred)))
 
 (defun Info-read-node-name-1 (string predicate code)
   "Internal function used by `Info-read-node-name'.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]