# HG changeset patch # User Richard M. Stallman # Date 1124515568 0 # Node ID f172c35729ddae8c41e1fde53d2bc568d19c4116 # Parent bda8af17aa824e73c55ead500d3c41ed3d5825ee (display_echo_area_1): Get display start pos from w->start. (resize_mini_window): Set w->start, and PT, so as to display the tail end of the buffer, if it doesn't all fit. diff -r bda8af17aa82 -r f172c35729dd src/xdisp.c --- a/src/xdisp.c Fri Aug 19 15:03:48 2005 +0000 +++ b/src/xdisp.c Sat Aug 20 05:26:08 2005 +0000 @@ -7631,13 +7631,16 @@ int window_height_changed_p = 0; /* Do this before displaying, so that we have a large enough glyph - matrix for the display. */ + matrix for the display. If we can't get enough space for the + whole text, display the last N lines. That works by setting w->start. */ window_height_changed_p = resize_mini_window (w, 0); + /* Use the starting position chosen by resize_mini_window. */ + SET_TEXT_POS_FROM_MARKER (start, w->start); + /* Display. */ clear_glyph_matrix (w->desired_matrix); XSETWINDOW (window, w); - SET_TEXT_POS (start, BEG, BEG_BYTE); try_window (window, start, 0); return window_height_changed_p; @@ -7693,8 +7696,14 @@ /* Resize mini-window W to fit the size of its contents. EXACT:P means size the window exactly to the size needed. Otherwise, it's - only enlarged until W's buffer is empty. Value is non-zero if - the window height has been changed. */ + only enlarged until W's buffer is empty. + + Set W->start to the right place to begin display. If the whole + contents fit, start at the beginning. Otherwise, start so as + to make the end of the contents appear. This is particularly + important for y-or-n-p, but seems desirable generally. + + Value is non-zero if the window height has been changed. */ int resize_mini_window (w, exact_p) @@ -7706,6 +7715,11 @@ xassert (MINI_WINDOW_P (w)); + /* By default, start display at the beginning. */ + set_marker_both (w->start, w->buffer, + BUF_BEGV (XBUFFER (w->buffer)), + BUF_BEGV_BYTE (XBUFFER (w->buffer))); + /* Don't resize windows while redisplaying a window; it would confuse redisplay functions when the size of the window they are displaying changes from under them. Such a resizing can happen, @@ -7769,9 +7783,10 @@ if (height > max_height) { height = max_height; - init_iterator (&it, w, PT, PT_BYTE, NULL, DEFAULT_FACE_ID); + init_iterator (&it, w, ZV, ZV_BYTE, NULL, DEFAULT_FACE_ID); move_it_vertically_backward (&it, (height - 1) * unit); start = it.current.pos; + SET_PT_BOTH (CHARPOS (start), BYTEPOS (start)); } else SET_TEXT_POS (start, BEGV, BEGV_BYTE);