Subject: Re: bug#28936: move_it_in_display_line_to returns MOVE_POS_MATCH_OR_ZV before ZV

From: Keith David Bershatsky <[email-masked]>
Date: Sun, 22 Oct 2017 22:20:32 -0700

I was able to verify this evening that it.current_x is indeed 0 immediately following a call to `move_it_by_lines (&it, 0)` when the issue is present.

It may be that move_it_in_display_line_to is reaching the correct X, but is merely throwing the wrong label/result in this situation -- i.e., it is not really reaching a POS or ZV.  Since my loop was relying on the label/result, the loop exited too early.  To test the correct X and wrong label/result theory, would take some time for me to work on because I would like to find the precise location inside move_it_in_display_line_to where the label/result is being returned.  I will continue to think about this and tinker ...

Keith

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

DATE:  [10-22-2017 12:53:47] <22 Oct 2017 22:53:47 +0300>
FROM:  Eli Zaretskii <[email-masked]>
> 
> > Date:  Sun, 22 Oct 2017 11:05:45 -0700
> > From:  Keith David Bershatsky <[email-masked]>
> > Cc:  [email-masked]
> > 
> >   SET_TEXT_POS_FROM_MARKER (start_text_position, w->start);
> >   start_display (&it, w, start_text_position);
> >   move_it_to (&it, PT, it.last_visible_x, it.last_visible_y - 1, -1, MOVE_TO_POS | MOVE_TO_X | MOVE_TO_Y);
> >   target_x = it.current_x;
> >   move_it_by_lines (&it, 0);
> 
> Did you verify that it.current_x is zero after this line?  If not, you
> will not get to the right X coordnate here:
> 
> >   rc = move_it_in_display_line_to_x (w, &it, target_x);