Commit 93e8e44e authored by Eli Zaretskii's avatar Eli Zaretskii
Browse files

Avoid inflooping in redisplay caused by hscrolled R2L lines.

 src/xdisp.c (display_line): Don't assume that the call to
 reseat_at_next_visible_line_start ends up at a character
 immediately following the newline on the previous line.  Avoids
 setting the ends_at_zv_p flag on screen lines that are not at or
 beyond ZV, which causes infloop in redisplay.  For the details, see
 http://lists.gnu.org/archive/html/emacs-devel/2014-08/msg00368.html.
parent f7abe0af
2014-08-17 Eli Zaretskii <eliz@gnu.org>
* xdisp.c (display_line): Don't assume that the call to
reseat_at_next_visible_line_start ends up at a character
immediately following the newline on the previous line. Avoids
setting the ends_at_zv_p flag on screen lines that are not at or
beyond ZV, which causes infloop in redisplay. For the details, see
http://lists.gnu.org/archive/html/emacs-devel/2014-08/msg00368.html.
* dispnew.c (buffer_posn_from_coords): Fix mirroring of X
coordinate for hscrolled R2L screen lines. (Bug#18277)
......
......@@ -20583,10 +20583,15 @@ display_line (struct it *it)
row->truncated_on_right_p = 1;
it->continuation_lines_width = 0;
reseat_at_next_visible_line_start (it, 0);
if (IT_BYTEPOS (*it) <= BEG_BYTE)
row->ends_at_zv_p = true;
/* We insist below that IT's position be at ZV because in
bidi-reordered lines the character at visible line start
might not be the character that follows the newline in
the logical order. */
if (IT_BYTEPOS (*it) > BEG_BYTE)
row->ends_at_zv_p =
IT_BYTEPOS (*it) >= ZV_BYTE && FETCH_BYTE (ZV_BYTE - 1) != '\n';
else
row->ends_at_zv_p = FETCH_BYTE (IT_BYTEPOS (*it) - 1) != '\n';
row->ends_at_zv_p = false;
break;
}
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment