aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorGerd Moellmann2001-10-25 10:07:01 +0000
committerGerd Moellmann2001-10-25 10:07:01 +0000
commit79ddf6f72cdb74195409a50c24038e04d9c0d7f9 (patch)
tree14720932cc4387653167d29f530443ff4f861322 /src
parent5b6a51aaea1a7230f1331d1e1522952031644555 (diff)
downloademacs-79ddf6f72cdb74195409a50c24038e04d9c0d7f9.tar.gz
emacs-79ddf6f72cdb74195409a50c24038e04d9c0d7f9.zip
(move_it_vertically_backward): Compute line height
differently. Add heuristic to try to be more compatible to 20.x.
Diffstat (limited to 'src')
-rw-r--r--src/xdisp.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/xdisp.c b/src/xdisp.c
index f75e8071db3..a83dd6bd20c 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -5311,8 +5311,8 @@ move_it_vertically_backward (it, dy)
5311 struct it *it; 5311 struct it *it;
5312 int dy; 5312 int dy;
5313{ 5313{
5314 int nlines, h, line_height; 5314 int nlines, h;
5315 struct it it2; 5315 struct it it2, it3;
5316 int start_pos = IT_CHARPOS (*it); 5316 int start_pos = IT_CHARPOS (*it);
5317 5317
5318 xassert (dy >= 0); 5318 xassert (dy >= 0);
@@ -5342,7 +5342,7 @@ move_it_vertically_backward (it, dy)
5342 move_it_to (&it2, start_pos, -1, -1, it2.vpos + 1, 5342 move_it_to (&it2, start_pos, -1, -1, it2.vpos + 1,
5343 MOVE_TO_POS | MOVE_TO_VPOS); 5343 MOVE_TO_POS | MOVE_TO_VPOS);
5344 xassert (IT_CHARPOS (*it) >= BEGV); 5344 xassert (IT_CHARPOS (*it) >= BEGV);
5345 line_height = it2.max_ascent + it2.max_descent; 5345 it3 = it2;
5346 5346
5347 move_it_to (&it2, start_pos, -1, -1, -1, MOVE_TO_POS); 5347 move_it_to (&it2, start_pos, -1, -1, -1, MOVE_TO_POS);
5348 xassert (IT_CHARPOS (*it) >= BEGV); 5348 xassert (IT_CHARPOS (*it) >= BEGV);
@@ -5366,10 +5366,18 @@ move_it_vertically_backward (it, dy)
5366 /* The y-position we try to reach. Note that h has been 5366 /* The y-position we try to reach. Note that h has been
5367 subtracted in front of the if-statement. */ 5367 subtracted in front of the if-statement. */
5368 int target_y = it->current_y + h - dy; 5368 int target_y = it->current_y + h - dy;
5369 5369 int y0 = it3.current_y;
5370 int y1 = line_bottom_y (&it3);
5371 int line_height = y1 - y0;
5372
5370 /* If we did not reach target_y, try to move further backward if 5373 /* If we did not reach target_y, try to move further backward if
5371 we can. If we moved too far backward, try to move forward. */ 5374 we can. If we moved too far backward, try to move forward. */
5372 if (target_y < it->current_y 5375 if (target_y < it->current_y
5376 /* This is heuristic. In a window that's 3 lines high, with
5377 a line height of 13 pixels each, recentering with point
5378 on the bottom line will try to move -39/2 = 19 pixels
5379 backward. Try to avoid moving into the first line. */
5380 && it->current_y - target_y > line_height / 2
5373 && IT_CHARPOS (*it) > BEGV) 5381 && IT_CHARPOS (*it) > BEGV)
5374 { 5382 {
5375 move_it_vertically (it, target_y - it->current_y); 5383 move_it_vertically (it, target_y - it->current_y);