Commit c40e2fb2 authored by Eli Zaretskii's avatar Eli Zaretskii

Fix cursor motion near overlays covering reordered text.

 src/xdisp.c (set_cursor_from_row): Set start and stop points of the
 loop that looks for the glyph on which to display cursor according
 to the row's direction.
parent 5e9c7958
2011-05-28 Eli Zaretskii <eliz@gnu.org>
* xdisp.c (set_cursor_from_row): Set start and stop points of the
loop that looks for the glyph on which to display cursor according
to the row's direction.
2011-05-21 Eli Zaretskii <eliz@gnu.org>
* xdisp.c (handle_display_spec): New function, refactored from the
......
......@@ -12818,11 +12818,30 @@ set_cursor_from_row (struct window *w, struct glyph_row *row,
GLYPH_BEFORE and GLYPH_AFTER, and it came from a string
positioned between POS_BEFORE and POS_AFTER in the
buffer. */
struct glyph *stop = glyph_after;
struct glyph *start, *stop;
EMACS_INT pos = pos_before;
x = -1;
for (glyph = glyph_before + incr;
/* GLYPH_BEFORE and GLYPH_AFTER are the glyphs that
correspond to POS_BEFORE and POS_AFTER, respectively. We
need START and STOP in the order that corresponds to the
row's direction as given by its reversed_p flag. If the
directionality of characters between POS_BEFORE and
POS_AFTER is the opposite of the row's base direction,
these characters will have been reordered for display,
and we need to reverse START and STOP. */
if (!row->reversed_p)
{
start = min (glyph_before, glyph_after);
stop = max (glyph_before, glyph_after);
}
else
{
start = max (glyph_before, glyph_after);
stop = min (glyph_before, glyph_after);
}
for (glyph = start + incr;
row->reversed_p ? glyph > stop : glyph < stop; )
{
......
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