/* Window creation, deletion and examination for GNU Emacs.
Does not include redisplay.
- Copyright (C) 1985, 1986, 1987, 1992, 1993 Free Software Foundation, Inc.
+ Copyright (C) 1985, 1986, 1987, 1993 Free Software Foundation, Inc.
This file is part of GNU Emacs.
#include "disptab.h"
#include "keyboard.h"
-Lisp_Object Qwindowp, Qlive_window_p;
+Lisp_Object Qwindowp, Qwindow_live_p;
Lisp_Object Fnext_window (), Fdelete_window (), Fselect_window ();
Lisp_Object Fset_window_buffer (), Fsplit_window (), Frecenter ();
/* Non-nil means this is the buffer whose window C-M-v should scroll. */
Lisp_Object Vother_window_scroll_buffer;
-/* Window that the mouse is over (nil if no mouse support). */
-Lisp_Object Vmouse_window;
-
-/* Last mouse click data structure (nil if no mouse support). */
-Lisp_Object Vmouse_event;
-
/* Non-nil means it's function to call to display temp buffers. */
Lisp_Object Vtemp_buffer_show_function;
return XTYPE (obj) == Lisp_Window ? Qt : Qnil;
}
-DEFUN ("live-window-p", Flive_window_p, Slive_window_p, 1, 1, 0,
+DEFUN ("window-live-p", Fwindow_live_p, Swindow_live_p, 1, 1, 0,
"Returns t if OBJ is a window which is currently visible.")
(obj)
Lisp_Object obj;
DEFUN ("window-dedicated-p", Fwindow_dedicated_p, Swindow_dedicated_p,
1, 1, 0,
"Return WINDOW's dedicated object, usually t or nil.\n\
-See also `set-window-buffer-dedicated'.")
+See also `set-window-dedicated-p'.")
(window)
Lisp_Object window;
{
\n\
Optional third arg ALL-FRAMES t means include windows on all frames.\n\
ALL-FRAMES nil or omitted means cycle within the frames as specified\n\
-above. If neither nil nor t, restrict to WINDOW's frame.")
+above. If neither nil nor t, restrict to WINDOW's frame.\n\
+\n\
+If you use consistent values for MINIBUF and ALL-FRAMES, you can use\n\
+`next-window' to iterate through the entire cycle of acceptable\n\
+windows, eventually ending up back at the window you started with.\n\
+`previous-window' traverses the same cycle, in the reverse order.")
(window, minibuf, all_frames)
register Lisp_Object window, minibuf, all_frames;
{
\n\
Optional third arg ALL-FRAMES t means include windows on all frames.\n\
ALL-FRAMES nil or omitted means cycle within the frames as specified\n\
-above. If neither nil nor t, restrict to WINDOW's frame.")
+above. If neither nil nor t, restrict to WINDOW's frame.\n\
+\n\
+If you use consistent values for MINIBUF and ALL-FRAMES, you can use\n\
+`previous-window' to iterate through the entire cycle of acceptable\n\
+windows, eventually ending up back at the window you started with.\n\
+`next-window' traverses the same cycle, in the reverse order.")
(window, minibuf, all_frames)
register Lisp_Object window, minibuf, all_frames;
{
tem = WINDOW_FRAME (XWINDOW (window));
#ifdef MULTI_FRAME
if (! NILP (all_frames))
- tem = next_frame (tem, all_frames);
+ /* It's actually important that we use prev_frame here,
+ rather than next_frame. All the windows acceptable
+ according to the given parameters should form a ring;
+ Fnext_window and Fprevious_window should go back and
+ forth around the ring. If we use next_frame here,
+ then Fnext_window and Fprevious_window take different
+ paths through the set of acceptable windows.
+ window_loop assumes that these `ring' requirement are
+ met. */
+ tem = prev_frame (tem, all_frames);
#endif
tem = FRAME_ROOT_WINDOW (XFRAME (tem));
w = XWINDOW (window);
top = XFASTINT (w->top);
- window_loop (DELETE_OTHER_WINDOWS, window, 0, WINDOW_FRAME(w));
+ window_loop (DELETE_OTHER_WINDOWS, window, 0, WINDOW_FRAME (w));
Fset_buffer (w->buffer);
SET_PT (marker_position (w->start));
- Frecenter (make_number (top));
+ Frecenter (make_number (top - FRAME_MENU_BAR_LINES (XFRAME (WINDOW_FRAME (w)))));
set_buffer_internal (obuf);
SET_PT (opoint);
}
w->buffer = buffer;
+ w->hscroll = 0;
Fset_marker (w->pointm,
make_number (BUF_PT (XBUFFER (buffer))),
buffer);
if (XFRAME (WINDOW_FRAME (w)) != selected_frame)
{
XFRAME (WINDOW_FRAME (w))->selected_window = window;
- Fselect_frame (WINDOW_FRAME (w), Qnil);
+ Fhandle_switch_frame (WINDOW_FRAME (w), Qnil);
}
else
selected_frame->selected_window = window;
}
DEFUN ("display-buffer", Fdisplay_buffer, Sdisplay_buffer, 1, 2,
- "BDisplay buffer:\nP",
+ "BDisplay buffer: \nP",
"Make BUFFER appear in some window but don't select it.\n\
BUFFER can be a buffer or a buffer name.\n\
If BUFFER is shown already in some window, just use that one,\n\
= Fframe_selected_window (call0 (Vpop_up_frame_function));
Fset_window_buffer (window, buffer);
#if 0
- Fselect_frame (XWINDOW (window)->frame, Qnil);
+ Fhandle_switch_frame (XWINDOW (window)->frame, Qnil);
#endif
return window;
}
/* Return the number of columns in W.
- Don't count columns occupied by scrollbars or the vertical bar
+ Don't count columns occupied by scroll bars or the vertical bar
separating W from the sibling to its right. */
int
window_internal_width (w)
/* If we are not flush right, then our rightmost columns are
occupied by some sort of separator. */
- /* Scrollbars occupy a few columns. */
- if (FRAME_HAS_VERTICAL_SCROLLBARS (f))
- return width - VERTICAL_SCROLLBAR_WIDTH;
+ /* Scroll bars occupy a few columns. */
+ if (FRAME_HAS_VERTICAL_SCROLL_BARS (f))
+ return width - VERTICAL_SCROLL_BAR_WIDTH;
/* The column of `|' characters separating side-by-side windows
occupies one column only. */
window = Fdisplay_buffer (Vother_window_scroll_buffer, Qt);
}
else
- /* Nothing specified; pick a neighboring window. */
- window = Fnext_window (selected_window, Qnil, Qt);
+ {
+ /* Nothing specified; look for a neighboring window on the same
+ frame. */
+ window = Fnext_window (selected_window, Qnil, Qnil);
+
+ if (EQ (window, selected_window))
+ /* That didn't get us anywhere; look for a window on another
+ visible frame. */
+ do
+ window = Fnext_window (window, Qnil, Qt);
+ while (! FRAME_VISIBLE_P (XFRAME (WINDOW_FRAME (XWINDOW (window))))
+ && ! EQ (window, selected_window));
+ }
+
CHECK_LIVE_WINDOW (window, 0);
if (EQ (window, selected_window))
}
Fset_marker (w->pointm, make_number (point), Qnil);
- unbind_to (count);
+ unbind_to (count, Qnil);
return Qnil;
}
{
if (NILP (arg))
- XFASTINT (arg) = window_internal_width (selected_window) - 2;
+ XFASTINT (arg) = window_internal_width (XWINDOW (selected_window)) - 2;
else
arg = Fprefix_numeric_value (arg);
register Lisp_Object arg;
{
if (NILP (arg))
- XFASTINT (arg) = window_internal_width (selected_window) - 2;
+ XFASTINT (arg) = window_internal_width (XWINDOW (selected_window)) - 2;
else
arg = Fprefix_numeric_value (arg);
}
-DEFUN ("set-window-configuration",
- Fset_window_configuration, Sset_window_configuration,
- 1, 1, 0,
+DEFUN ("set-window-configuration", Fset_window_configuration,
+ Sset_window_configuration, 1, 1, 0,
"Set the configuration of windows and buffers as specified by CONFIGURATION.\n\
CONFIGURATION must be a value previously returned\n\
by `current-window-configuration' (which see).")
when the frame's old selected window has been deleted. */
#ifdef MULTI_FRAME
if (f != selected_frame && ! FRAME_TERMCAP_P (f))
- Fselect_frame (WINDOW_FRAME (XWINDOW (data->root_window)), Qnil);
+ Fhandle_switch_frame (WINDOW_FRAME (XWINDOW (data->root_window)), Qnil);
#endif
#endif
#ifdef MULTI_FRAME
/* Fselect_window will have made f the selected frame, so we
- reselect the proper frame here. Fselect_frame will change the
+ reselect the proper frame here. Fhandle_switch_frame will change the
selected window too, but that doesn't make the call to
Fselect_window above totally superfluous; it still sets f's
selected window. */
if (FRAME_LIVE_P (XFRAME (data->selected_frame)))
- Fselect_frame (data->selected_frame);
+ Fhandle_switch_frame (data->selected_frame, Qnil);
#endif
if (!NILP (new_current_buffer))
Qwindowp = intern ("windowp");
staticpro (&Qwindowp);
- Qlive_window_p = intern ("live-window-p");
- staticpro (&Qlive_window_p);
+ Qwindow_live_p = intern ("window-live-p");
+ staticpro (&Qwindow_live_p);
#ifndef MULTI_FRAME
/* Make sure all windows get marked */
work using this function.");
Vdisplay_buffer_function = Qnil;
- DEFVAR_LISP ("mouse-window", &Vmouse_window,
- "Window that the last mouse click occurred on.");
- Vmouse_window = Qnil;
-
- DEFVAR_LISP ("mouse-event", &Vmouse_event,
- "The last mouse-event object. A list of four elements:\n\
- ((X-POS Y-POS) WINDOW FRAME-PART KEYSEQ).\n\
-KEYSEQ is a string, the key sequence to be looked up in the mouse maps.\n\
-WINDOW is the window that the click applies do.\n\
-If FRAME-PART is non-nil, the event was on a scrollbar;\n\
-then Y-POS is really the total length of the scrollbar, while X-POS is\n\
-the relative position of the scrollbar's value within that total length.\n\
-FRAME-PART is one of the following symbols:\n\
- `vertical-scrollbar', `vertical-slider',\n\
- `vertical-thumbup', `vertical-thumbdown',\n\
- `horizontal-scrollbar', `horizontal-slider',\n\
- `horizontal-thumbleft', `horizontal-thumbright'");
- Vmouse_event = Qnil;
-
DEFVAR_LISP ("minibuffer-scroll-window", &Vminibuf_scroll_window,
"Non-nil means it is the window that C-M-v in minibuffer should scroll.");
Vminibuf_scroll_window = Qnil;
defsubr (&Sminibuffer_window);
defsubr (&Swindow_minibuffer_p);
defsubr (&Swindowp);
- defsubr (&Slive_window_p);
+ defsubr (&Swindow_live_p);
defsubr (&Spos_visible_in_window_p);
defsubr (&Swindow_buffer);
defsubr (&Swindow_height);