diff options
author | Gerd Moellmann <[email protected]> | 2001-12-12 13:42:55 +0000 |
---|---|---|
committer | Gerd Moellmann <[email protected]> | 2001-12-12 13:42:55 +0000 |
commit | f7ccfc8c711b842cb3d1e3c9780b5f9c039daedd (patch) | |
tree | b00027e3d03b0982c97465dc80d84af171e3530d /src/xdisp.c | |
parent | 5f3648c49c5cd573a0c94bc54d35afe29be58849 (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.c | 12 |
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); } } |