]> git.eshelyaron.com Git - emacs.git/commitdiff
Simplify ignored extensions filtering in Icomplete (bug#34070)
authorJoão Távora <joaotavora@gmail.com>
Tue, 15 Jan 2019 12:10:23 +0000 (12:10 +0000)
committerJoão Távora <joaotavora@gmail.com>
Thu, 17 Jan 2019 15:17:02 +0000 (15:17 +0000)
* lisp/icomplete.el: Use lexical binding.
(icomplete-completions): Use minibuffer-completion-predicate
to filter out completion-ignored-extensions.

lisp/icomplete.el

index 8bed46cb3b3fce4271c58b45d0cec635baec866b..6d77c0649ae22e3e24170c8ff1d9fe3283f912a4 100644 (file)
@@ -1,4 +1,4 @@
-;;; icomplete.el --- minibuffer completion incremental feedback
+;;; icomplete.el --- minibuffer completion incremental feedback -*- lexical-binding: t -*-
 
 ;; Copyright (C) 1992-1994, 1997, 1999, 2001-2019 Free Software
 ;; Foundation, Inc.
@@ -368,8 +368,21 @@ If there are multiple possibilities, `icomplete-separator' separates them.
 The displays for unambiguous matches have ` [Matched]' appended
 \(whether complete or not), or ` [No matches]', if no eligible
 matches exist."
-  (let* ((minibuffer-completion-table candidates)
-        (minibuffer-completion-predicate predicate)
+  (let* ((ignored-extension-re
+          (and minibuffer-completing-file-name
+               icomplete-with-completion-tables
+               completion-ignored-extensions
+               (concat "\\(?:\\`\\.\\./\\|"
+                       (regexp-opt completion-ignored-extensions)
+                       "\\)\\'")))
+         (minibuffer-completion-table candidates)
+        (minibuffer-completion-predicate
+          (if ignored-extension-re
+              (lambda (cand)
+                (and (not (string-match ignored-extension-re cand))
+                     (or (null predicate)
+                         (funcall predicate cand))))
+            predicate))
         (md (completion--field-metadata (icomplete--field-beg)))
         (comps (completion-all-sorted-completions
                  (icomplete--field-beg) (icomplete--field-end)))
@@ -380,11 +393,8 @@ matches exist."
     ;; `concat'/`mapconcat' is the slow part.
     (if (not (consp comps))
        (progn ;;(debug (format "Candidates=%S field=%S" candidates name))
-              (format " %sNo matches%s" open-bracket close-bracket))
+         (format " %sNo matches%s" open-bracket close-bracket))
       (if last (setcdr last nil))
-      (when (and minibuffer-completing-file-name
-                 icomplete-with-completion-tables)
-        (setq comps (completion-pcm--filename-try-filter comps)))
       (let* ((most-try
               (if (and base-size (> base-size 0))
                   (completion-try-completion
@@ -470,11 +480,11 @@ matches exist."
                  (if prefix-len (substring (car comps) prefix-len) (car comps))
                  comps (cdr comps))
            (setq prospects-len
-                           (+ (string-width comp)
-                             (string-width icomplete-separator)
-                             prospects-len))
-                    (if (< prospects-len prospects-max)
-                        (push comp prospects)
+                  (+ (string-width comp)
+                    (string-width icomplete-separator)
+                    prospects-len))
+           (if (< prospects-len prospects-max)
+               (push comp prospects)
              (setq limit t))))
        (setq prospects (nreverse prospects))
        ;; Decorate first of the prospects.