summaryrefslogtreecommitdiff
path: root/src/window.c
diff options
context:
space:
mode:
authorRichard M. Stallman <rms@gnu.org>1997-04-02 03:44:32 +0000
committerRichard M. Stallman <rms@gnu.org>1997-04-02 03:44:32 +0000
commit2fe88e445beea53cd3aedd844fe60907602739e6 (patch)
tree3f30e2c1a9f6cc593d7320c8baa73ce2a3d54379 /src/window.c
parent453065ad4ffa6bfce2df9f8bf5ccb9bd28e0e29b (diff)
downloademacs-2fe88e445beea53cd3aedd844fe60907602739e6.tar.gz
(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.
Diffstat (limited to 'src/window.c')
-rw-r--r--src/window.c55
1 files changed, 48 insertions, 7 deletions
diff --git a/src/window.c b/src/window.c
index 2112a1d357a..97a6c860598 100644
--- a/src/window.c
+++ b/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;
@@ -786,6 +790,18 @@ DEFUN ("delete-window", Fdelete_window, Sdelete_window, 0, 1, "",
(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;
register struct window *par;
@@ -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);