diff options
| author | Gerd Moellmann | 1999-08-23 00:11:55 +0000 |
|---|---|---|
| committer | Gerd Moellmann | 1999-08-23 00:11:55 +0000 |
| commit | 9142dd5badb4e883761084eb3ad23ea578df5816 (patch) | |
| tree | bc10a1658c203002592091d164088afd97dd3eb5 /src | |
| parent | 5e8355b2e33b99038a1766c5916556ebcf120000 (diff) | |
| download | emacs-9142dd5badb4e883761084eb3ad23ea578df5816.tar.gz emacs-9142dd5badb4e883761084eb3ad23ea578df5816.zip | |
(redisplay_internal): Clear garbaged frames after
resizing mini-window.
(unwind_with_echo_area_buffer): Use
set_buffer_internal_1 instead of set_buffer_internal.
(with_echo_area_buffer): Ditto.
(Vresize_mini_config): New.
(resize_mini_window): Use it to save restore original window
configuration
(syms_of_xdisp): Initialize it.
(reconsider_clip_changes): New.
(redisplay_internal, redisplay_window): Call it.
(mark_window_display_accurate, redisplay_internal): Set current
matrix' buffer, begv, zv.
Diffstat (limited to 'src')
| -rw-r--r-- | src/xdisp.c | 157 |
1 files changed, 93 insertions, 64 deletions
diff --git a/src/xdisp.c b/src/xdisp.c index a2e8a4b1b67..45cbe13f977 100644 --- a/src/xdisp.c +++ b/src/xdisp.c | |||
| @@ -427,28 +427,6 @@ int message_enable_multibyte; | |||
| 427 | 427 | ||
| 428 | int update_mode_lines; | 428 | int update_mode_lines; |
| 429 | 429 | ||
| 430 | /* Smallest number of characters before the gap at any time since last | ||
| 431 | redisplay that finished. Valid for current buffer when | ||
| 432 | try_window_id can be called. */ | ||
| 433 | |||
| 434 | int beg_unchanged; | ||
| 435 | |||
| 436 | /* Smallest number of characters after the gap at any time since last | ||
| 437 | redisplay that finished. Valid for current buffer when | ||
| 438 | try_window_id can be called. */ | ||
| 439 | |||
| 440 | int end_unchanged; | ||
| 441 | |||
| 442 | /* MODIFF as of last redisplay that finished; if it matches MODIFF, | ||
| 443 | and overlay_unchanged_modified matches OVERLAY_MODIFF, that means | ||
| 444 | beg_unchanged and end_unchanged contain no useful information. */ | ||
| 445 | |||
| 446 | int unchanged_modified; | ||
| 447 | |||
| 448 | /* OVERLAY_MODIFF as of last redisplay that finished. */ | ||
| 449 | |||
| 450 | int overlay_unchanged_modified; | ||
| 451 | |||
| 452 | /* Nonzero if window sizes or contents have changed since last | 430 | /* Nonzero if window sizes or contents have changed since last |
| 453 | redisplay that finished */ | 431 | redisplay that finished */ |
| 454 | 432 | ||
| @@ -495,10 +473,16 @@ static int display_last_displayed_message_p; | |||
| 495 | 473 | ||
| 496 | int message_buf_print; | 474 | int message_buf_print; |
| 497 | 475 | ||
| 498 | /* Maximum height for resizing mini-windows. */ | 476 | /* Maximum height for resizing mini-windows. Either a float |
| 477 | specifying a fraction of the available height, or an integer | ||
| 478 | specifying a number of lines. */ | ||
| 499 | 479 | ||
| 500 | static Lisp_Object Vmax_mini_window_height; | 480 | static Lisp_Object Vmax_mini_window_height; |
| 501 | 481 | ||
| 482 | /* Window configuration saved in resize_mini_window. */ | ||
| 483 | |||
| 484 | static Lisp_Object Vresize_mini_config; | ||
| 485 | |||
| 502 | /* A scratch glyph row with contents used for generating truncation | 486 | /* A scratch glyph row with contents used for generating truncation |
| 503 | glyphs. Also used in direct_output_for_insert. */ | 487 | glyphs. Also used in direct_output_for_insert. */ |
| 504 | 488 | ||
| @@ -5221,7 +5205,7 @@ with_echo_area_buffer (w, which, fn, a1, a2, a3, a4, a5) | |||
| 5221 | Fset_window_buffer. We must also change w->pointm, though, | 5205 | Fset_window_buffer. We must also change w->pointm, though, |
| 5222 | because otherwise an assertions in unshow_buffer fails, and Emacs | 5206 | because otherwise an assertions in unshow_buffer fails, and Emacs |
| 5223 | aborts. */ | 5207 | aborts. */ |
| 5224 | set_buffer_internal (XBUFFER (buffer)); | 5208 | set_buffer_internal_1 (XBUFFER (buffer)); |
| 5225 | if (w) | 5209 | if (w) |
| 5226 | { | 5210 | { |
| 5227 | w->buffer = buffer; | 5211 | w->buffer = buffer; |
| @@ -5263,13 +5247,11 @@ with_echo_area_buffer_unwind_data (w) | |||
| 5263 | Vwith_echo_area_save_vector = Qnil; | 5247 | Vwith_echo_area_save_vector = Qnil; |
| 5264 | 5248 | ||
| 5265 | if (NILP (vector)) | 5249 | if (NILP (vector)) |
| 5266 | vector = Fmake_vector (make_number (9), Qnil); | 5250 | vector = Fmake_vector (make_number (7), Qnil); |
| 5267 | 5251 | ||
| 5268 | XSETBUFFER (XVECTOR (vector)->contents[i], current_buffer); ++i; | 5252 | XSETBUFFER (XVECTOR (vector)->contents[i], current_buffer); ++i; |
| 5269 | XVECTOR (vector)->contents[i++] = Vdeactivate_mark; | 5253 | XVECTOR (vector)->contents[i++] = Vdeactivate_mark; |
| 5270 | XVECTOR (vector)->contents[i++] = make_number (windows_or_buffers_changed); | 5254 | XVECTOR (vector)->contents[i++] = make_number (windows_or_buffers_changed); |
| 5271 | XVECTOR (vector)->contents[i++] = make_number (beg_unchanged); | ||
| 5272 | XVECTOR (vector)->contents[i++] = make_number (end_unchanged); | ||
| 5273 | 5255 | ||
| 5274 | if (w) | 5256 | if (w) |
| 5275 | { | 5257 | { |
| @@ -5301,11 +5283,9 @@ unwind_with_echo_area_buffer (vector) | |||
| 5301 | { | 5283 | { |
| 5302 | int i = 0; | 5284 | int i = 0; |
| 5303 | 5285 | ||
| 5304 | set_buffer_internal (XBUFFER (XVECTOR (vector)->contents[i])); ++i; | 5286 | set_buffer_internal_1 (XBUFFER (XVECTOR (vector)->contents[i])); ++i; |
| 5305 | Vdeactivate_mark = XVECTOR (vector)->contents[i]; ++i; | 5287 | Vdeactivate_mark = XVECTOR (vector)->contents[i]; ++i; |
| 5306 | windows_or_buffers_changed = XFASTINT (XVECTOR (vector)->contents[i]); ++i; | 5288 | windows_or_buffers_changed = XFASTINT (XVECTOR (vector)->contents[i]); ++i; |
| 5307 | beg_unchanged = XFASTINT (XVECTOR (vector)->contents[i]); ++i; | ||
| 5308 | end_unchanged = XFASTINT (XVECTOR (vector)->contents[i]); ++i; | ||
| 5309 | 5289 | ||
| 5310 | if (WINDOWP (XVECTOR (vector)->contents[i])) | 5290 | if (WINDOWP (XVECTOR (vector)->contents[i])) |
| 5311 | { | 5291 | { |
| @@ -5447,7 +5427,7 @@ resize_mini_window (w) | |||
| 5447 | int height, max_height; | 5427 | int height, max_height; |
| 5448 | int unit = CANON_Y_UNIT (f); | 5428 | int unit = CANON_Y_UNIT (f); |
| 5449 | struct text_pos start; | 5429 | struct text_pos start; |
| 5450 | 5430 | ||
| 5451 | init_iterator (&it, w, BEGV, BEGV_BYTE, NULL, DEFAULT_FACE_ID); | 5431 | init_iterator (&it, w, BEGV, BEGV_BYTE, NULL, DEFAULT_FACE_ID); |
| 5452 | 5432 | ||
| 5453 | /* Compute the max. number of lines specified by the user. */ | 5433 | /* Compute the max. number of lines specified by the user. */ |
| @@ -5478,9 +5458,14 @@ resize_mini_window (w) | |||
| 5478 | SET_MARKER_FROM_TEXT_POS (w->start, start); | 5458 | SET_MARKER_FROM_TEXT_POS (w->start, start); |
| 5479 | 5459 | ||
| 5480 | /* Change window's height, if necessary. */ | 5460 | /* Change window's height, if necessary. */ |
| 5481 | if (height != XFASTINT (w->height)) | 5461 | if (height > XFASTINT (w->height) |
| 5462 | || (height < XFASTINT (w->height) | ||
| 5463 | && NILP (Vresize_mini_config))) | ||
| 5482 | { | 5464 | { |
| 5483 | Lisp_Object old_selected_window; | 5465 | Lisp_Object old_selected_window; |
| 5466 | |||
| 5467 | if (NILP (Vresize_mini_config)) | ||
| 5468 | Vresize_mini_config = Fcurrent_window_configuration (Qnil); | ||
| 5484 | 5469 | ||
| 5485 | old_selected_window = selected_window; | 5470 | old_selected_window = selected_window; |
| 5486 | XSETWINDOW (selected_window, w); | 5471 | XSETWINDOW (selected_window, w); |
| @@ -5488,6 +5473,13 @@ resize_mini_window (w) | |||
| 5488 | selected_window = old_selected_window; | 5473 | selected_window = old_selected_window; |
| 5489 | window_height_changed_p = 1; | 5474 | window_height_changed_p = 1; |
| 5490 | } | 5475 | } |
| 5476 | else if (height < XFASTINT (w->height) | ||
| 5477 | && !NILP (Vresize_mini_config)) | ||
| 5478 | { | ||
| 5479 | Fset_window_configuration (Vresize_mini_config); | ||
| 5480 | Vresize_mini_config = Qnil; | ||
| 5481 | window_height_changed_p = 1; | ||
| 5482 | } | ||
| 5491 | } | 5483 | } |
| 5492 | 5484 | ||
| 5493 | return window_height_changed_p; | 5485 | return window_height_changed_p; |
| @@ -6729,11 +6721,6 @@ hscroll_windows (window) | |||
| 6729 | 6721 | ||
| 6730 | #if GLYPH_DEBUG | 6722 | #if GLYPH_DEBUG |
| 6731 | 6723 | ||
| 6732 | /* Values of beg_unchanged and end_unchanged as of last call to | ||
| 6733 | try_window_id. */ | ||
| 6734 | |||
| 6735 | int debug_beg_unchanged, debug_end_unchanged; | ||
| 6736 | |||
| 6737 | /* First and last unchanged row for try_window_id. */ | 6724 | /* First and last unchanged row for try_window_id. */ |
| 6738 | 6725 | ||
| 6739 | int debug_first_unchanged_at_end_vpos; | 6726 | int debug_first_unchanged_at_end_vpos; |
| @@ -6830,8 +6817,8 @@ text_outside_line_unchanged_p (w, start, end) | |||
| 6830 | 6817 | ||
| 6831 | /* Changes start in front of the line, or end after it? */ | 6818 | /* Changes start in front of the line, or end after it? */ |
| 6832 | if (unchanged_p | 6819 | if (unchanged_p |
| 6833 | && (beg_unchanged < start - 1 | 6820 | && (BEG_UNCHANGED < start - 1 |
| 6834 | || end_unchanged < end)) | 6821 | || END_UNCHANGED < end)) |
| 6835 | unchanged_p = 0; | 6822 | unchanged_p = 0; |
| 6836 | 6823 | ||
| 6837 | /* If selective display, can't optimize if changes start at the | 6824 | /* If selective display, can't optimize if changes start at the |
| @@ -6839,7 +6826,7 @@ text_outside_line_unchanged_p (w, start, end) | |||
| 6839 | if (unchanged_p | 6826 | if (unchanged_p |
| 6840 | && INTEGERP (current_buffer->selective_display) | 6827 | && INTEGERP (current_buffer->selective_display) |
| 6841 | && XINT (current_buffer->selective_display) > 0 | 6828 | && XINT (current_buffer->selective_display) > 0 |
| 6842 | && (beg_unchanged < start || GPT <= start)) | 6829 | && (BEG_UNCHANGED < start || GPT <= start)) |
| 6843 | unchanged_p = 0; | 6830 | unchanged_p = 0; |
| 6844 | } | 6831 | } |
| 6845 | 6832 | ||
| @@ -6861,6 +6848,25 @@ redisplay () | |||
| 6861 | } | 6848 | } |
| 6862 | 6849 | ||
| 6863 | 6850 | ||
| 6851 | /* Reconsider the setting of B->clip_changed which is displayed | ||
| 6852 | in window W. */ | ||
| 6853 | |||
| 6854 | static INLINE void | ||
| 6855 | reconsider_clip_changes (w, b) | ||
| 6856 | struct window *w; | ||
| 6857 | struct buffer *b; | ||
| 6858 | { | ||
| 6859 | if (b->prevent_redisplay_optimizations_p) | ||
| 6860 | b->clip_changed = 1; | ||
| 6861 | else if (b->clip_changed | ||
| 6862 | && !NILP (w->window_end_valid) | ||
| 6863 | && w->current_matrix->buffer == b | ||
| 6864 | && w->current_matrix->zv == BUF_ZV (b) | ||
| 6865 | && w->current_matrix->begv == BUF_BEGV (b)) | ||
| 6866 | b->clip_changed = 0; | ||
| 6867 | } | ||
| 6868 | |||
| 6869 | |||
| 6864 | /* If PRESERVE_ECHO_AREA is nonzero, it means this redisplay is not in | 6870 | /* If PRESERVE_ECHO_AREA is nonzero, it means this redisplay is not in |
| 6865 | response to any user action; therefore, we should preserve the echo | 6871 | response to any user action; therefore, we should preserve the echo |
| 6866 | area. (Actually, our caller does that job.) Perhaps in the future | 6872 | area. (Actually, our caller does that job.) Perhaps in the future |
| @@ -6920,6 +6926,8 @@ redisplay_internal (preserve_echo_area) | |||
| 6920 | 6926 | ||
| 6921 | retry: | 6927 | retry: |
| 6922 | 6928 | ||
| 6929 | reconsider_clip_changes (w, current_buffer); | ||
| 6930 | |||
| 6923 | /* If new fonts have been loaded that make a glyph matrix adjustment | 6931 | /* If new fonts have been loaded that make a glyph matrix adjustment |
| 6924 | necessary, do it. */ | 6932 | necessary, do it. */ |
| 6925 | if (fonts_changed_p) | 6933 | if (fonts_changed_p) |
| @@ -6971,8 +6979,6 @@ redisplay_internal (preserve_echo_area) | |||
| 6971 | /* Build menubar and toolbar items. */ | 6979 | /* Build menubar and toolbar items. */ |
| 6972 | prepare_menu_bars (); | 6980 | prepare_menu_bars (); |
| 6973 | 6981 | ||
| 6974 | retry_1: | ||
| 6975 | |||
| 6976 | if (windows_or_buffers_changed) | 6982 | if (windows_or_buffers_changed) |
| 6977 | update_mode_lines++; | 6983 | update_mode_lines++; |
| 6978 | 6984 | ||
| @@ -7024,6 +7030,12 @@ redisplay_internal (preserve_echo_area) | |||
| 7024 | consider_all_windows_p = 1; | 7030 | consider_all_windows_p = 1; |
| 7025 | ++update_mode_lines; | 7031 | ++update_mode_lines; |
| 7026 | ++windows_or_buffers_changed; | 7032 | ++windows_or_buffers_changed; |
| 7033 | |||
| 7034 | /* If window configuration was changed, frames may have been | ||
| 7035 | marked garbaged. Clear them or we will experience | ||
| 7036 | surprises wrt scrolling. */ | ||
| 7037 | if (frame_garbaged) | ||
| 7038 | clear_garbaged_frames (); | ||
| 7027 | } | 7039 | } |
| 7028 | } | 7040 | } |
| 7029 | else if (w == XWINDOW (minibuf_window) | 7041 | else if (w == XWINDOW (minibuf_window) |
| @@ -7038,6 +7050,12 @@ redisplay_internal (preserve_echo_area) | |||
| 7038 | consider_all_windows_p = 1; | 7050 | consider_all_windows_p = 1; |
| 7039 | ++windows_or_buffers_changed; | 7051 | ++windows_or_buffers_changed; |
| 7040 | ++update_mode_lines; | 7052 | ++update_mode_lines; |
| 7053 | |||
| 7054 | /* If window configuration was changed, frames may have been | ||
| 7055 | marked garbaged. Clear them or we will experience | ||
| 7056 | surprises wrt scrolling. */ | ||
| 7057 | if (frame_garbaged) | ||
| 7058 | clear_garbaged_frames (); | ||
| 7041 | } | 7059 | } |
| 7042 | 7060 | ||
| 7043 | 7061 | ||
| @@ -7417,10 +7435,10 @@ update: | |||
| 7417 | { | 7435 | { |
| 7418 | register struct buffer *b = XBUFFER (w->buffer); | 7436 | register struct buffer *b = XBUFFER (w->buffer); |
| 7419 | 7437 | ||
| 7420 | unchanged_modified = BUF_MODIFF (b); | 7438 | BUF_UNCHANGED_MODIFIED (b) = BUF_MODIFF (b); |
| 7421 | overlay_unchanged_modified = BUF_OVERLAY_MODIFF (b); | 7439 | BUF_OVERLAY_UNCHANGED_MODIFIED (b) = BUF_OVERLAY_MODIFF (b); |
| 7422 | beg_unchanged = BUF_GPT (b) - BUF_BEG (b); | 7440 | BUF_BEG_UNCHANGED (b) = BUF_GPT (b) - BUF_BEG (b); |
| 7423 | end_unchanged = BUF_Z (b) - BUF_GPT (b); | 7441 | BUF_END_UNCHANGED (b) = BUF_Z (b) - BUF_GPT (b); |
| 7424 | 7442 | ||
| 7425 | if (consider_all_windows_p) | 7443 | if (consider_all_windows_p) |
| 7426 | mark_window_display_accurate (FRAME_ROOT_WINDOW (selected_frame), 1); | 7444 | mark_window_display_accurate (FRAME_ROOT_WINDOW (selected_frame), 1); |
| @@ -7431,6 +7449,7 @@ update: | |||
| 7431 | w->last_cursor_off_p = w->cursor_off_p; | 7449 | w->last_cursor_off_p = w->cursor_off_p; |
| 7432 | 7450 | ||
| 7433 | b->clip_changed = 0; | 7451 | b->clip_changed = 0; |
| 7452 | b->prevent_redisplay_optimizations_p = 0; | ||
| 7434 | w->update_mode_line = Qnil; | 7453 | w->update_mode_line = Qnil; |
| 7435 | XSETFASTINT (w->last_modified, BUF_MODIFF (b)); | 7454 | XSETFASTINT (w->last_modified, BUF_MODIFF (b)); |
| 7436 | XSETFASTINT (w->last_overlay_modified, BUF_OVERLAY_MODIFF (b)); | 7455 | XSETFASTINT (w->last_overlay_modified, BUF_OVERLAY_MODIFF (b)); |
| @@ -7452,6 +7471,10 @@ update: | |||
| 7452 | last_arrow_string = Voverlay_arrow_string; | 7471 | last_arrow_string = Voverlay_arrow_string; |
| 7453 | if (frame_up_to_date_hook != 0) | 7472 | if (frame_up_to_date_hook != 0) |
| 7454 | (*frame_up_to_date_hook) (selected_frame); | 7473 | (*frame_up_to_date_hook) (selected_frame); |
| 7474 | |||
| 7475 | w->current_matrix->buffer = b; | ||
| 7476 | w->current_matrix->begv = BUF_BEGV (b); | ||
| 7477 | w->current_matrix->zv = BUF_ZV (b); | ||
| 7455 | } | 7478 | } |
| 7456 | 7479 | ||
| 7457 | update_mode_lines = 0; | 7480 | update_mode_lines = 0; |
| @@ -7589,6 +7612,10 @@ mark_window_display_accurate (window, accurate_p) | |||
| 7589 | if (accurate_p) | 7612 | if (accurate_p) |
| 7590 | { | 7613 | { |
| 7591 | b->clip_changed = 0; | 7614 | b->clip_changed = 0; |
| 7615 | b->prevent_redisplay_optimizations_p = 0; | ||
| 7616 | w->current_matrix->buffer = b; | ||
| 7617 | w->current_matrix->begv = BUF_BEGV (b); | ||
| 7618 | w->current_matrix->zv = BUF_ZV (b); | ||
| 7592 | w->last_cursor = w->cursor; | 7619 | w->last_cursor = w->cursor; |
| 7593 | w->last_cursor_off_p = w->cursor_off_p; | 7620 | w->last_cursor_off_p = w->cursor_off_p; |
| 7594 | if (w == XWINDOW (selected_window)) | 7621 | if (w == XWINDOW (selected_window)) |
| @@ -8039,7 +8066,7 @@ try_scrolling (window, just_this_one_p, scroll_conservatively, | |||
| 8039 | /* Maybe forget recorded base line for line number display. */ | 8066 | /* Maybe forget recorded base line for line number display. */ |
| 8040 | if (!just_this_one_p | 8067 | if (!just_this_one_p |
| 8041 | || current_buffer->clip_changed | 8068 | || current_buffer->clip_changed |
| 8042 | || beg_unchanged < CHARPOS (startp)) | 8069 | || BEG_UNCHANGED < CHARPOS (startp)) |
| 8043 | w->base_line_number = Qnil; | 8070 | w->base_line_number = Qnil; |
| 8044 | 8071 | ||
| 8045 | /* If cursor ends up on a partially visible line, shift display | 8072 | /* If cursor ends up on a partially visible line, shift display |
| @@ -8150,7 +8177,9 @@ redisplay_window (window, just_this_one_p) | |||
| 8150 | #endif | 8177 | #endif |
| 8151 | 8178 | ||
| 8152 | specbind (Qinhibit_point_motion_hooks, Qt); | 8179 | specbind (Qinhibit_point_motion_hooks, Qt); |
| 8153 | 8180 | ||
| 8181 | reconsider_clip_changes (w, buffer); | ||
| 8182 | |||
| 8154 | /* Has the mode line to be updated? */ | 8183 | /* Has the mode line to be updated? */ |
| 8155 | update_mode_line = (!NILP (w->update_mode_line) | 8184 | update_mode_line = (!NILP (w->update_mode_line) |
| 8156 | || update_mode_lines | 8185 | || update_mode_lines |
| @@ -8573,7 +8602,8 @@ redisplay_window (window, just_this_one_p) | |||
| 8573 | } | 8602 | } |
| 8574 | 8603 | ||
| 8575 | /* Try scrolling with try_window_id. */ | 8604 | /* Try scrolling with try_window_id. */ |
| 8576 | else if (!windows_or_buffers_changed | 8605 | else if (/* Windows and buffers haven't changed. */ |
| 8606 | !windows_or_buffers_changed | ||
| 8577 | /* Window must be either use window-based redisplay or | 8607 | /* Window must be either use window-based redisplay or |
| 8578 | be full width. */ | 8608 | be full width. */ |
| 8579 | && (FRAME_WINDOW_P (f) | 8609 | && (FRAME_WINDOW_P (f) |
| @@ -8647,7 +8677,7 @@ redisplay_window (window, just_this_one_p) | |||
| 8647 | { | 8677 | { |
| 8648 | if (!just_this_one_p | 8678 | if (!just_this_one_p |
| 8649 | || current_buffer->clip_changed | 8679 | || current_buffer->clip_changed |
| 8650 | || beg_unchanged < CHARPOS (startp)) | 8680 | || BEG_UNCHANGED < CHARPOS (startp)) |
| 8651 | /* Forget any recorded base line for line number display. */ | 8681 | /* Forget any recorded base line for line number display. */ |
| 8652 | w->base_line_number = Qnil; | 8682 | w->base_line_number = Qnil; |
| 8653 | 8683 | ||
| @@ -9428,7 +9458,7 @@ static struct glyph_row * | |||
| 9428 | get_last_unchanged_at_beg_row (w) | 9458 | get_last_unchanged_at_beg_row (w) |
| 9429 | struct window *w; | 9459 | struct window *w; |
| 9430 | { | 9460 | { |
| 9431 | int first_changed_pos = BEG + beg_unchanged; | 9461 | int first_changed_pos = BEG + BEG_UNCHANGED; |
| 9432 | struct glyph_row *row; | 9462 | struct glyph_row *row; |
| 9433 | struct glyph_row *row_found = NULL; | 9463 | struct glyph_row *row_found = NULL; |
| 9434 | int yb = window_text_bottom_y (w); | 9464 | int yb = window_text_bottom_y (w); |
| @@ -9488,7 +9518,7 @@ get_first_unchanged_at_end_row (w, delta, delta_bytes) | |||
| 9488 | end is in the range of changed text. If so, there is no | 9518 | end is in the range of changed text. If so, there is no |
| 9489 | unchanged row at the end of W's current matrix. */ | 9519 | unchanged row at the end of W's current matrix. */ |
| 9490 | xassert (!NILP (w->window_end_valid)); | 9520 | xassert (!NILP (w->window_end_valid)); |
| 9491 | if (XFASTINT (w->window_end_pos) >= end_unchanged) | 9521 | if (XFASTINT (w->window_end_pos) >= END_UNCHANGED) |
| 9492 | return NULL; | 9522 | return NULL; |
| 9493 | 9523 | ||
| 9494 | /* Set row to the last row in W's current matrix displaying text. */ | 9524 | /* Set row to the last row in W's current matrix displaying text. */ |
| @@ -9517,7 +9547,7 @@ get_first_unchanged_at_end_row (w, delta, delta_bytes) | |||
| 9517 | subtracting end_unchanged we get the index of the last | 9547 | subtracting end_unchanged we get the index of the last |
| 9518 | unchanged character, and we have to add BEG to get its buffer | 9548 | unchanged character, and we have to add BEG to get its buffer |
| 9519 | position. */ | 9549 | position. */ |
| 9520 | last_unchanged_pos = Z - end_unchanged + BEG; | 9550 | last_unchanged_pos = Z - END_UNCHANGED + BEG; |
| 9521 | last_unchanged_pos_old = last_unchanged_pos - *delta; | 9551 | last_unchanged_pos_old = last_unchanged_pos - *delta; |
| 9522 | 9552 | ||
| 9523 | /* Search backward from ROW for a row displaying a line that | 9553 | /* Search backward from ROW for a row displaying a line that |
| @@ -9644,10 +9674,10 @@ try_window_id (w) | |||
| 9644 | set end_unchanged to 0 in that case. */ | 9674 | set end_unchanged to 0 in that case. */ |
| 9645 | if (MODIFF > SAVE_MODIFF) | 9675 | if (MODIFF > SAVE_MODIFF) |
| 9646 | { | 9676 | { |
| 9647 | if (GPT - BEG < beg_unchanged) | 9677 | if (GPT - BEG < BEG_UNCHANGED) |
| 9648 | beg_unchanged = GPT - BEG; | 9678 | BEG_UNCHANGED = GPT - BEG; |
| 9649 | if (Z - GPT < end_unchanged) | 9679 | if (Z - GPT < END_UNCHANGED) |
| 9650 | end_unchanged = Z - GPT; | 9680 | END_UNCHANGED = Z - GPT; |
| 9651 | } | 9681 | } |
| 9652 | 9682 | ||
| 9653 | /* If window starts after a line end, and the last change is in | 9683 | /* If window starts after a line end, and the last change is in |
| @@ -9655,7 +9685,7 @@ try_window_id (w) | |||
| 9655 | This case happens with stealth-fontification. */ | 9685 | This case happens with stealth-fontification. */ |
| 9656 | row = MATRIX_ROW (w->current_matrix, XFASTINT (w->window_end_vpos)); | 9686 | row = MATRIX_ROW (w->current_matrix, XFASTINT (w->window_end_vpos)); |
| 9657 | if (CHARPOS (start) > BEGV | 9687 | if (CHARPOS (start) > BEGV |
| 9658 | && Z - end_unchanged < CHARPOS (start) - 1 | 9688 | && Z - END_UNCHANGED < CHARPOS (start) - 1 |
| 9659 | && FETCH_BYTE (BYTEPOS (start) - 1) == '\n' | 9689 | && FETCH_BYTE (BYTEPOS (start) - 1) == '\n' |
| 9660 | && PT < MATRIX_ROW_END_CHARPOS (row)) | 9690 | && PT < MATRIX_ROW_END_CHARPOS (row)) |
| 9661 | { | 9691 | { |
| @@ -9670,7 +9700,7 @@ try_window_id (w) | |||
| 9670 | 9700 | ||
| 9671 | /* Return quickly if changes are all below what is displayed in the | 9701 | /* Return quickly if changes are all below what is displayed in the |
| 9672 | window, and if PT is in the window. */ | 9702 | window, and if PT is in the window. */ |
| 9673 | if (beg_unchanged > MATRIX_ROW_END_CHARPOS (row) | 9703 | if (BEG_UNCHANGED > MATRIX_ROW_END_CHARPOS (row) |
| 9674 | && PT < MATRIX_ROW_END_CHARPOS (row)) | 9704 | && PT < MATRIX_ROW_END_CHARPOS (row)) |
| 9675 | { | 9705 | { |
| 9676 | /* We have to update window end positions because the buffer's | 9706 | /* We have to update window end positions because the buffer's |
| @@ -9690,10 +9720,6 @@ try_window_id (w) | |||
| 9690 | if (!TEXT_POS_EQUAL_P (start, row->start.pos)) | 9720 | if (!TEXT_POS_EQUAL_P (start, row->start.pos)) |
| 9691 | return 0; | 9721 | return 0; |
| 9692 | 9722 | ||
| 9693 | /* Remember beg_unchanged and end_unchanged for debugging purposes. */ | ||
| 9694 | IF_DEBUG (debug_beg_unchanged = beg_unchanged; | ||
| 9695 | debug_end_unchanged = end_unchanged); | ||
| 9696 | |||
| 9697 | /* Compute the position at which we have to start displaying new | 9723 | /* Compute the position at which we have to start displaying new |
| 9698 | lines. Some of the lines at the top of the window might be | 9724 | lines. Some of the lines at the top of the window might be |
| 9699 | reusable because they are not displaying changed text. Find the | 9725 | reusable because they are not displaying changed text. Find the |
| @@ -9769,7 +9795,7 @@ try_window_id (w) | |||
| 9769 | + delta); | 9795 | + delta); |
| 9770 | first_unchanged_at_end_vpos | 9796 | first_unchanged_at_end_vpos |
| 9771 | = MATRIX_ROW_VPOS (first_unchanged_at_end_row, current_matrix); | 9797 | = MATRIX_ROW_VPOS (first_unchanged_at_end_row, current_matrix); |
| 9772 | xassert (stop_pos >= Z - end_unchanged); | 9798 | xassert (stop_pos >= Z - END_UNCHANGED); |
| 9773 | } | 9799 | } |
| 9774 | } | 9800 | } |
| 9775 | else if (last_unchanged_at_beg_row == NULL) | 9801 | else if (last_unchanged_at_beg_row == NULL) |
| @@ -12408,6 +12434,9 @@ invisible_ellipsis_p (propval, list) | |||
| 12408 | void | 12434 | void |
| 12409 | syms_of_xdisp () | 12435 | syms_of_xdisp () |
| 12410 | { | 12436 | { |
| 12437 | Vresize_mini_config = Qnil; | ||
| 12438 | staticpro (&Vresize_mini_config); | ||
| 12439 | |||
| 12411 | Vwith_echo_area_save_vector = Qnil; | 12440 | Vwith_echo_area_save_vector = Qnil; |
| 12412 | staticpro (&Vwith_echo_area_save_vector); | 12441 | staticpro (&Vwith_echo_area_save_vector); |
| 12413 | 12442 | ||