+ /* Don't let the cursor end in the scroll margins. */
+ if (check_margins
+ && !MINI_WINDOW_P (w))
+ {
+ int this_scroll_margin, cursor_height;
+
+ this_scroll_margin = max (0, scroll_margin);
+ this_scroll_margin = min (this_scroll_margin, WINDOW_TOTAL_LINES (w) / 4);
+ this_scroll_margin *= FRAME_LINE_HEIGHT (it.f);
+ cursor_height = MATRIX_ROW (w->desired_matrix, w->cursor.vpos)->height;
+
+ if ((w->cursor.y < this_scroll_margin
+ && CHARPOS (pos) > BEGV)
+ /* rms: considering make_cursor_line_fully_visible_p here
+ seems to give wrong results. We don't want to recenter
+ when the last line is partly visible, we want to allow
+ that case to be handled in the usual way. */
+ || (w->cursor.y + 1) > it.last_visible_y)
+ {
+ w->cursor.vpos = -1;
+ clear_glyph_matrix (w->desired_matrix);
+ return -1;
+ }
+ }
+