Subject: Re: bug#38563: 27.0.50; Company popup renders with newlines (?) inheriting the bg properties of the character at next line's bol

From: Dmitry Gutov <[email-masked]>
Date: Sat, 14 Dec 2019 01:10:13 +0200

On 13.12.2019 17:32, Eli Zaretskii wrote:

>>> It wouldn't have worked, because ':extend nil' means the face which
>>> says this is ineligible for face merging when face extension is
>>> considered.  IOW, ':extend nil' cannot countermand some other face
>>> that's being merged which says ':extend t'.
>>
>> Hmm, that's counter to my intuition how this should work (meaning,
>> :extend nil should be used during merging, like it's used during
>> inheritance), but maybe this way enables functionality that wouldn't be
>> possible otherwise.
> 
> ':extend nil' is "used" during merging in the sense that such a face
> is skipped when we want a face for extending past EOL.  How else could
> we implement that?  Setting :extend to nil means that _none_ of the
> other attributes of the face are to be taken into account for merging.

We are talking about "merging" a list of faces applied to a 'face' text 
property on a char, right? That kind of merging?

If so, I would expect seeing ':extend nil' would mean not using any of 
the face attributes on that char for extending past EOL. If it's the 
last character on the line, using the default face's attributes instead.

And if we see ':extend t', then we would use the background from the 
first face in the list that has the :background attribute set. Is that 
not how merging faces in a list value usually works?

> Inheritance just makes the inheriting face implicitly behave as if its
> :extend attribute is the same as of the parent face, when the
> inheriting face doesn't itself specify :extend, i.e. has it set to
> 'unspecified'.

I think that's how inheritance for most attributes works, right?