Subject: Re: bug#8897: `completion--insert-strings' clobbers user-added text properties

From: Štěpán Němec <[email-masked]>
Date: Mon, 20 Jun 2011 10:07:41 +0200

Stefan Monnier <[email-masked]> writes:

>> In my particular case I define annotations as buttons (which display
>> even more detail about a completion value upon activation), so a visual
>> indication of clickability is very important for me.
>
> Currently, the completion-list-mode uses the `mouse-face' text-property
> to determine what is a completion item and what i something else (blank
> space, annotation, you name it).  So as it stands, any mouse-face you'd
> add to an annotation would confuse completion-list-mode into thinking it
> is a completion item.
>
> Maybe you could try to use the `category' text-property instead.

Well I do use the `category' property, but the button functions seem to
set up the button face automatically, which is then clobbered by
`completion--insert-strings' (which is the problem). Here's how I set up
an annotation, `n' being the number of a pull request as a string (i.e.,
the completion value itself):

#+begin_src elisp
(let ((req (assoc-default n minibuffer-completion-table)))
  (concat " "
          (propertize (plist-get req :title)
                      'fontified t
                      'button '(t)
                      'category 'default-button
                      'help-echo "RET or mouse-2 for details"
                      'pr-data req
                      'action (lambda (b) (magithub-pull-request-details
                                           (button-get b 'pr-data))))))
#+end_src

With my patch I haven't noticed any problems you mention -- clicking
or RET on the completion itself selects it, clicking or RET on the
annotation displays further details, the button face is preserved.

  Štěpán