Respect ido-ignore-item-p in ido-wide-find-dirs-or-files (tiny change)
[bpt/emacs.git] / lisp / ido.el
index 589f441..1b7d4e7 100644 (file)
@@ -765,7 +765,7 @@ Obsolete.  Set 3rd element of `ido-decorations' instead."
 
 (defcustom ido-decorations '( "{" "}" " | " " | ..." "[" "]" " [No match]" " [Matched]" " [Not readable]" " [Too big]" " [Confirm]")
   "List of strings used by ido to display the alternatives in the minibuffer.
-There are 11 elements in this list:
+There are between 11 and 13 elements in this list:
 1st and 2nd elements are used as brackets around the prospect list,
 3rd element is the separator between prospects (ignored if `ido-separator' is set),
 4th element is the string inserted at the end of a truncated list of prospects,
@@ -775,7 +775,9 @@ can be completed using TAB,
 8th element is displayed if there is a single match (and faces are not used),
 9th element is displayed when the current directory is non-readable,
 10th element is displayed when directory exceeds `ido-max-directory-size',
-11th element is displayed to confirm creating new file or buffer."
+11th element is displayed to confirm creating new file or buffer.
+12th and 13th elements (if present) are used as brackets around the sole
+remaining completion.  If absent, elements 5 and 6 are used instead."
   :type '(repeat string)
   :group 'ido)
 
@@ -3271,17 +3273,25 @@ for first matching file."
              cur nil)))
     res))
 
+(require 'cl-lib)
+
+(defun ido-delete-ignored-files (files)
+  (cl-delete-if
+   (lambda (name) (ido-ignore-item-p name ido-ignore-files t))
+   files))
+
 (defun ido-wide-find-dirs-or-files (dir file &optional prefix finddir)
   ;; As ido-run-find-command, but returns a list of cons pairs ("file" . "dir")
   (let ((filenames
-        (split-string
-         (shell-command-to-string
-          (concat "find "
-                  (shell-quote-argument dir)
-                  " -name "
-                  (shell-quote-argument
-                   (concat (if prefix "" "*") file "*"))
-                  " -type " (if finddir "d" "f") " -print"))))
+         (ido-delete-ignored-files
+          (split-string
+           (shell-command-to-string
+            (concat "find "
+                    (shell-quote-argument dir)
+                    " -name "
+                    (shell-quote-argument
+                     (concat (if prefix "" "*") file "*"))
+                    " -type " (if finddir "d" "f") " -print")))))
        filename d f
        res)
     (while filenames
@@ -3576,12 +3586,10 @@ This is to make them appear as if they were \"virtual buffers\"."
   ;; If MERGED is non-nil, each file is cons'ed with DIR
   (and (or (ido-is-tramp-root dir) (ido-is-unc-root dir)
           (file-directory-p dir))
-       (delq nil
-            (mapcar
-             (lambda (name)
-               (if (not (ido-ignore-item-p name ido-ignore-files t))
-                   (if merged (cons name dir) name)))
-             (ido-file-name-all-completions dir)))))
+       (mapcar
+       (lambda (name) (if merged (cons name dir) name))
+       (ido-delete-ignored-files
+        (ido-file-name-all-completions dir)))))
 
 (defun ido-make-file-list (default)
   ;; Return the current list of files.
@@ -3783,7 +3791,7 @@ This is to make them appear as if they were \"virtual buffers\"."
           (if (string-match re name)
               (setq matches (cons item matches)))))
        items))
-    matches))
+    (delete-consecutive-dups matches t)))
 
 
 (defun ido-set-matches ()
@@ -4579,10 +4587,12 @@ For details of keybindings, see `ido-find-file'."
                          (string-equal (match-string 0 (ido-name (car comps)))
                                        (ido-name (car comps))))
                        ""
-                     ;; when there is one match, show the matching file name in full
-                     (concat (nth 4 ido-decorations)  ;; [ ... ]
-                             (ido-name (car comps))
-                             (nth 5 ido-decorations)))
+                     ;; When there is only one match, show the matching file
+                     ;; name in full, wrapped in [ ... ].
+                     (concat
+                      (or (nth 11 ido-decorations) (nth 4 ido-decorations))
+                      (ido-name (car comps))
+                      (or (nth 12 ido-decorations) (nth 5 ido-decorations))))
                   (if (not ido-use-faces) (nth 7 ido-decorations))))  ;; [Matched]
          (t                            ;multiple matches
           (let* ((items (if (> ido-max-prospects 0) (1+ ido-max-prospects) 999))