Subject: Re: bug#36858: 27.0.50; display bugs with display-fill-column-indicator-mode

From: Ergus <[email-masked]>
Date: Thu, 8 Aug 2019 09:17:58 +0200

On Wed, Aug 07, 2019 at 09:46:21PM +0200, Ergus wrote:
>On Wed, Aug 07, 2019 at 08:29:13PM +0300, Eli Zaretskii wrote:
>>>This issue is already fixed with the other condition I mentioned:
>>>
>>>IT_CHARPOS (*it) < ZV
>>>
>>>But ends_at_zv_p this also need to be fixed because there are some tests
>>>inside extend_face_to_end_of_line that compare with ends_at_zv_p. In the
>>>worst case we need to remove these comparisons.
>>
>>Not sure I understand why the comparisons need to be removed.  Can you
>>elaborate?
>>
>
>>>But ideally the flag must be set before right?
>>
>>In a buffer showing only buffer text (no after-strings at EOB), all
>>the glyph rows starting from the one showing EOB have their
>>ends_at_zv_p flag set.
>
>Hi:
>
>In my tests inside extend_face_to_end_of_line the flag ends_at_zv_p is
>always false. And for the last line (where it is supposed to be true)
>the function extend_face_to_end_of_line is not called at all. So
>actually all the code like:
>
>	      if (it->glyph_row->ends_at_zv_p)
>		it->face_id = default_face->id;
>	      else
>		it->face_id = face->id;
>
>does nothing now.
>
>We should fix this in order to create an indicator also for the last
>line.
>
>I think that the problem is in the condition:
>
>if (!get_next_display_element (it)) inside display_line that filters the
>call to  extend_face_to_end_of_line with:
>
>if (row->reversed_p
>   || lookup_basic_face (it->w, it->f, DEFAULT_FACE_ID) !=
>   DEFAULT_FACE_ID)
>     extend_face_to_end_of_line (it);
>
>And needs to be extended probably with with:
>
>|| (!row_text_area_empty (row))

Hi Eli:

Sorry for bothering so much.

After tying this solution I proposed yesterday to add the indicator also
for the latest line (call extend_face_to_end_of_line for a no empty line
without \n too) I get it working perfectly fine only in the tui
interface.

In gui it just doesn't work. But it seems that the issue is not due to
the condition:

if (!get_next_display_element (it));

because when I add a test glyph unconditionally there; it is not printed
in the screen, but when I add a message to stdout it is.

For sure I am missing something here, but what?

Is it possible that some optimization in the gui glue code stops
printing glyphs OR that some later code hides the extra glyphs?