Commit 4a63ceb8 authored by Stefan Monnier's avatar Stefan Monnier
Browse files

(PC-do-completion): Strip out completion-ignored-extensions

before checking whether there are multiple completions.
Don't use `list' unnecessarily when building completion tables.
parent 65c986aa
2006-08-07 Stefan Monnier <monnier@iro.umontreal.ca>
* complete.el (PC-do-completion): Strip out completion-ignored-extensions
before checking whether there are multiple completions.
Don't use `list' unnecessarily when building completion tables.
2006-08-06 Richard Stallman <rms@gnu.org> 2006-08-06 Richard Stallman <rms@gnu.org>
   
* help.el (describe-mode): Make minor mode list more concise. * help.el (describe-mode): Make minor mode list more concise.
...@@ -672,8 +678,8 @@ ...@@ -672,8 +678,8 @@
   
2006-07-10 Chong Yidong <cyd@stupidchicken.com> 2006-07-10 Chong Yidong <cyd@stupidchicken.com>
   
* progmodes/cc-awk.el (defconst): Use eval-and-compile to avoid * progmodes/cc-awk.el (c-awk-escaped-nls*): Use eval-and-compile to
compilation error. avoid compilation error.
   
* subr.el (sit-for): New function. * subr.el (sit-for): New function.
   
......
...@@ -543,8 +543,8 @@ of `minibuffer-completion-table' and the minibuffer contents.") ...@@ -543,8 +543,8 @@ of `minibuffer-completion-table' and the minibuffer contents.")
(let ((compl (all-completions (if env-on (let ((compl (all-completions (if env-on
(file-name-nondirectory (substring str 0 p)) (file-name-nondirectory (substring str 0 p))
(substring str 0 p)) (substring str 0 p))
table table
pred))) pred)))
(setq p compl) (setq p compl)
(while p (while p
(and (string-match regex (car p)) (and (string-match regex (car p))
...@@ -553,6 +553,34 @@ of `minibuffer-completion-table' and the minibuffer contents.") ...@@ -553,6 +553,34 @@ of `minibuffer-completion-table' and the minibuffer contents.")
(setq poss (cons (car p) poss)))) (setq poss (cons (car p) poss))))
(setq p (cdr p))))) (setq p (cdr p)))))
;; Handle completion-ignored-extensions
(and filename
(not (eq mode 'help))
(let ((p2 poss))
;; Build a regular expression representing the extensions list
(or (equal completion-ignored-extensions PC-ignored-extensions)
(setq PC-ignored-regexp
(concat "\\("
(mapconcat
'regexp-quote
(setq PC-ignored-extensions
completion-ignored-extensions)
"\\|")
"\\)\\'")))
;; Check if there are any without an ignored extension.
;; Also ignore `.' and `..'.
(setq p nil)
(while p2
(or (string-match PC-ignored-regexp (car p2))
(string-match "\\(\\`\\|/\\)[.][.]?/?\\'" (car p2))
(setq p (cons (car p2) p)))
(setq p2 (cdr p2)))
;; If there are "good" names, use them
(and p (setq poss p))))
;; Now we have a list of possible completions ;; Now we have a list of possible completions
(cond (cond
...@@ -575,34 +603,6 @@ of `minibuffer-completion-table' and the minibuffer contents.") ...@@ -575,34 +603,6 @@ of `minibuffer-completion-table' and the minibuffer contents.")
((or (cdr (setq helpposs poss)) ((or (cdr (setq helpposs poss))
(memq mode '(help word))) (memq mode '(help word)))
;; Handle completion-ignored-extensions
(and filename
(not (eq mode 'help))
(let ((p2 poss))
;; Build a regular expression representing the extensions list
(or (equal completion-ignored-extensions PC-ignored-extensions)
(setq PC-ignored-regexp
(concat "\\("
(mapconcat
'regexp-quote
(setq PC-ignored-extensions
completion-ignored-extensions)
"\\|")
"\\)\\'")))
;; Check if there are any without an ignored extension.
;; Also ignore `.' and `..'.
(setq p nil)
(while p2
(or (string-match PC-ignored-regexp (car p2))
(string-match "\\(\\`\\|/\\)[.][.]?/?\\'" (car p2))
(setq p (cons (car p2) p)))
(setq p2 (cdr p2)))
;; If there are "good" names, use them
(and p (setq poss p))))
;; Is the actual string one of the possible completions? ;; Is the actual string one of the possible completions?
(setq p (and (not (eq mode 'help)) poss)) (setq p (and (not (eq mode 'help)) poss))
(while (and p (while (and p
...@@ -623,7 +623,8 @@ of `minibuffer-completion-table' and the minibuffer contents.") ...@@ -623,7 +623,8 @@ of `minibuffer-completion-table' and the minibuffer contents.")
;; Check if next few letters are the same in all cases ;; Check if next few letters are the same in all cases
(if (and (not (eq mode 'help)) (if (and (not (eq mode 'help))
(setq prefix (try-completion (PC-chunk-after basestr skip) (mapcar 'list poss)))) (setq prefix (try-completion (PC-chunk-after basestr skip)
poss)))
(let ((first t) i) (let ((first t) i)
;; Retain capitalization of user input even if ;; Retain capitalization of user input even if
;; completion-ignore-case is set. ;; completion-ignore-case is set.
...@@ -669,13 +670,9 @@ of `minibuffer-completion-table' and the minibuffer contents.") ...@@ -669,13 +670,9 @@ of `minibuffer-completion-table' and the minibuffer contents.")
(+ beg (length dirname)) end) (+ beg (length dirname)) end)
skip) skip)
(mapcar (mapcar
(function (lambda (x)
(lambda (x) (when (string-match skip x)
(list (substring x (match-end 0))))
(and (string-match skip x)
(substring
x
(match-end 0))))))
poss))) poss)))
(or (> i 0) (> (length prefix) 0)) (or (> i 0) (> (length prefix) 0))
(or (not (eq mode 'word)) (or (not (eq mode 'word))
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment