emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] fix-info-dups 6316172: Fix duplicates when completing Info


From: Oleh Krehel
Subject: [Emacs-diffs] fix-info-dups 6316172: Fix duplicates when completing Info files
Date: Mon, 20 Apr 2015 12:28:27 +0000

branch: fix-info-dups
commit 63161721fe696508d91425a9429c048c72f9f801
Author: Oleh Krehel <address@hidden>
Commit: Oleh Krehel <address@hidden>

    Fix duplicates when completing Info files
    
    * lisp/info.el (Info-read-node-name-2): Use the STRING argument a lot
      less, it's actually always "". Update the regex to remove the split
      files, the old one wasn't working properly. Delete duplicates and
      nreverse the list to make it alphabetical. Return names sans
      suffixes always.
    
    (Bug#20365)
---
 lisp/info.el |   45 +++++++++++++--------------------------------
 1 files changed, 13 insertions(+), 32 deletions(-)

diff --git a/lisp/info.el b/lisp/info.el
index 0159661..44c4aab 100644
--- a/lisp/info.el
+++ b/lisp/info.el
@@ -1766,41 +1766,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 (cl-delete-duplicates
+                                  (nreverse names) :test 'equal) 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]