Mercurial > emacs
changeset 14445:e73b37519cdc
(Fset_window_buffer): Set buffer temporarily around running
the window-scroll-functions.
(Fset_window_buffer_unwind): New function.
(window_initialized): New variable.
(init_window_once): Set it.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Wed, 31 Jan 1996 05:11:48 +0000 |
parents | 1999513cc3b2 |
children | bdff3ee6ee93 |
files | src/window.c |
diffstat | 1 files changed, 28 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/window.c Wed Jan 31 02:23:25 1996 +0000 +++ b/src/window.c Wed Jan 31 05:11:48 1996 +0000 @@ -108,6 +108,9 @@ /* Incremented for each window created. */ static int sequence_number; +/* Nonzero after init_window_once has finished. */ +static int window_initialized; + #define min(a, b) ((a) < (b) ? (a) : (b)) extern Lisp_Object Qwindow_scroll_functions, Vwindow_scroll_functions; @@ -1825,6 +1828,14 @@ int window_select_count; +Lisp_Object +Fset_window_buffer_unwind (obuf) + Lisp_Object obuf; +{ + Fset_buffer (obuf); + return Qnil; +} + DEFUN ("set-window-buffer", Fset_window_buffer, Sset_window_buffer, 2, 2, 0, "Make WINDOW display BUFFER as its contents.\n\ BUFFER can be a buffer or buffer name.") @@ -1833,6 +1844,7 @@ { register Lisp_Object tem; register struct window *w = decode_window (window); + int count = specpdl_ptr - specpdl; buffer = Fget_buffer (buffer); CHECK_BUFFER (buffer, 1); @@ -1867,12 +1879,26 @@ w->force_start = Qnil; XSETFASTINT (w->last_modified, 0); windows_or_buffers_changed++; + + /* We must select BUFFER for running the window-scroll-functions. + If WINDOW is selected, switch permanently. + Otherwise, switch but go back to the ambient buffer afterward. */ if (EQ (window, selected_window)) Fset_buffer (buffer); + /* We can't check ! NILP (Vwindow_scroll_functions) here + because that might itself be a local variable. */ + else if (window_initialized) + { + record_unwind_protect (Fset_window_buffer_unwind, Fcurrent_buffer ()); + Fset_buffer (buffer); + } + if (! NILP (Vwindow_scroll_functions)) run_hook_with_args_2 (Qwindow_scroll_functions, window, Fmarker_position (w->start)); + unbind_to (count, Qnil); + return Qnil; } @@ -3464,6 +3490,8 @@ something newer than this. */ XSETFASTINT (XWINDOW (selected_window)->use_time, ++window_select_count); #endif /* not MULTI_FRAME */ + + window_initialized = 1; } syms_of_window ()