# HG changeset patch # User Miles Bader # Date 976519358 0 # Node ID 0d16962724cb769599bee06a62be75788e886879 # Parent ae9bbfff4f90ccba3e74b8c5e14613e87d316287 (displayed_window_lines): Handle non-newline-terminated final lines properly. (Fwindow_text_height): New function (used to be in lisp). (syms_of_window): Initialize it. diff -r ae9bbfff4f90 -r 0d16962724cb src/window.c --- a/src/window.c Mon Dec 11 05:02:17 2000 +0000 +++ b/src/window.c Mon Dec 11 07:22:38 2000 +0000 @@ -4473,8 +4473,13 @@ if (old_buffer) set_buffer_internal (old_buffer); + bottom_y = it.current_y + it.max_ascent + it.max_descent; + + if (bottom_y > it.current_y && bottom_y < it.last_visible_y) + /* Hit a line without a terminating newline. */ + it.vpos++; + /* Add in empty lines at the bottom of the window. */ - bottom_y = it.current_y + it.max_ascent + it.max_descent; if (bottom_y < height) { struct frame *f = XFRAME (w->frame); @@ -4487,6 +4492,21 @@ } +DEFUN ("window-text-height", Fwindow_text_height, Swindow_text_height, + 0, 1, 0, + "Return the height in lines of the text display area of WINDOW.\n\ +This doesn't include the mode-line (or header-line if any) or any\n\ +partial-height lines in the text display area.") + (window) + Lisp_Object window; +{ + struct window *w = decode_window (window); + int pixel_height = window_box_height (w); + int line_height = pixel_height / CANON_Y_UNIT (XFRAME (w->frame)); + return make_number (line_height); +} + + DEFUN ("move-to-window-line", Fmove_to_window_line, Smove_to_window_line, 1, 1, "P", @@ -5739,6 +5759,7 @@ defsubr (&Sother_window_for_scrolling); defsubr (&Sscroll_other_window); defsubr (&Srecenter); + defsubr (&Swindow_text_height); defsubr (&Smove_to_window_line); defsubr (&Swindow_configuration_p); defsubr (&Swindow_configuration_frame);