mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-01-30 20:32:00 -08:00
Fix vertical motion in some rare bidi situations
* src/xdisp.c (move_it_by_lines): Handle the case where we didn't move vertically at all.
This commit is contained in:
parent
3faa508eba
commit
ff43fd07b7
1 changed files with 5 additions and 4 deletions
|
|
@ -10966,7 +10966,7 @@ move_it_by_lines (struct it *it, ptrdiff_t dvpos)
|
|||
{
|
||||
struct it it2;
|
||||
void *it2data = NULL;
|
||||
ptrdiff_t start_charpos, i;
|
||||
ptrdiff_t start_charpos, orig_charpos, i;
|
||||
int nchars_per_row
|
||||
= (it->last_visible_x - it->first_visible_x) / FRAME_COLUMN_WIDTH (it->f);
|
||||
bool hit_pos_limit = false;
|
||||
|
|
@ -10976,7 +10976,7 @@ move_it_by_lines (struct it *it, ptrdiff_t dvpos)
|
|||
position. This may actually move vertically backwards,
|
||||
in case of overlays, so adjust dvpos accordingly. */
|
||||
dvpos += it->vpos;
|
||||
start_charpos = IT_CHARPOS (*it);
|
||||
orig_charpos = IT_CHARPOS (*it);
|
||||
move_it_vertically_backward (it, 0);
|
||||
dvpos -= it->vpos;
|
||||
|
||||
|
|
@ -11029,8 +11029,9 @@ move_it_by_lines (struct it *it, ptrdiff_t dvpos)
|
|||
RESTORE_IT (&it2, &it2, it2data);
|
||||
SAVE_IT (it2, *it, it2data);
|
||||
move_it_to (it, -1, -1, -1, it->vpos + delta, MOVE_TO_VPOS);
|
||||
/* Move back again if we got too far ahead. */
|
||||
if (it->vpos - it2.vpos > delta)
|
||||
/* Move back again if we got too far ahead,
|
||||
or didn't move at all. */
|
||||
if (it->vpos - it2.vpos > delta || IT_CHARPOS (*it) == orig_charpos)
|
||||
RESTORE_IT (it, &it2, it2data);
|
||||
else
|
||||
bidi_unshelve_cache (it2data, true);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue