Subject: Re: bug#46177: 27.1; Display problem with minibuffer overlay when using display property

From: Clemens <[email-masked]>
Date: Sat, 30 Jan 2021 12:09:57 +0100

> Use a face which explicitly overrides every attribute of minibuffer
> prompt face, I guess?

As far as I understand I would have to loop through the overlay string, 
too and apply those face adjustments to every of those display property 
strings. I think then I can also just inline them like in my shown 
example which avoid this issue in the first place.

> 
>> (set-face-attribute 'minibuffer-prompt nil :foreground "purple")
>> (minibuffer-with-setup-hook
>>       (lambda ()
>>         (overlay-put
>>          (make-overlay (point-max) (point-max) nil t t)
>>          'after-string
>>          (concat " from"
>> 	           (propertize " world"
>> 			       'display
>> 			       " minibuffer"))))
>>     (read-string "Hello"))
>>
>>
>> Even with the " from" string between the string defined in the display
>> property gets the prompt face applied.
> 
> Because " minibuffer" is a display string, and its buffer position is
> still EOB.  That it has the " from " string in the overlay property
> before it doesn't change the buffer position whose face affects the
> display string.

Because the " minibuffer" string follows the non affected " from" string
this is unexpected from a caller/UI viewpoint IMO. I don't understand 
the underlying reasoning for this but if you don't think there is 
something to fix here, I will accept that and continue using my workaround.