From bbb9fc1f654a0eb81a5dc186e16880a0354ddd71 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Fri, 25 Jan 2008 23:02:36 +0000 Subject: [PATCH] (redisplay_window): Run Qwindow_text_change_functions and jump back to beginning. Move some other initializations after that. (Qwindow_text_change_functions, (Vwindow_text_change_functions): New variables. (syms_of_xdisp): Init them. --- src/ChangeLog | 15 +++++++++++++++ src/xdisp.c | 33 +++++++++++++++++++++++++++------ 2 files changed, 42 insertions(+), 6 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 73d2e1d05c7..9a70449ac78 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,18 @@ +2008-01-25 Richard Stallman + + * xdisp.c (redisplay_window): Run Qwindow_text_change_functions and + jump back to beginning. Move some other initializations after that. + (Qwindow_text_change_functions, Vwindow_text_change_functions): + New variables. + (syms_of_xdisp): Init them. + + * keyboard.c (read_char): Restore echo_message_buffer after redisplay. + + * buffer.c (reset_buffer_local_variables): Implement + `permanent-local-hook'. + (Qpermanent_local_hook): New variable. + (syms_of_buffer): init and staticpro it. + 2008-01-25 Michael Albinus * dbusbind.c (xd_retrieve_arg): Pacify GCC on x86_64 GNU/Linux. diff --git a/src/xdisp.c b/src/xdisp.c index dfa18bfacb7..8c1b2b945fe 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -232,6 +232,7 @@ extern Lisp_Object Qhelp_echo; Lisp_Object Qoverriding_local_map, Qoverriding_terminal_local_map; Lisp_Object Qwindow_scroll_functions, Vwindow_scroll_functions; +Lisp_Object Qwindow_text_change_functions, Vwindow_text_change_functions; Lisp_Object Qredisplay_end_trigger_functions, Vredisplay_end_trigger_functions; Lisp_Object Qinhibit_point_motion_hooks; Lisp_Object QCeval, QCfile, QCdata, QCpropertize; @@ -12884,8 +12885,7 @@ redisplay_window (window, just_this_one_p) *w->desired_matrix->method = 0; #endif - specbind (Qinhibit_point_motion_hooks, Qt); - + restart: reconsider_clip_changes (w, buffer); /* Has the mode line to be updated? */ @@ -12936,10 +12936,6 @@ redisplay_window (window, just_this_one_p) /* Really select the buffer, for the sake of buffer-local variables. */ set_buffer_internal_1 (XBUFFER (w->buffer)); - SET_TEXT_POS (opoint, PT, PT_BYTE); - - beg_unchanged = BEG_UNCHANGED; - end_unchanged = END_UNCHANGED; current_matrix_up_to_date_p = (!NILP (w->window_end_valid) @@ -12948,6 +12944,23 @@ redisplay_window (window, just_this_one_p) && XFASTINT (w->last_modified) >= MODIFF && XFASTINT (w->last_overlay_modified) >= OVERLAY_MODIFF); + /* Run the window-bottom-change-functions + if it is possible that the text on the screen has changed + (either due to modification of the text, or any other reason). */ + if (!current_matrix_up_to_date_p + && !NILP (Vwindow_text_change_functions)) + { + safe_run_hooks (Qwindow_text_change_functions); + goto restart; + } + + beg_unchanged = BEG_UNCHANGED; + end_unchanged = END_UNCHANGED; + + SET_TEXT_POS (opoint, PT, PT_BYTE); + + specbind (Qinhibit_point_motion_hooks, Qt); + buffer_unchanged_p = (!NILP (w->window_end_valid) && !current_buffer->clip_changed @@ -23962,6 +23975,9 @@ syms_of_xdisp () staticpro (&Qwindow_scroll_functions); Qwindow_scroll_functions = intern ("window-scroll-functions"); + staticpro (&Qwindow_text_change_functions); + Qwindow_text_change_functions = intern ("window-text-change-functions"); + staticpro (&Qredisplay_end_trigger_functions); Qredisplay_end_trigger_functions = intern ("redisplay-end-trigger-functions"); @@ -24273,6 +24289,11 @@ and its new display-start position. Note that the value of `window-end' is not valid when these functions are called. */); Vwindow_scroll_functions = Qnil; + DEFVAR_LISP ("window-text-change-functions", + &Vwindow_text_change_functions, + doc: /* Functions to call in redisplay when text in the window might change. */); + Vwindow_text_change_functions = Qnil; + DEFVAR_LISP ("redisplay-end-trigger-functions", &Vredisplay_end_trigger_functions, doc: /* Functions called when redisplay of a window reaches the end trigger. Each function is called with two arguments, the window and the end trigger value. -- 2.39.2