aboutsummaryrefslogtreecommitdiffstats
path: root/src/xdisp.c
diff options
context:
space:
mode:
authorGerd Moellmann <[email protected]>2001-12-12 13:42:55 +0000
committerGerd Moellmann <[email protected]>2001-12-12 13:42:55 +0000
commitf7ccfc8c711b842cb3d1e3c9780b5f9c039daedd (patch)
treeb00027e3d03b0982c97465dc80d84af171e3530d /src/xdisp.c
parent5f3648c49c5cd573a0c94bc54d35afe29be58849 (diff)
(move_it_vertically_backward): Change heuristic
for the case that we didn't move far enough initially.
Diffstat (limited to 'src/xdisp.c')
-rw-r--r--src/xdisp.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/xdisp.c b/src/xdisp.c
index 91558067d1..4fed4ac415 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -5373,7 +5373,7 @@ move_it_vertically_backward (it, dy)
int y0 = it3.current_y;
int y1 = line_bottom_y (&it3);
int line_height = y1 - y0;
-
+
/* If we did not reach target_y, try to move further backward if
we can. If we moved too far backward, try to move forward. */
if (target_y < it->current_y
@@ -5384,13 +5384,21 @@ move_it_vertically_backward (it, dy)
&& it->current_y - target_y > line_height / 3 * 2
&& IT_CHARPOS (*it) > BEGV)
{
+ TRACE_MOVE ((stderr, " not far enough -> move_vert %d\n",
+ target_y - it->current_y));
move_it_vertically (it, target_y - it->current_y);
xassert (IT_CHARPOS (*it) >= BEGV);
}
else if (target_y >= it->current_y + line_height
&& IT_CHARPOS (*it) < ZV)
{
- move_it_vertically (it, target_y - (it->current_y + line_height));
+ /* Should move forward by at least one line, maybe more. */
+ do
+ {
+ move_it_by_lines (it, 1, 1);
+ }
+ while (target_y >= line_bottom_y (it) && IT_CHARPOS (*it) < ZV);
+
xassert (IT_CHARPOS (*it) >= BEGV);
}
}