mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-11-26 07:33:47 +00:00
(Qwindow_configuration_change_hook): New variable.
(Vwindow_configuration_change_hook): New variable. (syms_of_window): Initialize; set up Lisp var. (delete_window): New subroutine, from Fdelete_window. Most callers changed. (Fdelete_window): Call Vwindow_configuration_change_functions. (Fset_window_buffer, Fenlarge_window, Fshrink_window): Call the Vwindow_configuration_change_functions. (Fset_window_configuration): Likewise.
This commit is contained in:
parent
2323275b08
commit
543f5fb17f
55
src/window.c
55
src/window.c
@ -111,6 +111,10 @@ static int sequence_number;
|
||||
/* Nonzero after init_window_once has finished. */
|
||||
static int window_initialized;
|
||||
|
||||
/* Hook to run when window config changes. */
|
||||
Lisp_Object Qwindow_configuration_change_hook;
|
||||
Lisp_Object Vwindow_configuration_change_hook;
|
||||
|
||||
/* Nonzero means scroll commands try to put point
|
||||
at the same screen height as previously. */
|
||||
static int scroll_preserve_screen_position;
|
||||
@ -785,6 +789,18 @@ DEFUN ("delete-window", Fdelete_window, Sdelete_window, 0, 1, "",
|
||||
"Remove WINDOW from the display. Default is selected window.")
|
||||
(window)
|
||||
register Lisp_Object window;
|
||||
{
|
||||
delete_window (window);
|
||||
|
||||
if (! NILP (Vwindow_configuration_change_hook)
|
||||
&& ! NILP (Vrun_hooks))
|
||||
call1 (Vrun_hooks, Qwindow_configuration_change_hook);
|
||||
|
||||
return Qnil;
|
||||
}
|
||||
|
||||
delete_window (window)
|
||||
register Lisp_Object window;
|
||||
{
|
||||
register Lisp_Object tem, parent, sib;
|
||||
register struct window *p;
|
||||
@ -910,8 +926,6 @@ DEFUN ("delete-window", Fdelete_window, Sdelete_window, 0, 1, "",
|
||||
|
||||
/* Mark this window as deleted. */
|
||||
p->buffer = p->hchild = p->vchild = Qnil;
|
||||
|
||||
return Qnil;
|
||||
}
|
||||
|
||||
|
||||
@ -1719,7 +1733,7 @@ set_window_height (window, height, nodelete)
|
||||
&& ! NILP (w->parent)
|
||||
&& height < window_min_height)
|
||||
{
|
||||
Fdelete_window (window);
|
||||
delete_window (window);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1783,7 +1797,7 @@ set_window_width (window, width, nodelete)
|
||||
|
||||
if (!nodelete && width < window_min_width && !NILP (w->parent))
|
||||
{
|
||||
Fdelete_window (window);
|
||||
delete_window (window);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1910,6 +1924,10 @@ BUFFER can be a buffer or buffer name.")
|
||||
run_hook_with_args_2 (Qwindow_scroll_functions, window,
|
||||
Fmarker_position (w->start));
|
||||
|
||||
if (! NILP (Vwindow_configuration_change_hook)
|
||||
&& ! NILP (Vrun_hooks))
|
||||
call1 (Vrun_hooks, Qwindow_configuration_change_hook);
|
||||
|
||||
unbind_to (count, Qnil);
|
||||
|
||||
return Qnil;
|
||||
@ -2420,8 +2438,6 @@ and put SIZE columns in the first of the pair.")
|
||||
p->parent = o->parent;
|
||||
p->buffer = Qt;
|
||||
|
||||
Fset_window_buffer (new, o->buffer);
|
||||
|
||||
/* Apportion the available frame space among the two new windows */
|
||||
|
||||
if (!NILP (horflag))
|
||||
@ -2441,6 +2457,8 @@ and put SIZE columns in the first of the pair.")
|
||||
XSETFASTINT (p->top, XFASTINT (o->top) + size_int);
|
||||
}
|
||||
|
||||
Fset_window_buffer (new, o->buffer);
|
||||
|
||||
return new;
|
||||
}
|
||||
|
||||
@ -2452,6 +2470,10 @@ From program, optional second arg non-nil means grow sideways ARG columns.")
|
||||
{
|
||||
CHECK_NUMBER (arg, 0);
|
||||
change_window_height (XINT (arg), !NILP (side));
|
||||
|
||||
if (! NILP (Vwindow_configuration_change_hook))
|
||||
call1 (Vrun_hooks, Qwindow_configuration_change_hook);
|
||||
|
||||
return Qnil;
|
||||
}
|
||||
|
||||
@ -2463,6 +2485,10 @@ From program, optional second arg non-nil means shrink sideways arg columns.")
|
||||
{
|
||||
CHECK_NUMBER (arg, 0);
|
||||
change_window_height (-XINT (arg), !NILP (side));
|
||||
|
||||
if (! NILP (Vwindow_configuration_change_hook))
|
||||
call1 (Vrun_hooks, Qwindow_configuration_change_hook);
|
||||
|
||||
return Qnil;
|
||||
}
|
||||
|
||||
@ -2552,7 +2578,7 @@ change_window_height (delta, widthflag)
|
||||
|
||||
if (*sizep + delta < MINSIZE (window))
|
||||
{
|
||||
Fdelete_window (window);
|
||||
delete_window (window);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -3377,6 +3403,11 @@ by `current-window-configuration' (which see).")
|
||||
Fset_buffer (new_current_buffer);
|
||||
|
||||
Vminibuf_scroll_window = data->minibuf_scroll_window;
|
||||
|
||||
if (! NILP (Vwindow_configuration_change_hook)
|
||||
&& ! NILP (Vrun_hooks))
|
||||
call1 (Vrun_hooks, Qwindow_configuration_change_hook);
|
||||
|
||||
return (Qnil);
|
||||
}
|
||||
|
||||
@ -3583,6 +3614,10 @@ init_window_once ()
|
||||
|
||||
syms_of_window ()
|
||||
{
|
||||
staticpro (&Qwindow_configuration_change_hook);
|
||||
Qwindow_configuration_change_hook
|
||||
= intern ("window-configuration-change-hook");
|
||||
|
||||
Qwindowp = intern ("windowp");
|
||||
staticpro (&Qwindowp);
|
||||
|
||||
@ -3722,6 +3757,12 @@ If there is only one window, it is split regardless of this value.");
|
||||
"*Nonzero means scroll commands move point to keep its screen line unchanged.");
|
||||
scroll_preserve_screen_position = 0;
|
||||
|
||||
DEFVAR_LISP ("window-configuration-change-hook",
|
||||
&Vwindow_configuration_change_hook,
|
||||
"Functions to call when window configuration changes.\n\
|
||||
The selected frae is the one whose configuration has changed.");
|
||||
Vwindow_configuration_change_hook = Qnil;
|
||||
|
||||
defsubr (&Sselected_window);
|
||||
defsubr (&Sminibuffer_window);
|
||||
defsubr (&Swindow_minibuffer_p);
|
||||
|
Loading…
Reference in New Issue
Block a user