emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] master 5a6df06 2/2: Simplify ignored extensions filtering


From: João Távora
Subject: [Emacs-diffs] master 5a6df06 2/2: Simplify ignored extensions filtering in Icomplete (bug#34070)
Date: Thu, 17 Jan 2019 10:20:48 -0500 (EST)

branch: master
commit 5a6df06494f9ba6df53af82cfdf81f1d3708edc3
Author: João Távora <address@hidden>
Commit: João Távora <address@hidden>

    Simplify ignored extensions filtering in Icomplete (bug#34070)
    
    * lisp/icomplete.el: Use lexical binding.
    (icomplete-completions): Use minibuffer-completion-predicate
    to filter out completion-ignored-extensions.
---
 lisp/icomplete.el | 34 ++++++++++++++++++++++------------
 1 file changed, 22 insertions(+), 12 deletions(-)

diff --git a/lisp/icomplete.el b/lisp/icomplete.el
index 8bed46c..6d77c06 100644
--- a/lisp/icomplete.el
+++ b/lisp/icomplete.el
@@ -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.



reply via email to

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