]> git.eshelyaron.com Git - emacs.git/commitdiff
(move_it_vertically_backward): Change heuristic
authorGerd Moellmann <gerd@gnu.org>
Wed, 12 Dec 2001 13:46:00 +0000 (13:46 +0000)
committerGerd Moellmann <gerd@gnu.org>
Wed, 12 Dec 2001 13:46:00 +0000 (13:46 +0000)
for the case that we didn't move far enough initially.

src/xdisp.c

index bf984778d4ace87d303d20705fd56941a024240b..252706d631054f1e0216f95347421636e061db66 100644 (file)
@@ -5377,7 +5377,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
@@ -5388,13 +5388,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);
        }
     }