Subject: Re: bug#14143: [gmane.emacs.devel] Patch to ido.el

From: Stefan Monnier <[email-masked]>
Date: Fri, 05 Apr 2013 10:04:25 -0400

Thanks for your bug-report, Steven [ by now, it seems you've been told
plenty of times how/where to send your patch, right?  ].

I installed your patch with a few changes.  The most important one is to
make sure that people who have customized their ido-decorations still
get the same behavior as before.  See the final patch below.

        Stefan

=== modified file 'etc/NEWS'
--- etc/NEWS	2013-03-30 13:49:00 +0000
+++ etc/NEWS	2013-04-05 13:54:30 +0000
@@ -87,6 +87,8 @@
 
 * Changes in Specialized Modes and Packages in Emacs 24.4
 
+** `ido-decorations' has been slightly extended to give a bit more control.
+
 ** More packages look for ~/.emacs.d/<foo> additionally to ~/.<foo>.
 Affected files:
 ~/.emacs.d/timelog	replaces  ~/.timelog

=== modified file 'lisp/ChangeLog'
--- lisp/ChangeLog	2013-04-05 10:18:43 +0000
+++ lisp/ChangeLog	2013-04-05 13:55:28 +0000
@@ -1,3 +1,9 @@
+2013-04-05  Stefan Monnier  <[email-masked]>
+
+	* ido.el (ido-completions): Use extra elements of ido-decorations
+	(bug#14143).
+	(ido-decorations): Update docstring.
+
 2013-04-05  Michael Albinus  <[email-masked]>
 
 	* autorevert.el (auto-revert-mode, auto-revert-tail-mode)

=== modified file 'lisp/ido.el'
--- lisp/ido.el	2013-03-20 03:05:34 +0000
+++ lisp/ido.el	2013-04-05 13:49:23 +0000
@@ -765,7 +765,7 @@
 
 (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 @@
 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)
 
@@ -4581,10 +4583,12 @@
                          (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)  ;; [ ... ]
+                     ;; 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))
-                             (nth 5 ido-decorations)))
+                      (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))