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.
This commit is contained in:
João Távora 2019-01-15 12:10:23 +00:00
parent 7560ef7de9
commit 5a6df06494

View 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.