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

From: Steven Degutis <[email-masked]>
Date: Fri, 5 Apr 2013 10:40:11 -0500

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 <[email-masked]>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/<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))
>
>