Your patch is mostly perfect, except there's one more thing needed, namely that the inner-if on line 4563 has to be wrapped with an (and (not (ido-show-when-exact-single-match)) ...) and the defcustom created above it defaulting to nil. I didn't apply this to your patch because to be honest, I have no idea how to apply your patch to my copy of ido.el. So I submitted a bug report just now via M-x report-emacs-bug, and included as much information as I can. -Steven On Fri, Apr 5, 2013 at 9:04 AM, Stefan Monnier wrote: > 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/ additionally to ~/.. > 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 > + > + * ido.el (ido-completions): Use extra elements of ido-decorations > + (bug#14143). > + (ido-decorations): Update docstring. > + > 2013-04-05 Michael Albinus > > * 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)) > >