annotate src/window.c @ 1685:8d7fc70d3103

* window.c (Fset_window_configuration): If we're restoring the configuration of a dead frame, don't bother rebuilding its window tree, restoring its focus redirection, or temporarily resizing it to fit the saved window configuration. If the frame which was selected when the configuration was captured is now dead, don't try to select it. * frame.c (Fdelete_frame): Delete all the windows in the frame's window tree, using delete_all_subwindows. * window.c (delete_all_subwindows): Don't make this static anymore.
author Jim Blandy <jimb@redhat.com>
date Sat, 12 Dec 1992 15:38:45 +0000
parents 04c1b4719e60
children 95db936d47c0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1 /* Window creation, deletion and examination for GNU Emacs.
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2 Does not include redisplay.
708
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 681
diff changeset
3 Copyright (C) 1985, 1986, 1987, 1992 Free Software Foundation, Inc.
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5 This file is part of GNU Emacs.
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7 GNU Emacs is free software; you can redistribute it and/or modify
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8 it under the terms of the GNU General Public License as published by
708
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 681
diff changeset
9 the Free Software Foundation; either version 2, or (at your option)
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10 any later version.
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12 GNU Emacs is distributed in the hope that it will be useful,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
15 GNU General Public License for more details.
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
16
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
18 along with GNU Emacs; see the file COPYING. If not, write to
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
19 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
20
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
21 #include "config.h"
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
22 #include "lisp.h"
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
23 #include "buffer.h"
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
24 #include "frame.h"
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
25 #include "window.h"
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
26 #include "commands.h"
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
27 #include "indent.h"
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
28 #include "termchar.h"
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
29 #include "disptab.h"
522
bacdab90fa8b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
30 #include "keyboard.h"
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
31
1444
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
32 Lisp_Object Qwindowp, Qlive_window_p;
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
33
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
34 Lisp_Object Fnext_window (), Fdelete_window (), Fselect_window ();
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
35 Lisp_Object Fset_window_buffer (), Fsplit_window (), Frecenter ();
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
36
1685
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
37 void delete_all_subwindows ();
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
38 static struct window *decode_window();
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
39
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
40 /* This is the window in which the terminal's cursor should
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
41 be left when nothing is being done with it. This must
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
42 always be a leaf window, and its buffer is selected by
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
43 the top level editing loop at the end of each command.
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
44
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
45 This value is always the same as
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
46 FRAME_SELECTED_WINDOW (selected_frame). */
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
47
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
48 Lisp_Object selected_window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
49
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
50 /* The minibuffer window of the selected frame.
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
51 Note that you cannot test for minibufferness of an arbitrary window
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
52 by comparing against this; but you can test for minibufferness of
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
53 the selected window. */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
54 Lisp_Object minibuf_window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
55
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
56 /* Non-nil means it is the window for C-M-v to scroll
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
57 when the minibuffer is selected. */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
58 Lisp_Object Vminibuf_scroll_window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
59
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
60 /* Non-nil means this is the buffer whose window C-M-v should scroll. */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
61 Lisp_Object Vother_window_scroll_buffer;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
62
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
63 /* Window that the mouse is over (nil if no mouse support). */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
64 Lisp_Object Vmouse_window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
65
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
66 /* Last mouse click data structure (nil if no mouse support). */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
67 Lisp_Object Vmouse_event;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
68
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
69 /* Non-nil means it's function to call to display temp buffers. */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
70 Lisp_Object Vtemp_buffer_show_function;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
71
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
72 /* If a window gets smaller than either of these, it is removed. */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
73 int window_min_height;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
74 int window_min_width;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
75
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
76 /* Nonzero implies Fdisplay_buffer should create windows. */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
77 int pop_up_windows;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
78
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
79 /* Nonzero implies make new frames for Fdisplay_buffer. */
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
80 int pop_up_frames;
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
81
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
82 /* Non-nil means use this function instead of default */
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
83 Lisp_Object Vpop_up_frame_function;
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
84
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
85 /* Function to call to handle Fdisplay_buffer. */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
86 Lisp_Object Vdisplay_buffer_function;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
87
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
88 /* Fdisplay_buffer always splits the largest window
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
89 if that window is more than this high. */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
90 int split_height_threshold;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
91
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
92 /* Number of lines of continuity in scrolling by screenfuls. */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
93 int next_screen_context_lines;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
94
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
95 /* Incremented for each window created. */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
96 static int sequence_number;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
97
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
98 #define min(a, b) ((a) < (b) ? (a) : (b))
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
99
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
100 DEFUN ("windowp", Fwindowp, Swindowp, 1, 1, 0,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
101 "Returns t if OBJ is a window.")
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
102 (obj)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
103 Lisp_Object obj;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
104 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
105 return XTYPE (obj) == Lisp_Window ? Qt : Qnil;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
106 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
107
1444
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
108 DEFUN ("live-window-p", Flive_window_p, Slive_window_p, 1, 1, 0,
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
109 "Returns t if OBJ is a window which is currently visible.")
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
110 (obj)
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
111 Lisp_Object obj;
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
112 {
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
113 return ((XTYPE (obj) == Lisp_Window
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
114 && ! NILP (XWINDOW (obj)->buffer))
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
115 ? Qt : Qnil);
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
116 }
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
117
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
118 Lisp_Object
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
119 make_window ()
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
120 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
121 register Lisp_Object val;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
122 register struct window *p;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
123
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
124 /* Add sizeof (Lisp_Object) here because sizeof (struct Lisp_Vector)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
125 includes the first element. */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
126 val = Fmake_vector (
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
127 make_number ((sizeof (struct window) - sizeof (struct Lisp_Vector)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
128 + sizeof (Lisp_Object))
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
129 / sizeof (Lisp_Object)),
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
130 Qnil);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
131 XSETTYPE (val, Lisp_Window);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
132 p = XWINDOW (val);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
133 XFASTINT (p->sequence_number) = ++sequence_number;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
134 XFASTINT (p->left) = XFASTINT (p->top)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
135 = XFASTINT (p->height) = XFASTINT (p->width)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
136 = XFASTINT (p->hscroll) = 0;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
137 XFASTINT (p->last_point_x) = XFASTINT (p->last_point_y) = 0;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
138 p->start = Fmake_marker ();
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
139 p->pointm = Fmake_marker ();
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
140 XFASTINT (p->use_time) = 0;
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
141 p->frame = Qnil;
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
142 p->display_table = Qnil;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
143 p->dedicated = Qnil;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
144 return val;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
145 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
146
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
147 DEFUN ("selected-window", Fselected_window, Sselected_window, 0, 0, 0,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
148 "Return the window that the cursor now appears in and commands apply to.")
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
149 ()
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
150 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
151 return selected_window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
152 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
153
1123
55e605674fb1 * window.c (minibuffer_window): Accept an optional FRAME argument;
Jim Blandy <jimb@redhat.com>
parents: 1049
diff changeset
154 DEFUN ("minibuffer-window", Fminibuffer_window, Sminibuffer_window, 0, 1, 0,
55e605674fb1 * window.c (minibuffer_window): Accept an optional FRAME argument;
Jim Blandy <jimb@redhat.com>
parents: 1049
diff changeset
155 "Return the window used now for minibuffers.\n\
55e605674fb1 * window.c (minibuffer_window): Accept an optional FRAME argument;
Jim Blandy <jimb@redhat.com>
parents: 1049
diff changeset
156 If the optional argument FRAME is specified, return the minibuffer window\n\
55e605674fb1 * window.c (minibuffer_window): Accept an optional FRAME argument;
Jim Blandy <jimb@redhat.com>
parents: 1049
diff changeset
157 used by that frame.")
55e605674fb1 * window.c (minibuffer_window): Accept an optional FRAME argument;
Jim Blandy <jimb@redhat.com>
parents: 1049
diff changeset
158 (frame)
55e605674fb1 * window.c (minibuffer_window): Accept an optional FRAME argument;
Jim Blandy <jimb@redhat.com>
parents: 1049
diff changeset
159 Lisp_Object frame;
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
160 {
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
161 #ifdef MULTI_FRAME
1123
55e605674fb1 * window.c (minibuffer_window): Accept an optional FRAME argument;
Jim Blandy <jimb@redhat.com>
parents: 1049
diff changeset
162 if (NILP (frame))
55e605674fb1 * window.c (minibuffer_window): Accept an optional FRAME argument;
Jim Blandy <jimb@redhat.com>
parents: 1049
diff changeset
163 XSET (frame, Lisp_Frame, selected_frame);
55e605674fb1 * window.c (minibuffer_window): Accept an optional FRAME argument;
Jim Blandy <jimb@redhat.com>
parents: 1049
diff changeset
164 else
55e605674fb1 * window.c (minibuffer_window): Accept an optional FRAME argument;
Jim Blandy <jimb@redhat.com>
parents: 1049
diff changeset
165 CHECK_LIVE_FRAME (frame, 0);
55e605674fb1 * window.c (minibuffer_window): Accept an optional FRAME argument;
Jim Blandy <jimb@redhat.com>
parents: 1049
diff changeset
166 #endif
55e605674fb1 * window.c (minibuffer_window): Accept an optional FRAME argument;
Jim Blandy <jimb@redhat.com>
parents: 1049
diff changeset
167
55e605674fb1 * window.c (minibuffer_window): Accept an optional FRAME argument;
Jim Blandy <jimb@redhat.com>
parents: 1049
diff changeset
168 return FRAME_MINIBUF_WINDOW (XFRAME (frame));
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
169 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
170
1444
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
171 DEFUN ("window-minibuffer-p", Fwindow_minibuffer_p, Swindow_minibuffer_p, 0, 1, 0,
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
172 "Returns non-nil if WINDOW is a minibuffer window.")
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
173 (window)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
174 Lisp_Object window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
175 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
176 struct window *w = decode_window (window);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
177 return (MINI_WINDOW_P (w) ? Qt : Qnil);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
178 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
179
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
180 DEFUN ("pos-visible-in-window-p", Fpos_visible_in_window_p,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
181 Spos_visible_in_window_p, 0, 2, 0,
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
182 "Return t if position POS is currently on the frame in WINDOW.\n\
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
183 Returns nil if that position is scrolled vertically out of view.\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
184 POS defaults to point; WINDOW, to the selected window.")
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
185 (pos, window)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
186 Lisp_Object pos, window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
187 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
188 register struct window *w;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
189 register int top;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
190 register int height;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
191 register int posint;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
192 register struct buffer *buf;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
193 struct position posval;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
194
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
195 if (NILP (pos))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
196 posint = point;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
197 else
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
198 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
199 CHECK_NUMBER_COERCE_MARKER (pos, 0);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
200 posint = XINT (pos);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
201 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
202
1444
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
203 w = decode_window (window);
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
204 top = marker_position (w->start);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
205
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
206 if (posint < top)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
207 return Qnil;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
208
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
209 height = XFASTINT (w->height) - ! MINI_WINDOW_P (w);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
210
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
211 buf = XBUFFER (w->buffer);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
212 if (XFASTINT (w->last_modified) >= BUF_MODIFF (buf))
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
213 {
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
214 /* If frame is up to date,
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
215 use the info recorded about how much text fit on it. */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
216 if (posint < BUF_Z (buf) - XFASTINT (w->window_end_pos)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
217 || (XFASTINT (w->window_end_vpos) < height))
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
218 return Qt;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
219 return Qnil;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
220 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
221 else
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
222 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
223 if (posint > BUF_Z (buf))
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
224 return Qnil;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
225
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
226 /* If that info is not correct, calculate afresh */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
227 posval = *compute_motion (top, 0, 0, posint, height, 0,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
228 XFASTINT (w->width) - 1
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
229 - (XFASTINT (w->width) + XFASTINT (w->left)
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
230 != FRAME_WIDTH (XFRAME (w->frame))),
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
231 XINT (w->hscroll), 0);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
232
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
233 return posval.vpos < height ? Qt : Qnil;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
234 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
235 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
236
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
237 static struct window *
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
238 decode_window (window)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
239 register Lisp_Object window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
240 {
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
241 if (NILP (window))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
242 return XWINDOW (selected_window);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
243
1444
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
244 CHECK_LIVE_WINDOW (window, 0);
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
245 return XWINDOW (window);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
246 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
247
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
248 DEFUN ("window-buffer", Fwindow_buffer, Swindow_buffer, 0, 1, 0,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
249 "Return the buffer that WINDOW is displaying.")
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
250 (window)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
251 Lisp_Object window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
252 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
253 return decode_window (window)->buffer;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
254 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
255
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
256 DEFUN ("window-height", Fwindow_height, Swindow_height, 0, 1, 0,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
257 "Return the number of lines in WINDOW (including its mode line).")
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
258 (window)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
259 Lisp_Object window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
260 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
261 return decode_window (window)->height;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
262 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
263
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
264 DEFUN ("window-width", Fwindow_width, Swindow_width, 0, 1, 0,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
265 "Return the number of columns in WINDOW.")
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
266 (window)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
267 Lisp_Object window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
268 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
269 register struct window *w = decode_window (window);
1525
f79a22ad87d0 * window.c (Fwindow_width, Fset_window_hscroll): Use accessors on
Jim Blandy <jimb@redhat.com>
parents: 1444
diff changeset
270 register int width = XFASTINT (w->width);
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
271
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
272 /* If this window does not end at the right margin,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
273 must deduct one column for the border */
1525
f79a22ad87d0 * window.c (Fwindow_width, Fset_window_hscroll): Use accessors on
Jim Blandy <jimb@redhat.com>
parents: 1444
diff changeset
274 if ((width + XFASTINT (w->left)) == FRAME_WIDTH (XFRAME (WINDOW_FRAME (w))))
f79a22ad87d0 * window.c (Fwindow_width, Fset_window_hscroll): Use accessors on
Jim Blandy <jimb@redhat.com>
parents: 1444
diff changeset
275 return make_number (width);
f79a22ad87d0 * window.c (Fwindow_width, Fset_window_hscroll): Use accessors on
Jim Blandy <jimb@redhat.com>
parents: 1444
diff changeset
276 return make_number (width - 1);
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
277 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
278
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
279 DEFUN ("window-hscroll", Fwindow_hscroll, Swindow_hscroll, 0, 1, 0,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
280 "Return the number of columns by which WINDOW is scrolled from left margin.")
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
281 (window)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
282 Lisp_Object window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
283 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
284 return decode_window (window)->hscroll;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
285 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
286
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
287 DEFUN ("set-window-hscroll", Fset_window_hscroll, Sset_window_hscroll, 2, 2, 0,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
288 "Set number of columns WINDOW is scrolled from left margin to NCOL.\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
289 NCOL should be zero or positive.")
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
290 (window, ncol)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
291 register Lisp_Object window, ncol;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
292 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
293 register struct window *w;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
294
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
295 CHECK_NUMBER (ncol, 1);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
296 if (XINT (ncol) < 0) XFASTINT (ncol) = 0;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
297 if (XFASTINT (ncol) >= (1 << (SHORTBITS - 1)))
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
298 args_out_of_range (ncol, Qnil);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
299 w = decode_window (window);
1525
f79a22ad87d0 * window.c (Fwindow_width, Fset_window_hscroll): Use accessors on
Jim Blandy <jimb@redhat.com>
parents: 1444
diff changeset
300 if (XINT (w->hscroll) != XINT (ncol))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
301 clip_changed = 1; /* Prevent redisplay shortcuts */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
302 w->hscroll = ncol;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
303 return ncol;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
304 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
305
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
306 DEFUN ("window-edges", Fwindow_edges, Swindow_edges, 0, 1, 0,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
307 "Return a list of the edge coordinates of WINDOW.\n\
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
308 \(LEFT TOP RIGHT BOTTOM), all relative to 0, 0 at top left corner of frame.\n\
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
309 RIGHT is one more than the rightmost column used by WINDOW,\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
310 and BOTTOM is one more than the bottommost row used by WINDOW\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
311 and its mode-line.")
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
312 (window)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
313 Lisp_Object window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
314 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
315 register struct window *w = decode_window (window);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
316
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
317 return Fcons (w->left, Fcons (w->top,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
318 Fcons (make_number (XFASTINT (w->left) + XFASTINT (w->width)),
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
319 Fcons (make_number (XFASTINT (w->top)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
320 + XFASTINT (w->height)),
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
321 Qnil))));
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
322 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
323
432
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
324 /* Test if the character at column *x, row *y is within window *w.
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
325 If it is not, return 0;
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
326 if it is in the window's text area,
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
327 set *x and *y to its location relative to the upper left corner
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
328 of the window, and
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
329 return 1;
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
330 if it is on the window's modeline, return 2;
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
331 if it is on the border between the window and its right sibling,
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
332 return 3. */
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
333 static int
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
334 coordinates_in_window (w, x, y)
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
335 register struct window *w;
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
336 register int *x, *y;
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
337 {
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
338 register int left = XINT (w->left);
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
339 register int width = XINT (w->width);
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
340 register int window_height = XINT (w->height);
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
341 register int top = XFASTINT (w->top);
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
342
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
343 if ( *x < left || *x >= left + width
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
344 || *y < top || *y >= top + window_height)
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
345 return 0;
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
346
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
347 /* Is the character is the mode line? */
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
348 if (*y == top + window_height - 1
1049
25046e48ce9a * window.c (coordinates_in_window): Do not assume that all
Jim Blandy <jimb@redhat.com>
parents: 1016
diff changeset
349 && ! MINI_WINDOW_P (w))
432
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
350 return 2;
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
351
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
352 /* Is the character in the right border? */
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
353 if (*x == left + width - 1
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
354 && left + width != FRAME_WIDTH (XFRAME (w->frame)))
432
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
355 return 3;
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
356
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
357 *x -= left;
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
358 *y -= top;
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
359 return 1;
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
360 }
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
361
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
362 DEFUN ("coordinates-in-window-p", Fcoordinates_in_window_p,
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
363 Scoordinates_in_window_p, 2, 2, 0,
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
364 "Return non-nil if COORDINATES are in WINDOW.\n\
708
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 681
diff changeset
365 COORDINATES is a cons of the form (X . Y), X and Y being distances\n\
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
366 measured in characters from the upper-left corner of the frame.\n\
708
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 681
diff changeset
367 (0 . 0) denotes the character in the upper left corner of the\n\
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
368 frame.\n\
432
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
369 If COORDINATES are in the text portion of WINDOW,\n\
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
370 the coordinates relative to the window are returned.\n\
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 722
diff changeset
371 If they are in the mode line of WINDOW, `mode-line' is returned.\n\
432
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
372 If they are on the border between WINDOW and its right sibling,\n\
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 722
diff changeset
373 `vertical-line' is returned.")
432
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
374 (coordinates, window)
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
375 register Lisp_Object coordinates, window;
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
376 {
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
377 int x, y;
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
378
1444
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
379 CHECK_LIVE_WINDOW (window, 0);
432
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
380 CHECK_CONS (coordinates, 1);
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
381 x = XINT (Fcar (coordinates));
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
382 y = XINT (Fcdr (coordinates));
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
383
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
384 switch (coordinates_in_window (XWINDOW (window), &x, &y))
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
385 {
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
386 case 0: /* NOT in window at all. */
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
387 return Qnil;
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
388
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
389 case 1: /* In text part of window. */
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
390 return Fcons (x, y);
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
391
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
392 case 2: /* In mode line of window. */
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
393 return Qmode_line;
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
394
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
395 case 3: /* On right border of window. */
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 722
diff changeset
396 return Qvertical_line;
432
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
397
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
398 default:
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
399 abort ();
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
400 }
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
401 }
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
402
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
403 /* Find the window containing column x, row y, and return it as a
432
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
404 Lisp_Object. If x, y is on the window's modeline, set *part
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
405 to 1; if it is on the separating line between the window and its
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
406 right sibling, set it to 2; otherwise set it to 0. If there is no
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
407 window under x, y return nil and leave *part unmodified. */
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
408 Lisp_Object
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
409 window_from_coordinates (frame, x, y, part)
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
410 FRAME_PTR frame;
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
411 int x, y;
432
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
412 int *part;
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
413 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
414 register Lisp_Object tem, first;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
415
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
416 tem = first = FRAME_SELECTED_WINDOW (frame);
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
417
432
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
418 do
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
419 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
420 int found = coordinates_in_window (XWINDOW (tem), &x, &y);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
421
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
422 if (found)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
423 {
432
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
424 *part = found - 1;
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
425 return tem;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
426 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
427
432
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
428 tem = Fnext_window (tem, Qt, Qlambda);
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
429 }
432
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
430 while (! EQ (tem, first));
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
431
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
432 return Qnil;
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
433 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
434
681
026f978690be *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 555
diff changeset
435 DEFUN ("window-at", Fwindow_at, Swindow_at, 2, 3, 0,
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
436 "Return window containing row ROW, column COLUMN on FRAME.\n\
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
437 If omitted, FRAME defaults to the currently selected frame.\n\
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
438 The top left corner of the frame is considered to be row 0,\n\
548
a7b7b759f694 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 522
diff changeset
439 column 0.")
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
440 (row, column, frame)
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
441 Lisp_Object row, column, frame;
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
442 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
443 int part;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
444
983
eb19dfaec9c4 * window.c (window_loop): This used to keep track of the first
Jim Blandy <jimb@redhat.com>
parents: 972
diff changeset
445 #ifdef MULTI_FRAME
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
446 if (NILP (frame))
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
447 XSET (frame, Lisp_Frame, selected_frame);
432
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
448 else
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
449 CHECK_LIVE_FRAME (frame, 2);
983
eb19dfaec9c4 * window.c (window_loop): This used to keep track of the first
Jim Blandy <jimb@redhat.com>
parents: 972
diff changeset
450 #endif
548
a7b7b759f694 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 522
diff changeset
451 CHECK_NUMBER (row, 0);
a7b7b759f694 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 522
diff changeset
452 CHECK_NUMBER (column, 1);
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
453
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
454 return window_from_coordinates (XFRAME (frame),
548
a7b7b759f694 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 522
diff changeset
455 XINT (row), XINT (column),
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
456 &part);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
457 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
458
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
459 DEFUN ("window-point", Fwindow_point, Swindow_point, 0, 1, 0,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
460 "Return current value of point in WINDOW.\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
461 For a nonselected window, this is the value point would have\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
462 if that window were selected.\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
463 \n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
464 Note that, when WINDOW is the selected window and its buffer\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
465 is also currently selected, the value returned is the same as (point).\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
466 It would be more strictly correct to return the `top-level' value\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
467 of point, outside of any save-excursion forms.\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
468 But that is hard to define.")
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
469 (window)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
470 Lisp_Object window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
471 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
472 register struct window *w = decode_window (window);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
473
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
474 if (w == XWINDOW (selected_window)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
475 && current_buffer == XBUFFER (w->buffer))
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
476 return Fpoint ();
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
477 return Fmarker_position (w->pointm);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
478 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
479
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
480 DEFUN ("window-start", Fwindow_start, Swindow_start, 0, 1, 0,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
481 "Return position at which display currently starts in WINDOW.")
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
482 (window)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
483 Lisp_Object window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
484 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
485 return Fmarker_position (decode_window (window)->start);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
486 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
487
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
488 DEFUN ("window-end", Fwindow_end, Swindow_end, 0, 1, 0,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
489 "Return position at which display currently ends in WINDOW.")
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
490 (window)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
491 Lisp_Object window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
492 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
493 Lisp_Object value;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
494 struct window *w = decode_window (window);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
495
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
496 XSET (value, Lisp_Int,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
497 BUF_Z (current_buffer) - XFASTINT (w->window_end_pos));
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
498
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
499 return value;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
500 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
501
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
502 DEFUN ("set-window-point", Fset_window_point, Sset_window_point, 2, 2, 0,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
503 "Make point value in WINDOW be at position POS in WINDOW's buffer.")
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
504 (window, pos)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
505 Lisp_Object window, pos;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
506 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
507 register struct window *w = decode_window (window);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
508
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
509 CHECK_NUMBER_COERCE_MARKER (pos, 1);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
510 if (w == XWINDOW (selected_window))
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
511 Fgoto_char (pos);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
512 else
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
513 set_marker_restricted (w->pointm, pos, w->buffer);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
514
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
515 return pos;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
516 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
517
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
518 DEFUN ("set-window-start", Fset_window_start, Sset_window_start, 2, 3, 0,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
519 "Make display in WINDOW start at position POS in WINDOW's buffer.\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
520 Optional third arg NOFORCE non-nil inhibits next redisplay\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
521 from overriding motion of point in order to display at this exact start.")
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
522 (window, pos, noforce)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
523 Lisp_Object window, pos, noforce;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
524 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
525 register struct window *w = decode_window (window);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
526
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
527 CHECK_NUMBER_COERCE_MARKER (pos, 1);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
528 set_marker_restricted (w->start, pos, w->buffer);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
529 /* this is not right, but much easier than doing what is right. */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
530 w->start_at_line_beg = Qnil;
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
531 if (NILP (noforce))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
532 w->force_start = Qt;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
533 w->update_mode_line = Qt;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
534 XFASTINT (w->last_modified) = 0;
338
4840aae6a876 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 265
diff changeset
535 if (!EQ (window, selected_window))
4840aae6a876 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 265
diff changeset
536 windows_or_buffers_changed++;
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
537 return pos;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
538 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
539
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
540 DEFUN ("window-dedicated-p", Fwindow_dedicated_p, Swindow_dedicated_p,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
541 1, 1, 0,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
542 "Return WINDOW's dedicated object, usually t or nil.\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
543 See also `set-window-buffer-dedicated'.")
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
544 (window)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
545 Lisp_Object window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
546 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
547 return decode_window (window)->dedicated;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
548 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
549
722
0a2391511b46 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 708
diff changeset
550 DEFUN ("set-window-dedicated-p", Fset_window_dedicated_p,
0a2391511b46 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 708
diff changeset
551 Sset_window_dedicated_p, 2, 2, 0,
0a2391511b46 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 708
diff changeset
552 "Control whether WINDOW is dedicated to the buffer it displays.\n\
0a2391511b46 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 708
diff changeset
553 If it is dedicated, Emacs will not automatically change\n\
0a2391511b46 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 708
diff changeset
554 which buffer appears in it.\n\
0a2391511b46 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 708
diff changeset
555 The second argument is the new value for the dedication flag;\n\
0a2391511b46 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 708
diff changeset
556 non-nil means yes.")
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
557 (window, arg)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
558 Lisp_Object window, arg;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
559 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
560 register struct window *w = decode_window (window);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
561
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
562 if (NILP (arg))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
563 w->dedicated = Qnil;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
564 else
722
0a2391511b46 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 708
diff changeset
565 w->dedicated = Qt;
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
566
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
567 return w->dedicated;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
568 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
569
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
570 DEFUN ("window-display-table", Fwindow_display_table, Swindow_display_table,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
571 0, 1, 0,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
572 "Return the display-table that WINDOW is using.")
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
573 (window)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
574 Lisp_Object window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
575 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
576 return decode_window (window)->display_table;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
577 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
578
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
579 /* Get the display table for use currently on window W.
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
580 This is either W's display table or W's buffer's display table.
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
581 Ignore the specified tables if they are not valid;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
582 if no valid table is specified, return 0. */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
583
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
584 struct Lisp_Vector *
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
585 window_display_table (w)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
586 struct window *w;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
587 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
588 Lisp_Object tem;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
589 tem = w->display_table;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
590 if (XTYPE (tem) == Lisp_Vector && XVECTOR (tem)->size == DISP_TABLE_SIZE)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
591 return XVECTOR (tem);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
592 tem = XBUFFER (w->buffer)->display_table;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
593 if (XTYPE (tem) == Lisp_Vector && XVECTOR (tem)->size == DISP_TABLE_SIZE)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
594 return XVECTOR (tem);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
595 tem = Vstandard_display_table;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
596 if (XTYPE (tem) == Lisp_Vector && XVECTOR (tem)->size == DISP_TABLE_SIZE)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
597 return XVECTOR (tem);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
598 return 0;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
599 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
600
555
e09a318cf838 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 548
diff changeset
601 DEFUN ("set-window-display-table", Fset_window_display_table, Sset_window_display_table, 2, 2, 0,
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
602 "Set WINDOW's display-table to TABLE.")
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
603 (window, table)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
604 register Lisp_Object window, table;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
605 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
606 register struct window *w;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
607 register Lisp_Object z; /* Return value. */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
608
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
609 w = decode_window (window);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
610 w->display_table = table;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
611 return table;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
612 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
613
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
614 /* Record info on buffer window w is displaying
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
615 when it is about to cease to display that buffer. */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
616 static
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
617 unshow_buffer (w)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
618 register struct window *w;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
619 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
620 Lisp_Object buf = w->buffer;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
621
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
622 if (XBUFFER (buf) != XMARKER (w->pointm)->buffer)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
623 abort ();
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
624
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
625 if (w == XWINDOW (selected_window)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
626 || ! EQ (buf, XWINDOW (selected_window)->buffer))
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
627 /* Do this except when the selected window's buffer
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
628 is being removed from some other window. */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
629 XBUFFER (buf)->last_window_start = marker_position (w->start);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
630
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
631 /* Point in the selected window's buffer
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
632 is actually stored in that buffer, and the window's pointm isn't used.
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
633 So don't clobber point in that buffer. */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
634 if (! EQ (buf, XWINDOW (selected_window)->buffer))
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
635 BUF_PT (XBUFFER (buf))
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
636 = clip_to_bounds (BUF_BEGV (XBUFFER (buf)),
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
637 marker_position (w->pointm),
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
638 BUF_ZV (XBUFFER (buf)));
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
639 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
640
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
641 /* Put replacement into the window structure in place of old. */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
642 static
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
643 replace_window (old, replacement)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
644 Lisp_Object old, replacement;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
645 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
646 register Lisp_Object tem;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
647 register struct window *o = XWINDOW (old), *p = XWINDOW (replacement);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
648
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
649 /* If OLD is its frame's root_window, then replacement is the new
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
650 root_window for that frame. */
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
651
1525
f79a22ad87d0 * window.c (Fwindow_width, Fset_window_hscroll): Use accessors on
Jim Blandy <jimb@redhat.com>
parents: 1444
diff changeset
652 if (EQ (old, FRAME_ROOT_WINDOW (XFRAME (o->frame))))
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
653 FRAME_ROOT_WINDOW (XFRAME (o->frame)) = replacement;
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
654
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
655 p->left = o->left;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
656 p->top = o->top;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
657 p->width = o->width;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
658 p->height = o->height;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
659
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
660 p->next = tem = o->next;
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
661 if (!NILP (tem))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
662 XWINDOW (tem)->prev = replacement;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
663
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
664 p->prev = tem = o->prev;
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
665 if (!NILP (tem))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
666 XWINDOW (tem)->next = replacement;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
667
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
668 p->parent = tem = o->parent;
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
669 if (!NILP (tem))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
670 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
671 if (EQ (XWINDOW (tem)->vchild, old))
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
672 XWINDOW (tem)->vchild = replacement;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
673 if (EQ (XWINDOW (tem)->hchild, old))
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
674 XWINDOW (tem)->hchild = replacement;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
675 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
676
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
677 /*** Here, if replacement is a vertical combination
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
678 and so is its new parent, we should make replacement's
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
679 children be children of that parent instead. ***/
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
680 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
681
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
682 DEFUN ("delete-window", Fdelete_window, Sdelete_window, 0, 1, "",
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
683 "Remove WINDOW from the display. Default is selected window.")
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
684 (window)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
685 register Lisp_Object window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
686 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
687 register Lisp_Object tem, parent, sib;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
688 register struct window *p;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
689 register struct window *par;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
690
1444
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
691 /* Because this function is called by other C code on non-leaf
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
692 windows, the CHECK_LIVE_WINDOW macro would choke inappropriately,
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
693 so we can't decode_window here. */
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
694 if (NILP (window))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
695 window = selected_window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
696 else
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
697 CHECK_WINDOW (window, 0);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
698 p = XWINDOW (window);
1444
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
699
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
700 /* It's okay to delete an already-deleted window. */
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
701 if (NILP (p->buffer)
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
702 && NILP (p->hchild)
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
703 && NILP (p->vchild))
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
704 return Qnil;
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
705
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
706 parent = p->parent;
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
707 if (NILP (parent))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
708 error ("Attempt to delete minibuffer or sole ordinary window");
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
709 par = XWINDOW (parent);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
710
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
711 windows_or_buffers_changed++;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
712
1444
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
713 /* Are we trying to delete any frame's selected window? */
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
714 {
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
715 Lisp_Object frame = WINDOW_FRAME (XWINDOW (window));
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
716
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
717 if (EQ (window, FRAME_SELECTED_WINDOW (XFRAME (frame))))
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
718 {
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
719 Lisp_Object alternative = Fnext_window (window, Qlambda, Qnil);
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
720
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
721 /* If we're about to delete the selected window on the
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
722 selected frame, then we should use Fselect_window to select
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
723 the new window. On the other hand, if we're about to
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
724 delete the selected window on any other frame, we shouldn't do
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
725 anything but set the frame's selected_window slot. */
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
726 if (EQ (window, selected_window))
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
727 Fselect_window (alternative);
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
728 else
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
729 FRAME_SELECTED_WINDOW (XFRAME (frame)) = alternative;
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
730 }
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
731 }
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
732
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
733 tem = p->buffer;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
734 /* tem is null for dummy parent windows
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
735 (which have inferiors but not any contents themselves) */
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
736 if (!NILP (tem))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
737 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
738 unshow_buffer (p);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
739 unchain_marker (p->pointm);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
740 unchain_marker (p->start);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
741 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
742
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
743 tem = p->next;
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
744 if (!NILP (tem))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
745 XWINDOW (tem)->prev = p->prev;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
746
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
747 tem = p->prev;
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
748 if (!NILP (tem))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
749 XWINDOW (tem)->next = p->next;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
750
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
751 if (EQ (window, par->hchild))
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
752 par->hchild = p->next;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
753 if (EQ (window, par->vchild))
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
754 par->vchild = p->next;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
755
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
756 /* Find one of our siblings to give our space to. */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
757 sib = p->prev;
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
758 if (NILP (sib))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
759 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
760 /* If p gives its space to its next sibling, that sibling needs
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
761 to have its top/left side pulled back to where p's is.
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
762 set_window_{height,width} will re-position the sibling's
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
763 children. */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
764 sib = p->next;
1525
f79a22ad87d0 * window.c (Fwindow_width, Fset_window_hscroll): Use accessors on
Jim Blandy <jimb@redhat.com>
parents: 1444
diff changeset
765 XWINDOW (sib)->top = p->top;
f79a22ad87d0 * window.c (Fwindow_width, Fset_window_hscroll): Use accessors on
Jim Blandy <jimb@redhat.com>
parents: 1444
diff changeset
766 XWINDOW (sib)->left = p->left;
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
767 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
768
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
769 /* Stretch that sibling. */
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
770 if (!NILP (par->vchild))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
771 set_window_height (sib,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
772 XFASTINT (XWINDOW (sib)->height) + XFASTINT (p->height),
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
773 1);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
774 if (!NILP (par->hchild))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
775 set_window_width (sib,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
776 XFASTINT (XWINDOW (sib)->width) + XFASTINT (p->width),
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
777 1);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
778
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
779 /* If parent now has only one child,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
780 put the child into the parent's place. */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
781 tem = par->hchild;
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
782 if (NILP (tem))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
783 tem = par->vchild;
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
784 if (NILP (XWINDOW (tem)->next))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
785 replace_window (parent, tem);
1444
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
786
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
787 /* Since we may be deleting combination windows, we must make sure that
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
788 not only p but all its children have been marked as deleted. */
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
789 if (! NILP (p->hchild))
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
790 delete_all_subwindows (XWINDOW (p->hchild));
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
791 else if (! NILP (p->vchild))
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
792 delete_all_subwindows (XWINDOW (p->vchild));
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
793
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
794 /* Mark this window as deleted. */
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
795 p->buffer = p->hchild = p->vchild = Qnil;
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
796
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
797 return Qnil;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
798 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
799
432
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
800
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
801 extern Lisp_Object next_frame (), prev_frame ();
432
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
802
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
803 DEFUN ("next-window", Fnext_window, Snext_window, 0, 3, 0,
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
804 "Return next window after WINDOW in canonical ordering of windows.\n\
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
805 If omitted, WINDOW defaults to the selected window.\n\
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
806 \n\
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
807 Optional second arg MINIBUF t means count the minibuffer window even\n\
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
808 if not active. MINIBUF nil or omitted means count the minibuffer iff\n\
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
809 it is active. MINIBUF neither t nor nil means not to count the\n\
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
810 minibuffer even if it is active.\n\
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
811 \n\
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
812 Several frames may share a single minibuffer; if the minibuffer\n\
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
813 counts, all windows on all frames that share that minibuffer count\n\
432
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
814 too. This means that next-window may be used to iterate through the\n\
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
815 set of windows even when the minibuffer is on another frame. If the\n\
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
816 minibuffer does not count, only windows from WINDOW's frame count.\n\
432
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
817 \n\
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
818 Optional third arg ALL-FRAMES t means include windows on all frames.\n\
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
819 ALL-FRAMES nil or omitted means cycle within the frames as specified\n\
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
820 above. If neither nil nor t, restrict to WINDOW's frame.")
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
821 (window, minibuf, all_frames)
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
822 register Lisp_Object window, minibuf, all_frames;
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
823 {
432
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
824 register Lisp_Object tem;
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
825 Lisp_Object start_window;
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
826
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
827 if (NILP (window))
432
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
828 window = selected_window;
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
829 else
1444
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
830 CHECK_LIVE_WINDOW (window, 0);
432
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
831
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
832 start_window = window;
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
833
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
834 /* minibuf == nil may or may not include minibuffers.
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
835 Decide if it does. */
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
836 if (NILP (minibuf))
432
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
837 minibuf = (minibuf_level ? Qt : Qlambda);
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
838
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
839 /* all_frames == nil doesn't specify which frames to include.
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
840 Decide which frames it includes. */
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
841 if (NILP (all_frames))
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
842 all_frames = (EQ (minibuf, Qt)
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
843 ? (FRAME_MINIBUF_WINDOW
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
844 (XFRAME
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
845 (WINDOW_FRAME
432
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
846 (XWINDOW (window)))))
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
847 : Qnil);
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
848 else if (! EQ (all_frames, Qt))
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
849 all_frames = Qnil;
432
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
850
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
851 /* Do this loop at least once, to get the next window, and perhaps
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
852 again, if we hit the minibuffer and that is not acceptable. */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
853 do
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
854 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
855 /* Find a window that actually has a next one. This loop
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
856 climbs up the tree. */
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
857 while (tem = XWINDOW (window)->next, NILP (tem))
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
858 if (tem = XWINDOW (window)->parent, !NILP (tem))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
859 window = tem;
432
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
860 else
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
861 {
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
862 /* We've reached the end of this frame.
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
863 Which other frames are acceptable? */
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
864 tem = WINDOW_FRAME (XWINDOW (window));
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
865 #ifdef MULTI_FRAME
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
866 if (! NILP (all_frames))
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
867 tem = next_frame (tem, all_frames);
432
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
868 #endif
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
869 tem = FRAME_ROOT_WINDOW (XFRAME (tem));
432
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
870
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
871 break;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
872 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
873
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
874 window = tem;
432
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
875
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
876 /* If we're in a combination window, find its first child and
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
877 recurse on that. Otherwise, we've found the window we want. */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
878 while (1)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
879 {
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
880 if (!NILP (XWINDOW (window)->hchild))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
881 window = XWINDOW (window)->hchild;
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
882 else if (!NILP (XWINDOW (window)->vchild))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
883 window = XWINDOW (window)->vchild;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
884 else break;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
885 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
886 }
432
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
887 /* Which windows are acceptible?
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
888 Exit the loop and accept this window if
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
889 this isn't a minibuffer window, or
432
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
890 we're accepting minibuffer windows, or
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
891 we've come all the way around and we're back at the original window. */
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
892 while (MINI_WINDOW_P (XWINDOW (window))
432
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
893 && ! EQ (minibuf, Qt)
1525
f79a22ad87d0 * window.c (Fwindow_width, Fset_window_hscroll): Use accessors on
Jim Blandy <jimb@redhat.com>
parents: 1444
diff changeset
894 && ! EQ (window, start_window));
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
895
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
896 return window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
897 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
898
432
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
899 DEFUN ("previous-window", Fprevious_window, Sprevious_window, 0, 3, 0,
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
900 "Return the window preceeding WINDOW in canonical ordering of windows.\n\
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
901 If omitted, WINDOW defaults to the selected window.\n\
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
902 \n\
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
903 Optional second arg MINIBUF t means count the minibuffer window even\n\
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
904 if not active. MINIBUF nil or omitted means count the minibuffer iff\n\
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
905 it is active. MINIBUF neither t nor nil means not to count the\n\
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
906 minibuffer even if it is active.\n\
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
907 \n\
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
908 Several frames may share a single minibuffer; if the minibuffer\n\
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
909 counts, all windows on all frames that share that minibuffer count\n\
432
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
910 too. This means that previous-window may be used to iterate through\n\
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
911 the set of windows even when the minibuffer is on another frame. If\n\
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
912 the minibuffer does not count, only windows from WINDOW's frame\n\
432
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
913 count.\n\
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
914 \n\
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
915 Optional third arg ALL-FRAMES t means include windows on all frames.\n\
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
916 ALL-FRAMES nil or omitted means cycle within the frames as specified\n\
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
917 above. If neither nil nor t, restrict to WINDOW's frame.")
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
918 (window, minibuf, all_frames)
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
919 register Lisp_Object window, minibuf, all_frames;
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
920 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
921 register Lisp_Object tem;
432
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
922 Lisp_Object start_window;
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
923
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
924 if (NILP (window))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
925 window = selected_window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
926 else
1444
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
927 CHECK_LIVE_WINDOW (window, 0);
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
928
432
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
929 start_window = window;
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
930
432
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
931 /* minibuf == nil may or may not include minibuffers.
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
932 Decide if it does. */
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
933 if (NILP (minibuf))
432
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
934 minibuf = (minibuf_level ? Qt : Qlambda);
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
935
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
936 /* all_frames == nil doesn't specify which frames to include.
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
937 Decide which frames it includes. */
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
938 if (NILP (all_frames))
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
939 all_frames = (EQ (minibuf, Qt)
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
940 ? (FRAME_MINIBUF_WINDOW
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
941 (XFRAME
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
942 (WINDOW_FRAME
432
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
943 (XWINDOW (window)))))
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
944 : Qnil);
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
945 else if (! EQ (all_frames, Qt))
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
946 all_frames = Qnil;
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
947
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
948 /* Do this loop at least once, to get the previous window, and perhaps
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
949 again, if we hit the minibuffer and that is not acceptable. */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
950 do
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
951 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
952 /* Find a window that actually has a previous one. This loop
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
953 climbs up the tree. */
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
954 while (tem = XWINDOW (window)->prev, NILP (tem))
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
955 if (tem = XWINDOW (window)->parent, !NILP (tem))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
956 window = tem;
432
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
957 else
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
958 {
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
959 /* We have found the top window on the frame.
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
960 Which frames are acceptable? */
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
961 tem = WINDOW_FRAME (XWINDOW (window));
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
962 #ifdef MULTI_FRAME
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
963 if (! NILP (all_frames))
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
964 tem = next_frame (tem, all_frames);
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
965 #endif
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
966 tem = FRAME_ROOT_WINDOW (XFRAME (tem));
432
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
967
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
968 break;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
969 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
970
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
971 window = tem;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
972 /* If we're in a combination window, find its last child and
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
973 recurse on that. Otherwise, we've found the window we want. */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
974 while (1)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
975 {
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
976 if (!NILP (XWINDOW (window)->hchild))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
977 window = XWINDOW (window)->hchild;
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
978 else if (!NILP (XWINDOW (window)->vchild))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
979 window = XWINDOW (window)->vchild;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
980 else break;
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
981 while (tem = XWINDOW (window)->next, !NILP (tem))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
982 window = tem;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
983 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
984 }
432
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
985 /* Which windows are acceptable?
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
986 Exit the loop and accept this window if
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
987 this isn't a minibuffer window, or
432
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
988 we're accepting minibuffer windows, or
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
989 we've come all the way around and we're back at the original window. */
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
990 while (MINI_WINDOW_P (XWINDOW (window))
432
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
991 && !EQ (minibuf, Qt)
1525
f79a22ad87d0 * window.c (Fwindow_width, Fset_window_hscroll): Use accessors on
Jim Blandy <jimb@redhat.com>
parents: 1444
diff changeset
992 && !EQ (window, start_window));
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
993
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
994 return window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
995 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
996
338
4840aae6a876 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 265
diff changeset
997 DEFUN ("other-window", Fother_window, Sother_window, 1, 2, "p",
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
998 "Select the ARG'th different window on this frame.\n\
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
999 All windows on current frame are arranged in a cyclic order.\n\
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1000 This command selects the window ARG steps away in that order.\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1001 A negative ARG moves in the opposite order. If the optional second\n\
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1002 argument ALL_FRAMES is non-nil, cycle through all frames.")
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1003 (n, all_frames)
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1004 register Lisp_Object n, all_frames;
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1005 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1006 register int i;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1007 register Lisp_Object w;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1008
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1009 CHECK_NUMBER (n, 0);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1010 w = selected_window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1011 i = XINT (n);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1012
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1013 while (i > 0)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1014 {
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1015 w = Fnext_window (w, Qnil, all_frames);
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1016 i--;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1017 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1018 while (i < 0)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1019 {
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1020 w = Fprevious_window (w, Qnil, all_frames);
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1021 i++;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1022 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1023 Fselect_window (w);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1024 return Qnil;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1025 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1026
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1027 /* Look at all windows, performing an operation specified by TYPE
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1028 with argument OBJ.
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1029 If FRAMES is Qt, look at all frames, if Qnil, look at just the selected
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1030 frame. If FRAMES is a frame, just look at windows on that frame.
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1031 If MINI is non-zero, perform the operation on minibuffer windows too.
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1032 */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1033
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1034 enum window_loop
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1035 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1036 WINDOW_LOOP_UNUSED,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1037 GET_BUFFER_WINDOW, /* Arg is buffer */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1038 GET_LRU_WINDOW, /* Arg is t for full-width windows only */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1039 DELETE_OTHER_WINDOWS, /* Arg is window not to delete */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1040 DELETE_BUFFER_WINDOWS, /* Arg is buffer */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1041 GET_LARGEST_WINDOW,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1042 UNSHOW_BUFFER, /* Arg is buffer */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1043 };
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1044
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1045 static Lisp_Object
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1046 window_loop (type, obj, mini, frames)
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1047 enum window_loop type;
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1048 register Lisp_Object obj, frames;
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1049 int mini;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1050 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1051 register Lisp_Object w;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1052 register Lisp_Object best_window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1053 register Lisp_Object next_window;
983
eb19dfaec9c4 * window.c (window_loop): This used to keep track of the first
Jim Blandy <jimb@redhat.com>
parents: 972
diff changeset
1054 register Lisp_Object last_window;
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1055 FRAME_PTR frame;
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1056
983
eb19dfaec9c4 * window.c (window_loop): This used to keep track of the first
Jim Blandy <jimb@redhat.com>
parents: 972
diff changeset
1057 #ifdef MULTI_FRAME
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1058 /* If we're only looping through windows on a particular frame,
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1059 frame points to that frame. If we're looping through windows
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1060 on all frames, frame is 0. */
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1061 if (FRAMEP (frames))
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1062 frame = XFRAME (frames);
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1063 else if (NILP (frames))
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1064 frame = selected_frame;
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1065 else
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1066 frame = 0;
983
eb19dfaec9c4 * window.c (window_loop): This used to keep track of the first
Jim Blandy <jimb@redhat.com>
parents: 972
diff changeset
1067 #else
eb19dfaec9c4 * window.c (window_loop): This used to keep track of the first
Jim Blandy <jimb@redhat.com>
parents: 972
diff changeset
1068 frame = 0;
eb19dfaec9c4 * window.c (window_loop): This used to keep track of the first
Jim Blandy <jimb@redhat.com>
parents: 972
diff changeset
1069 #endif
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1070
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1071 /* Pick a window to start with. */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1072 if (XTYPE (obj) == Lisp_Window)
983
eb19dfaec9c4 * window.c (window_loop): This used to keep track of the first
Jim Blandy <jimb@redhat.com>
parents: 972
diff changeset
1073 w = obj;
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1074 else if (frame)
983
eb19dfaec9c4 * window.c (window_loop): This used to keep track of the first
Jim Blandy <jimb@redhat.com>
parents: 972
diff changeset
1075 w = FRAME_SELECTED_WINDOW (frame);
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1076 else
983
eb19dfaec9c4 * window.c (window_loop): This used to keep track of the first
Jim Blandy <jimb@redhat.com>
parents: 972
diff changeset
1077 w = FRAME_SELECTED_WINDOW (selected_frame);
eb19dfaec9c4 * window.c (window_loop): This used to keep track of the first
Jim Blandy <jimb@redhat.com>
parents: 972
diff changeset
1078
eb19dfaec9c4 * window.c (window_loop): This used to keep track of the first
Jim Blandy <jimb@redhat.com>
parents: 972
diff changeset
1079 /* Figure out the last window we're going to mess with. Since
eb19dfaec9c4 * window.c (window_loop): This used to keep track of the first
Jim Blandy <jimb@redhat.com>
parents: 972
diff changeset
1080 Fnext_window, given the same options, is guaranteed to go in a
eb19dfaec9c4 * window.c (window_loop): This used to keep track of the first
Jim Blandy <jimb@redhat.com>
parents: 972
diff changeset
1081 ring, we can just use Fprevious_window to find the last one.
eb19dfaec9c4 * window.c (window_loop): This used to keep track of the first
Jim Blandy <jimb@redhat.com>
parents: 972
diff changeset
1082
eb19dfaec9c4 * window.c (window_loop): This used to keep track of the first
Jim Blandy <jimb@redhat.com>
parents: 972
diff changeset
1083 We can't just wait until we hit the first window again, because
eb19dfaec9c4 * window.c (window_loop): This used to keep track of the first
Jim Blandy <jimb@redhat.com>
parents: 972
diff changeset
1084 it might be deleted. */
eb19dfaec9c4 * window.c (window_loop): This used to keep track of the first
Jim Blandy <jimb@redhat.com>
parents: 972
diff changeset
1085
eb19dfaec9c4 * window.c (window_loop): This used to keep track of the first
Jim Blandy <jimb@redhat.com>
parents: 972
diff changeset
1086 #ifdef MULTI_FRAME
eb19dfaec9c4 * window.c (window_loop): This used to keep track of the first
Jim Blandy <jimb@redhat.com>
parents: 972
diff changeset
1087 if (frame)
eb19dfaec9c4 * window.c (window_loop): This used to keep track of the first
Jim Blandy <jimb@redhat.com>
parents: 972
diff changeset
1088 last_window = Fprevious_window (w, (mini ? Qt : Qnil), Qlambda);
eb19dfaec9c4 * window.c (window_loop): This used to keep track of the first
Jim Blandy <jimb@redhat.com>
parents: 972
diff changeset
1089 else
eb19dfaec9c4 * window.c (window_loop): This used to keep track of the first
Jim Blandy <jimb@redhat.com>
parents: 972
diff changeset
1090 #endif /* MULTI_FRAME */
eb19dfaec9c4 * window.c (window_loop): This used to keep track of the first
Jim Blandy <jimb@redhat.com>
parents: 972
diff changeset
1091 /* We know frame is 0, so we're looping through all frames.
eb19dfaec9c4 * window.c (window_loop): This used to keep track of the first
Jim Blandy <jimb@redhat.com>
parents: 972
diff changeset
1092 Or we know this isn't a MULTI_FRAME Emacs, so who cares? */
eb19dfaec9c4 * window.c (window_loop): This used to keep track of the first
Jim Blandy <jimb@redhat.com>
parents: 972
diff changeset
1093 last_window = Fprevious_window (w, mini ? Qt : Qnil, Qt);
eb19dfaec9c4 * window.c (window_loop): This used to keep track of the first
Jim Blandy <jimb@redhat.com>
parents: 972
diff changeset
1094
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1095 best_window = Qnil;
983
eb19dfaec9c4 * window.c (window_loop): This used to keep track of the first
Jim Blandy <jimb@redhat.com>
parents: 972
diff changeset
1096 for (;;)
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1097 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1098 /* Pick the next window now, since some operations will delete
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1099 the current window. */
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1100 #ifdef MULTI_FRAME
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1101 if (frame)
432
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
1102 next_window = Fnext_window (w, (mini ? Qt : Qnil), Qlambda);
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1103 else
983
eb19dfaec9c4 * window.c (window_loop): This used to keep track of the first
Jim Blandy <jimb@redhat.com>
parents: 972
diff changeset
1104 #endif /* MULTI_FRAME */
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1105 /* We know frame is 0, so we're looping through all frames.
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1106 Or we know this isn't a MULTI_FRAME Emacs, so who cares? */
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1107 next_window = Fnext_window (w, mini ? Qt : Qnil, Qt);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1108
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1109 if (!MINI_WINDOW_P (XWINDOW (w))
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1110 || (mini && minibuf_level > 0))
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1111 switch (type)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1112 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1113 case GET_BUFFER_WINDOW:
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1114 #if 0
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1115 /* Ignore invisible and iconified frames. */
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1116 if (! FRAME_VISIBLE_P (XFRAME (WINDOW_FRAME (XWINDOW (w))))
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1117 || FRAME_ICONIFIED_P (XFRAME (WINDOW_FRAME (XWINDOW (w)))))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1118 break;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1119 #endif
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1120 if (XBUFFER (XWINDOW (w)->buffer) == XBUFFER (obj))
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1121 return w;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1122 break;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1123
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1124 case GET_LRU_WINDOW:
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1125 /* t as arg means consider only full-width windows */
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 722
diff changeset
1126 if (!NILP (obj) && XFASTINT (XWINDOW (w)->width)
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1127 != FRAME_WIDTH (frame))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1128 break;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1129 #if 0
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1130 /* Ignore invisible and iconified frames. */
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1131 if (! FRAME_VISIBLE_P (XFRAME (WINDOW_FRAME (XWINDOW (w))))
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1132 || FRAME_ICONIFIED_P (XFRAME (WINDOW_FRAME (XWINDOW (w)))))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1133 break;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1134 #endif
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1135 /* Ignore dedicated windows and minibuffers. */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1136 if (MINI_WINDOW_P (XWINDOW (w))
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
1137 || !NILP (XWINDOW (w)->dedicated))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1138 break;
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
1139 if (NILP (best_window)
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1140 || (XFASTINT (XWINDOW (best_window)->use_time)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1141 > XFASTINT (XWINDOW (w)->use_time)))
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1142 best_window = w;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1143 break;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1144
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1145 case DELETE_OTHER_WINDOWS:
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1146 if (XWINDOW (w) != XWINDOW (obj))
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1147 Fdelete_window (w);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1148 break;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1149
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1150 case DELETE_BUFFER_WINDOWS:
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1151 if (EQ (XWINDOW (w)->buffer, obj))
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1152 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1153 /* If we're deleting the buffer displayed in the only window
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1154 on the frame, find a new buffer to display there. */
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
1155 if (NILP (XWINDOW (w)->parent))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1156 {
1345
9596a1866aee (window_loop): Pass 2nd arg to Fother_buffer.
Richard M. Stallman <rms@gnu.org>
parents: 1339
diff changeset
1157 Lisp_Object new_buffer = Fother_buffer (obj, Qnil);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
1158 if (NILP (new_buffer))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1159 new_buffer
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1160 = Fget_buffer_create (build_string ("*scratch*"));
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1161 Fset_window_buffer (w, new_buffer);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1162 Fset_buffer (XWINDOW (w)->buffer);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1163 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1164 else
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1165 Fdelete_window (w);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1166 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1167 break;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1168
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1169 case GET_LARGEST_WINDOW:
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1170 #if 0
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1171 /* Ignore invisible and iconified frames. */
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1172 if (! FRAME_VISIBLE_P (XFRAME (WINDOW_FRAME (XWINDOW (w))))
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1173 || FRAME_ICONIFIED_P (XFRAME (WINDOW_FRAME (XWINDOW (w)))))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1174 break;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1175 #endif
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1176 /* Ignore dedicated windows and minibuffers. */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1177 if (MINI_WINDOW_P (XWINDOW (w))
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
1178 || !NILP (XWINDOW (w)->dedicated))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1179 break;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1180 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1181 struct window *best_window_ptr = XWINDOW (best_window);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1182 struct window *w_ptr = XWINDOW (w);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
1183 if (NILP (best_window) ||
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1184 (XFASTINT (w_ptr->height) * XFASTINT (w_ptr->width))
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1185 > (XFASTINT (best_window_ptr->height)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1186 * XFASTINT (best_window_ptr->width)))
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1187 best_window = w;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1188 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1189 break;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1190
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1191 case UNSHOW_BUFFER:
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1192 if (EQ (XWINDOW (w)->buffer, obj))
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1193 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1194 /* Find another buffer to show in this window. */
1345
9596a1866aee (window_loop): Pass 2nd arg to Fother_buffer.
Richard M. Stallman <rms@gnu.org>
parents: 1339
diff changeset
1195 Lisp_Object another_buffer = Fother_buffer (obj, Qnil);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
1196 if (NILP (another_buffer))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1197 another_buffer
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1198 = Fget_buffer_create (build_string ("*scratch*"));
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1199 Fset_window_buffer (w, another_buffer);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1200 if (EQ (w, selected_window))
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1201 Fset_buffer (XWINDOW (w)->buffer);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1202 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1203 break;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1204 }
983
eb19dfaec9c4 * window.c (window_loop): This used to keep track of the first
Jim Blandy <jimb@redhat.com>
parents: 972
diff changeset
1205
eb19dfaec9c4 * window.c (window_loop): This used to keep track of the first
Jim Blandy <jimb@redhat.com>
parents: 972
diff changeset
1206 if (EQ (w, last_window))
eb19dfaec9c4 * window.c (window_loop): This used to keep track of the first
Jim Blandy <jimb@redhat.com>
parents: 972
diff changeset
1207 break;
eb19dfaec9c4 * window.c (window_loop): This used to keep track of the first
Jim Blandy <jimb@redhat.com>
parents: 972
diff changeset
1208
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1209 w = next_window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1210 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1211
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1212 return best_window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1213 }
1444
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
1214
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1215 DEFUN ("get-lru-window", Fget_lru_window, Sget_lru_window, 0, 1, 0,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1216 "Return the window least recently selected or used for display.\n\
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1217 If optional argument FRAMES is t, search all frames. If FRAME is a\n\
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1218 frame, search only that frame.\n")
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1219 (frames)
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1220 Lisp_Object frames;
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1221 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1222 register Lisp_Object w;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1223 /* First try for a window that is full-width */
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1224 w = window_loop (GET_LRU_WINDOW, Qt, 0, frames);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
1225 if (!NILP (w) && !EQ (w, selected_window))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1226 return w;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1227 /* If none of them, try the rest */
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1228 return window_loop (GET_LRU_WINDOW, Qnil, 0, frames);
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1229 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1230
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1231 DEFUN ("get-largest-window", Fget_largest_window, Sget_largest_window, 0, 1, 0,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1232 "Return the largest window in area.\n\
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1233 If optional argument FRAMES is t, search all frames. If FRAME is a\n\
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1234 frame, search only that frame.\n")
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1235 (frame)
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1236 Lisp_Object frame;
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1237 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1238 return window_loop (GET_LARGEST_WINDOW, Qnil, 0,
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1239 frame);
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1240 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1241
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1242 DEFUN ("get-buffer-window", Fget_buffer_window, Sget_buffer_window, 1, 2, 0,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1243 "Return a window currently displaying BUFFER, or nil if none.\n\
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1244 If optional argument FRAMES is t, search all frames. If FRAME is a\n\
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1245 frame, search only that frame.\n")
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1246 (buffer, frame)
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1247 Lisp_Object buffer, frame;
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1248 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1249 buffer = Fget_buffer (buffer);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1250 if (XTYPE (buffer) == Lisp_Buffer)
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1251 return window_loop (GET_BUFFER_WINDOW, buffer, 1, frame);
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1252 else
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1253 return Qnil;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1254 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1255
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1256 DEFUN ("delete-other-windows", Fdelete_other_windows, Sdelete_other_windows,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1257 0, 1, "",
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1258 "Make WINDOW (or the selected window) fill its frame.\n\
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1259 Only the frame WINDOW is on is affected.")
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1260 (window)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1261 Lisp_Object window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1262 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1263 struct window *w;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1264 int opoint = point;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1265 struct buffer *obuf = current_buffer;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1266 int top;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1267
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
1268 if (NILP (window))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1269 window = selected_window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1270 else
1444
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
1271 CHECK_LIVE_WINDOW (window, 0);
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1272
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1273 w = XWINDOW (window);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1274 top = XFASTINT (w->top);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1275
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1276 window_loop (DELETE_OTHER_WINDOWS, window, 0, WINDOW_FRAME(w));
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1277
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1278 Fset_buffer (w->buffer);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1279 SET_PT (marker_position (w->start));
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1280 Frecenter (make_number (top));
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1281
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1282 set_buffer_internal (obuf);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1283 SET_PT (opoint);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1284 return Qnil;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1285 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1286
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1287 DEFUN ("delete-windows-on", Fdelete_windows_on, Sdelete_windows_on,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1288 1, 1, "bDelete windows on (buffer): ",
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1289 "Delete all windows showing BUFFER.")
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1290 (buffer)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1291 Lisp_Object buffer;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1292 {
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
1293 if (!NILP (buffer))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1294 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1295 buffer = Fget_buffer (buffer);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1296 CHECK_BUFFER (buffer, 0);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1297 window_loop (DELETE_BUFFER_WINDOWS, buffer, 0, Qt);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1298 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1299 return Qnil;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1300 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1301
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1302 DEFUN ("replace-buffer-in-windows", Freplace_buffer_in_windows,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1303 Sreplace_buffer_in_windows,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1304 1, 1, "bReplace buffer in windows: ",
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1305 "Replace BUFFER with some other buffer in all windows showing it.")
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1306 (buffer)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1307 Lisp_Object buffer;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1308 {
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
1309 if (!NILP (buffer))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1310 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1311 buffer = Fget_buffer (buffer);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1312 CHECK_BUFFER (buffer, 0);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1313 window_loop (UNSHOW_BUFFER, buffer, 0, Qt);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1314 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1315 return Qnil;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1316 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1317
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1318 /* Set the height of WINDOW and all its inferiors. */
972
f47d221cbfe6 * window.c (MIN_SAFE_WINDOW_HEIGHT, MIN_SAFE_WINDOW_WIDTH): Macros
Jim Blandy <jimb@redhat.com>
parents: 780
diff changeset
1319
f47d221cbfe6 * window.c (MIN_SAFE_WINDOW_HEIGHT, MIN_SAFE_WINDOW_WIDTH): Macros
Jim Blandy <jimb@redhat.com>
parents: 780
diff changeset
1320 /* The smallest acceptable dimensions for a window. Anything smaller
f47d221cbfe6 * window.c (MIN_SAFE_WINDOW_HEIGHT, MIN_SAFE_WINDOW_WIDTH): Macros
Jim Blandy <jimb@redhat.com>
parents: 780
diff changeset
1321 might crash Emacs. */
f47d221cbfe6 * window.c (MIN_SAFE_WINDOW_HEIGHT, MIN_SAFE_WINDOW_WIDTH): Macros
Jim Blandy <jimb@redhat.com>
parents: 780
diff changeset
1322 #define MIN_SAFE_WINDOW_WIDTH (2)
f47d221cbfe6 * window.c (MIN_SAFE_WINDOW_HEIGHT, MIN_SAFE_WINDOW_WIDTH): Macros
Jim Blandy <jimb@redhat.com>
parents: 780
diff changeset
1323 #define MIN_SAFE_WINDOW_HEIGHT (2)
f47d221cbfe6 * window.c (MIN_SAFE_WINDOW_HEIGHT, MIN_SAFE_WINDOW_WIDTH): Macros
Jim Blandy <jimb@redhat.com>
parents: 780
diff changeset
1324
f47d221cbfe6 * window.c (MIN_SAFE_WINDOW_HEIGHT, MIN_SAFE_WINDOW_WIDTH): Macros
Jim Blandy <jimb@redhat.com>
parents: 780
diff changeset
1325 /* Make sure that window_min_height and window_min_width are
f47d221cbfe6 * window.c (MIN_SAFE_WINDOW_HEIGHT, MIN_SAFE_WINDOW_WIDTH): Macros
Jim Blandy <jimb@redhat.com>
parents: 780
diff changeset
1326 not too small; if they are, set them to safe minima. */
f47d221cbfe6 * window.c (MIN_SAFE_WINDOW_HEIGHT, MIN_SAFE_WINDOW_WIDTH): Macros
Jim Blandy <jimb@redhat.com>
parents: 780
diff changeset
1327
f47d221cbfe6 * window.c (MIN_SAFE_WINDOW_HEIGHT, MIN_SAFE_WINDOW_WIDTH): Macros
Jim Blandy <jimb@redhat.com>
parents: 780
diff changeset
1328 static void
f47d221cbfe6 * window.c (MIN_SAFE_WINDOW_HEIGHT, MIN_SAFE_WINDOW_WIDTH): Macros
Jim Blandy <jimb@redhat.com>
parents: 780
diff changeset
1329 check_min_window_sizes ()
f47d221cbfe6 * window.c (MIN_SAFE_WINDOW_HEIGHT, MIN_SAFE_WINDOW_WIDTH): Macros
Jim Blandy <jimb@redhat.com>
parents: 780
diff changeset
1330 {
f47d221cbfe6 * window.c (MIN_SAFE_WINDOW_HEIGHT, MIN_SAFE_WINDOW_WIDTH): Macros
Jim Blandy <jimb@redhat.com>
parents: 780
diff changeset
1331 /* Smaller values might permit a crash. */
f47d221cbfe6 * window.c (MIN_SAFE_WINDOW_HEIGHT, MIN_SAFE_WINDOW_WIDTH): Macros
Jim Blandy <jimb@redhat.com>
parents: 780
diff changeset
1332 if (window_min_width < MIN_SAFE_WINDOW_WIDTH)
f47d221cbfe6 * window.c (MIN_SAFE_WINDOW_HEIGHT, MIN_SAFE_WINDOW_WIDTH): Macros
Jim Blandy <jimb@redhat.com>
parents: 780
diff changeset
1333 window_min_width = MIN_SAFE_WINDOW_WIDTH;
f47d221cbfe6 * window.c (MIN_SAFE_WINDOW_HEIGHT, MIN_SAFE_WINDOW_WIDTH): Macros
Jim Blandy <jimb@redhat.com>
parents: 780
diff changeset
1334 if (window_min_height < MIN_SAFE_WINDOW_HEIGHT)
f47d221cbfe6 * window.c (MIN_SAFE_WINDOW_HEIGHT, MIN_SAFE_WINDOW_WIDTH): Macros
Jim Blandy <jimb@redhat.com>
parents: 780
diff changeset
1335 window_min_height = MIN_SAFE_WINDOW_HEIGHT;
f47d221cbfe6 * window.c (MIN_SAFE_WINDOW_HEIGHT, MIN_SAFE_WINDOW_WIDTH): Macros
Jim Blandy <jimb@redhat.com>
parents: 780
diff changeset
1336 }
f47d221cbfe6 * window.c (MIN_SAFE_WINDOW_HEIGHT, MIN_SAFE_WINDOW_WIDTH): Macros
Jim Blandy <jimb@redhat.com>
parents: 780
diff changeset
1337
f47d221cbfe6 * window.c (MIN_SAFE_WINDOW_HEIGHT, MIN_SAFE_WINDOW_WIDTH): Macros
Jim Blandy <jimb@redhat.com>
parents: 780
diff changeset
1338 /* If *ROWS or *COLS are too small a size for FRAME, set them to the
f47d221cbfe6 * window.c (MIN_SAFE_WINDOW_HEIGHT, MIN_SAFE_WINDOW_WIDTH): Macros
Jim Blandy <jimb@redhat.com>
parents: 780
diff changeset
1339 minimum allowable size. */
1444
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
1340 void
972
f47d221cbfe6 * window.c (MIN_SAFE_WINDOW_HEIGHT, MIN_SAFE_WINDOW_WIDTH): Macros
Jim Blandy <jimb@redhat.com>
parents: 780
diff changeset
1341 check_frame_size (frame, rows, cols)
1444
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
1342 FRAME_PTR frame;
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
1343 int *rows, *cols;
972
f47d221cbfe6 * window.c (MIN_SAFE_WINDOW_HEIGHT, MIN_SAFE_WINDOW_WIDTH): Macros
Jim Blandy <jimb@redhat.com>
parents: 780
diff changeset
1344 {
f47d221cbfe6 * window.c (MIN_SAFE_WINDOW_HEIGHT, MIN_SAFE_WINDOW_WIDTH): Macros
Jim Blandy <jimb@redhat.com>
parents: 780
diff changeset
1345 /* For height, we have to see whether the frame has a minibuffer, and
f47d221cbfe6 * window.c (MIN_SAFE_WINDOW_HEIGHT, MIN_SAFE_WINDOW_WIDTH): Macros
Jim Blandy <jimb@redhat.com>
parents: 780
diff changeset
1346 whether it wants a mode line. */
f47d221cbfe6 * window.c (MIN_SAFE_WINDOW_HEIGHT, MIN_SAFE_WINDOW_WIDTH): Macros
Jim Blandy <jimb@redhat.com>
parents: 780
diff changeset
1347 int min_height =
f47d221cbfe6 * window.c (MIN_SAFE_WINDOW_HEIGHT, MIN_SAFE_WINDOW_WIDTH): Macros
Jim Blandy <jimb@redhat.com>
parents: 780
diff changeset
1348 ((FRAME_MINIBUF_ONLY_P (frame)
f47d221cbfe6 * window.c (MIN_SAFE_WINDOW_HEIGHT, MIN_SAFE_WINDOW_WIDTH): Macros
Jim Blandy <jimb@redhat.com>
parents: 780
diff changeset
1349 || ! FRAME_HAS_MINIBUF_P (frame))
f47d221cbfe6 * window.c (MIN_SAFE_WINDOW_HEIGHT, MIN_SAFE_WINDOW_WIDTH): Macros
Jim Blandy <jimb@redhat.com>
parents: 780
diff changeset
1350 ? MIN_SAFE_WINDOW_HEIGHT
f47d221cbfe6 * window.c (MIN_SAFE_WINDOW_HEIGHT, MIN_SAFE_WINDOW_WIDTH): Macros
Jim Blandy <jimb@redhat.com>
parents: 780
diff changeset
1351 : 2 * MIN_SAFE_WINDOW_HEIGHT - 1);
f47d221cbfe6 * window.c (MIN_SAFE_WINDOW_HEIGHT, MIN_SAFE_WINDOW_WIDTH): Macros
Jim Blandy <jimb@redhat.com>
parents: 780
diff changeset
1352
f47d221cbfe6 * window.c (MIN_SAFE_WINDOW_HEIGHT, MIN_SAFE_WINDOW_WIDTH): Macros
Jim Blandy <jimb@redhat.com>
parents: 780
diff changeset
1353 if (*rows < min_height)
f47d221cbfe6 * window.c (MIN_SAFE_WINDOW_HEIGHT, MIN_SAFE_WINDOW_WIDTH): Macros
Jim Blandy <jimb@redhat.com>
parents: 780
diff changeset
1354 *rows = min_height;
f47d221cbfe6 * window.c (MIN_SAFE_WINDOW_HEIGHT, MIN_SAFE_WINDOW_WIDTH): Macros
Jim Blandy <jimb@redhat.com>
parents: 780
diff changeset
1355 if (*cols < MIN_SAFE_WINDOW_WIDTH)
f47d221cbfe6 * window.c (MIN_SAFE_WINDOW_HEIGHT, MIN_SAFE_WINDOW_WIDTH): Macros
Jim Blandy <jimb@redhat.com>
parents: 780
diff changeset
1356 *cols = MIN_SAFE_WINDOW_WIDTH;
f47d221cbfe6 * window.c (MIN_SAFE_WINDOW_HEIGHT, MIN_SAFE_WINDOW_WIDTH): Macros
Jim Blandy <jimb@redhat.com>
parents: 780
diff changeset
1357 }
f47d221cbfe6 * window.c (MIN_SAFE_WINDOW_HEIGHT, MIN_SAFE_WINDOW_WIDTH): Macros
Jim Blandy <jimb@redhat.com>
parents: 780
diff changeset
1358
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1359 /* Normally the window is deleted if it gets too small.
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1360 nodelete nonzero means do not do this.
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1361 (The caller should check later and do so if appropriate) */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1362
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1363 set_window_height (window, height, nodelete)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1364 Lisp_Object window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1365 int height;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1366 int nodelete;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1367 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1368 register struct window *w = XWINDOW (window);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1369 register struct window *c;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1370 int oheight = XFASTINT (w->height);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1371 int top, pos, lastbot, opos, lastobot;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1372 Lisp_Object child;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1373
972
f47d221cbfe6 * window.c (MIN_SAFE_WINDOW_HEIGHT, MIN_SAFE_WINDOW_WIDTH): Macros
Jim Blandy <jimb@redhat.com>
parents: 780
diff changeset
1374 check_min_window_sizes ();
f47d221cbfe6 * window.c (MIN_SAFE_WINDOW_HEIGHT, MIN_SAFE_WINDOW_WIDTH): Macros
Jim Blandy <jimb@redhat.com>
parents: 780
diff changeset
1375
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1376 if (!nodelete
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
1377 && ! NILP (w->parent)
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1378 && height < window_min_height)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1379 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1380 Fdelete_window (window);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1381 return;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1382 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1383
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1384 XFASTINT (w->last_modified) = 0;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1385 windows_or_buffers_changed++;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1386 XFASTINT (w->height) = height;
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
1387 if (!NILP (w->hchild))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1388 {
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
1389 for (child = w->hchild; !NILP (child); child = XWINDOW (child)->next)
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1390 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1391 XWINDOW (child)->top = w->top;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1392 set_window_height (child, height, nodelete);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1393 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1394 }
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
1395 else if (!NILP (w->vchild))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1396 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1397 lastbot = top = XFASTINT (w->top);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1398 lastobot = 0;
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
1399 for (child = w->vchild; !NILP (child); child = c->next)
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1400 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1401 c = XWINDOW (child);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1402
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1403 opos = lastobot + XFASTINT (c->height);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1404
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1405 XFASTINT (c->top) = lastbot;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1406
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1407 pos = (((opos * height) << 1) + oheight) / (oheight << 1);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1408
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1409 /* Avoid confusion: inhibit deletion of child if becomes too small */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1410 set_window_height (child, pos + top - lastbot, 1);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1411
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1412 /* Now advance child to next window,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1413 and set lastbot if child was not just deleted. */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1414 lastbot = pos + top;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1415 lastobot = opos;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1416 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1417 /* Now delete any children that became too small. */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1418 if (!nodelete)
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
1419 for (child = w->vchild; !NILP (child); child = XWINDOW (child)->next)
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1420 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1421 set_window_height (child, XINT (XWINDOW (child)->height), 0);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1422 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1423 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1424 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1425
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1426 /* Recursively set width of WINDOW and its inferiors. */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1427
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1428 set_window_width (window, width, nodelete)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1429 Lisp_Object window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1430 int width;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1431 int nodelete;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1432 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1433 register struct window *w = XWINDOW (window);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1434 register struct window *c;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1435 int owidth = XFASTINT (w->width);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1436 int left, pos, lastright, opos, lastoright;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1437 Lisp_Object child;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1438
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1439 if (!nodelete && width < window_min_width)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1440 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1441 Fdelete_window (window);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1442 return;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1443 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1444
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1445 XFASTINT (w->last_modified) = 0;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1446 windows_or_buffers_changed++;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1447 XFASTINT (w->width) = width;
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
1448 if (!NILP (w->vchild))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1449 {
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
1450 for (child = w->vchild; !NILP (child); child = XWINDOW (child)->next)
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1451 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1452 XWINDOW (child)->left = w->left;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1453 set_window_width (child, width, nodelete);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1454 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1455 }
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
1456 else if (!NILP (w->hchild))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1457 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1458 lastright = left = XFASTINT (w->left);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1459 lastoright = 0;
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
1460 for (child = w->hchild; !NILP (child); child = c->next)
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1461 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1462 c = XWINDOW (child);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1463
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1464 opos = lastoright + XFASTINT (c->width);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1465
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1466 XFASTINT (c->left) = lastright;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1467
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1468 pos = (((opos * width) << 1) + owidth) / (owidth << 1);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1469
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1470 /* Inhibit deletion for becoming too small */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1471 set_window_width (child, pos + left - lastright, 1);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1472
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1473 /* Now advance child to next window,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1474 and set lastright if child was not just deleted. */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1475 lastright = pos + left, lastoright = opos;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1476 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1477 /* Delete children that became too small */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1478 if (!nodelete)
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
1479 for (child = w->hchild; !NILP (child); child = XWINDOW (child)->next)
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1480 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1481 set_window_width (child, XINT (XWINDOW (child)->width), 0);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1482 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1483 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1484 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1485
362
d1e5cf833d37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 358
diff changeset
1486 int window_select_count;
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1487
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1488 DEFUN ("set-window-buffer", Fset_window_buffer, Sset_window_buffer, 2, 2, 0,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1489 "Make WINDOW display BUFFER as its contents.\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1490 BUFFER can be a buffer or buffer name.")
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1491 (window, buffer)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1492 register Lisp_Object window, buffer;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1493 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1494 register Lisp_Object tem;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1495 register struct window *w = decode_window (window);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1496
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1497 buffer = Fget_buffer (buffer);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1498 CHECK_BUFFER (buffer, 1);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1499
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
1500 if (NILP (XBUFFER (buffer)->name))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1501 error ("Attempt to display deleted buffer");
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1502
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1503 tem = w->buffer;
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
1504 if (NILP (tem))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1505 error ("Window is deleted");
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1506 else if (! EQ (tem, Qt)) /* w->buffer is t when the window
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1507 is first being set up. */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1508 {
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
1509 if (!NILP (w->dedicated) && !EQ (tem, buffer))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1510 error ("Window is dedicated to %s\n", tem);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1511
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1512 unshow_buffer (w);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1513 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1514
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1515 w->buffer = buffer;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1516 Fset_marker (w->pointm,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1517 make_number (BUF_PT (XBUFFER (buffer))),
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1518 buffer);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1519 set_marker_restricted (w->start,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1520 make_number (XBUFFER (buffer)->last_window_start),
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1521 buffer);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1522 w->start_at_line_beg = Qnil;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1523 XFASTINT (w->last_modified) = 0;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1524 windows_or_buffers_changed++;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1525 if (EQ (window, selected_window))
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1526 Fset_buffer (buffer);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1527
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1528 return Qnil;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1529 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1530
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1531 DEFUN ("select-window", Fselect_window, Sselect_window, 1, 1, 0,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1532 "Select WINDOW. Most editing will apply to WINDOW's buffer.\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1533 The main editor command loop selects the buffer of the selected window\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1534 before each command.")
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1535 (window)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1536 register Lisp_Object window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1537 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1538 register struct window *w;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1539 register struct window *ow = XWINDOW (selected_window);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1540
1444
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
1541 CHECK_LIVE_WINDOW (window, 0);
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1542
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1543 w = XWINDOW (window);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1544
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
1545 if (NILP (w->buffer))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1546 error ("Trying to select deleted window or non-leaf window");
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1547
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1548 XFASTINT (w->use_time) = ++window_select_count;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1549 if (EQ (window, selected_window))
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1550 return window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1551
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1552 Fset_marker (ow->pointm, make_number (BUF_PT (XBUFFER (ow->buffer))),
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1553 ow->buffer);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1554
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1555 selected_window = window;
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1556 #ifdef MULTI_FRAME
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1557 if (XFRAME (WINDOW_FRAME (w)) != selected_frame)
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1558 {
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1559 XFRAME (WINDOW_FRAME (w))->selected_window = window;
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1560 Fselect_frame (WINDOW_FRAME (w), Qnil);
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1561 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1562 else
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1563 selected_frame->selected_window = window;
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1564 #endif
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1565
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1566 record_buffer (w->buffer);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1567 Fset_buffer (w->buffer);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1568
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1569 /* Go to the point recorded in the window.
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1570 This is important when the buffer is in more
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1571 than one window. It also matters when
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1572 redisplay_window has altered point after scrolling,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1573 because it makes the change only in the window. */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1574 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1575 register int new_point = marker_position (w->pointm);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1576 if (new_point < BEGV)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1577 SET_PT (BEGV);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1578 if (new_point > ZV)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1579 SET_PT (ZV);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1580 else
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1581 SET_PT (new_point);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1582 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1583
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1584 windows_or_buffers_changed++;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1585 return window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1586 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1587
735
ea0823fe7df5 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 732
diff changeset
1588 DEFUN ("display-buffer", Fdisplay_buffer, Sdisplay_buffer, 1, 2,
ea0823fe7df5 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 732
diff changeset
1589 "BDisplay buffer:\nP",
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1590 "Make BUFFER appear in some window but don't select it.\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1591 BUFFER can be a buffer or a buffer name.\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1592 If BUFFER is shown already in some window, just use that one,\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1593 unless the window is the selected window and the optional second\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1594 argument NOT_THIS_WINDOW is non-nil.\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1595 Returns the window displaying BUFFER.")
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1596 (buffer, not_this_window)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1597 register Lisp_Object buffer, not_this_window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1598 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1599 register Lisp_Object window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1600
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1601 buffer = Fget_buffer (buffer);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1602 CHECK_BUFFER (buffer, 0);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1603
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
1604 if (!NILP (Vdisplay_buffer_function))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1605 return call2 (Vdisplay_buffer_function, buffer, not_this_window);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1606
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
1607 if (NILP (not_this_window)
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1608 && XBUFFER (XWINDOW (selected_window)->buffer) == XBUFFER (buffer))
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1609 return selected_window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1610
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1611 window = Fget_buffer_window (buffer, Qnil);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
1612 if (!NILP (window)
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
1613 && (NILP (not_this_window) || !EQ (window, selected_window)))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1614 return window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1615
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1616 #ifdef MULTI_FRAME
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1617 /* If there are no frames open that have more than a minibuffer,
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1618 we need to create a new frame. */
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1619 if (pop_up_frames || last_nonminibuf_frame == 0)
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1620 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1621 window
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1622 = Fframe_selected_window (call0 (Vpop_up_frame_function));
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1623 Fset_window_buffer (window, buffer);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1624 #if 0
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1625 Fselect_frame (XWINDOW (window)->frame, Qnil);
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1626 #endif
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1627 return window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1628 }
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1629 #endif /* MULTI_FRAME */
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1630
358
71c9042fb90d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 338
diff changeset
1631 if (pop_up_windows
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1632 #ifdef MULTI_FRAME
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1633 || FRAME_MINIBUF_ONLY_P (selected_frame)
358
71c9042fb90d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 338
diff changeset
1634 #endif
71c9042fb90d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 338
diff changeset
1635 )
71c9042fb90d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 338
diff changeset
1636 {
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1637 Lisp_Object frames = Qnil;
358
71c9042fb90d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 338
diff changeset
1638
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1639 #ifdef MULTI_FRAME
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1640 if (FRAME_MINIBUF_ONLY_P (selected_frame))
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1641 XSET (frames, Lisp_Frame, last_nonminibuf_frame);
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1642 #endif
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1643 /* Don't try to create a window if would get an error */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1644 if (split_height_threshold < window_min_height << 1)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1645 split_height_threshold = window_min_height << 1;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1646
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1647 window = Fget_largest_window (frames);
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1648
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
1649 if (!NILP (window)
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1650 && window_height (window) >= split_height_threshold
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1651 &&
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1652 (XFASTINT (XWINDOW (window)->width)
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1653 == FRAME_WIDTH (XFRAME (WINDOW_FRAME (XWINDOW (window))))))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1654 window = Fsplit_window (window, Qnil, Qnil);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1655 else
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1656 {
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1657 window = Fget_lru_window (frames);
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1658 if ((EQ (window, selected_window)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1659 || EQ (XWINDOW (window)->parent, Qnil))
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1660 && window_height (window) >= window_min_height << 1)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1661 window = Fsplit_window (window, Qnil, Qnil);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1662 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1663 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1664 else
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1665 window = Fget_lru_window (Qnil);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1666
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1667 Fset_window_buffer (window, buffer);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1668 return window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1669 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1670
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1671 void
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1672 temp_output_buffer_show (buf)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1673 register Lisp_Object buf;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1674 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1675 register struct buffer *old = current_buffer;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1676 register Lisp_Object window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1677 register struct window *w;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1678
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1679 Fset_buffer (buf);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1680 XBUFFER (buf)->save_modified = MODIFF;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1681 BEGV = BEG;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1682 ZV = Z;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1683 SET_PT (BEG);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1684 clip_changed = 1;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1685 set_buffer_internal (old);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1686
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1687 if (!EQ (Vtemp_buffer_show_function, Qnil))
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1688 call1 (Vtemp_buffer_show_function, buf);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1689 else
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1690 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1691 window = Fdisplay_buffer (buf, Qnil);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1692
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1693 #ifdef MULTI_FRAME
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1694 if (XFRAME (XWINDOW (window)->frame) != selected_frame)
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1695 Fmake_frame_visible (WINDOW_FRAME (XWINDOW (window)));
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1696 #endif /* MULTI_FRAME */
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1697 Vminibuf_scroll_window = window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1698 w = XWINDOW (window);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1699 XFASTINT (w->hscroll) = 0;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1700 set_marker_restricted (w->start, make_number (1), buf);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1701 set_marker_restricted (w->pointm, make_number (1), buf);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1702 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1703 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1704
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1705 static
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1706 make_dummy_parent (window)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1707 Lisp_Object window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1708 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1709 register Lisp_Object old, new;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1710 register struct window *o, *p;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1711
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1712 old = window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1713 XSETTYPE (old, Lisp_Vector);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1714 new = Fcopy_sequence (old);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1715 XSETTYPE (new, Lisp_Window);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1716
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1717 o = XWINDOW (old);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1718 p = XWINDOW (new);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1719 XFASTINT (p->sequence_number) = ++sequence_number;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1720
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1721 /* Put new into window structure in place of window */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1722 replace_window (window, new);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1723
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1724 o->next = Qnil;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1725 o->prev = Qnil;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1726 o->vchild = Qnil;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1727 o->hchild = Qnil;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1728 o->parent = new;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1729
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1730 p->start = Qnil;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1731 p->pointm = Qnil;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1732 p->buffer = Qnil;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1733 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1734
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1735 DEFUN ("split-window", Fsplit_window, Ssplit_window, 0, 3, "",
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1736 "Split WINDOW, putting SIZE lines in the first of the pair.\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1737 WINDOW defaults to selected one and SIZE to half its size.\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1738 If optional third arg HOR-FLAG is non-nil, split side by side\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1739 and put SIZE columns in the first of the pair.")
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1740 (window, chsize, horflag)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1741 Lisp_Object window, chsize, horflag;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1742 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1743 register Lisp_Object new;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1744 register struct window *o, *p;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1745 register int size;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1746
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
1747 if (NILP (window))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1748 window = selected_window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1749 else
1444
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
1750 CHECK_LIVE_WINDOW (window, 0);
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1751
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1752 o = XWINDOW (window);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1753
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
1754 if (NILP (chsize))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1755 {
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
1756 if (!NILP (horflag))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1757 /* Round odd size up, since this is for the left-hand window,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1758 and it will lose a column for the separators. */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1759 size = ((XFASTINT (o->width) + 1) & -2) >> 1;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1760 else
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1761 size = XFASTINT (o->height) >> 1;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1762 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1763 else
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1764 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1765 CHECK_NUMBER (chsize, 1);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1766 size = XINT (chsize);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1767 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1768
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1769 if (MINI_WINDOW_P (o))
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1770 error ("Attempt to split minibuffer window");
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1771 else if (FRAME_NO_SPLIT_P (XFRAME (WINDOW_FRAME (o))))
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1772 error ("Attempt to split unsplittable frame");
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1773
972
f47d221cbfe6 * window.c (MIN_SAFE_WINDOW_HEIGHT, MIN_SAFE_WINDOW_WIDTH): Macros
Jim Blandy <jimb@redhat.com>
parents: 780
diff changeset
1774 check_min_window_sizes ();
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1775
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
1776 if (NILP (horflag))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1777 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1778 if (size < window_min_height
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1779 || size + window_min_height > XFASTINT (o->height))
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1780 args_out_of_range_3 (window, chsize, horflag);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
1781 if (NILP (o->parent)
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
1782 || NILP (XWINDOW (o->parent)->vchild))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1783 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1784 make_dummy_parent (window);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1785 new = o->parent;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1786 XWINDOW (new)->vchild = window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1787 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1788 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1789 else
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1790 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1791 if (size < window_min_width
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1792 || size + window_min_width > XFASTINT (o->width))
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1793 args_out_of_range_3 (window, chsize, horflag);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
1794 if (NILP (o->parent)
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
1795 || NILP (XWINDOW (o->parent)->hchild))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1796 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1797 make_dummy_parent (window);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1798 new = o->parent;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1799 XWINDOW (new)->hchild = window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1800 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1801 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1802
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1803 /* Now we know that window's parent is a vertical combination
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1804 if we are dividing vertically, or a horizontal combination
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1805 if we are making side-by-side windows */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1806
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1807 windows_or_buffers_changed++;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1808 new = make_window ();
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1809 p = XWINDOW (new);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1810
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1811 p->frame = o->frame;
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1812 p->next = o->next;
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
1813 if (!NILP (p->next))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1814 XWINDOW (p->next)->prev = new;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1815 p->prev = window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1816 o->next = new;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1817 p->parent = o->parent;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1818 p->buffer = Qt;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1819
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1820 Fset_window_buffer (new, o->buffer);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1821
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1822 /* Apportion the available frame space among the two new windows */
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1823
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
1824 if (!NILP (horflag))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1825 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1826 p->height = o->height;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1827 p->top = o->top;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1828 XFASTINT (p->width) = XFASTINT (o->width) - size;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1829 XFASTINT (o->width) = size;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1830 XFASTINT (p->left) = XFASTINT (o->left) + size;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1831 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1832 else
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1833 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1834 p->left = o->left;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1835 p->width = o->width;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1836 XFASTINT (p->height) = XFASTINT (o->height) - size;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1837 XFASTINT (o->height) = size;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1838 XFASTINT (p->top) = XFASTINT (o->top) + size;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1839 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1840
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1841 return new;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1842 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1843
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1844 DEFUN ("enlarge-window", Fenlarge_window, Senlarge_window, 1, 2, "p",
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1845 "Make current window ARG lines bigger.\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1846 From program, optional second arg non-nil means grow sideways ARG columns.")
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1847 (n, side)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1848 register Lisp_Object n, side;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1849 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1850 CHECK_NUMBER (n, 0);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
1851 change_window_height (XINT (n), !NILP (side));
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1852 return Qnil;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1853 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1854
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1855 DEFUN ("shrink-window", Fshrink_window, Sshrink_window, 1, 2, "p",
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1856 "Make current window ARG lines smaller.\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1857 From program, optional second arg non-nil means shrink sideways ARG columns.")
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1858 (n, side)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1859 register Lisp_Object n, side;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1860 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1861 CHECK_NUMBER (n, 0);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
1862 change_window_height (-XINT (n), !NILP (side));
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1863 return Qnil;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1864 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1865
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1866 int
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1867 window_height (window)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1868 Lisp_Object window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1869 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1870 register struct window *p = XWINDOW (window);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1871 return XFASTINT (p->height);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1872 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1873
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1874 int
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1875 window_width (window)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1876 Lisp_Object window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1877 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1878 register struct window *p = XWINDOW (window);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1879 return XFASTINT (p->width);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1880 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1881
1049
25046e48ce9a * window.c (coordinates_in_window): Do not assume that all
Jim Blandy <jimb@redhat.com>
parents: 1016
diff changeset
1882 #define MINSIZE(w) \
25046e48ce9a * window.c (coordinates_in_window): Do not assume that all
Jim Blandy <jimb@redhat.com>
parents: 1016
diff changeset
1883 (widthflag \
25046e48ce9a * window.c (coordinates_in_window): Do not assume that all
Jim Blandy <jimb@redhat.com>
parents: 1016
diff changeset
1884 ? window_min_width \
25046e48ce9a * window.c (coordinates_in_window): Do not assume that all
Jim Blandy <jimb@redhat.com>
parents: 1016
diff changeset
1885 : (MINI_WINDOW_P (XWINDOW (w)) ? 1 : window_min_height))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1886
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1887 #define CURBEG(w) \
1049
25046e48ce9a * window.c (coordinates_in_window): Do not assume that all
Jim Blandy <jimb@redhat.com>
parents: 1016
diff changeset
1888 *(widthflag ? (int *) &(XWINDOW (w)->left) : (int *) &(XWINDOW (w)->top))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1889
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1890 #define CURSIZE(w) \
1049
25046e48ce9a * window.c (coordinates_in_window): Do not assume that all
Jim Blandy <jimb@redhat.com>
parents: 1016
diff changeset
1891 *(widthflag ? (int *) &(XWINDOW (w)->width) : (int *) &(XWINDOW (w)->height))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1892
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1893 /* Unlike set_window_height, this function
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1894 also changes the heights of the siblings so as to
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1895 keep everything consistent. */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1896
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1897 change_window_height (delta, widthflag)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1898 register int delta;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1899 int widthflag;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1900 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1901 register Lisp_Object parent;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1902 Lisp_Object window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1903 register struct window *p;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1904 int *sizep;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1905 int (*sizefun) () = widthflag ? window_width : window_height;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1906 register int (*setsizefun) () = (widthflag
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1907 ? set_window_width
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1908 : set_window_height);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1909
972
f47d221cbfe6 * window.c (MIN_SAFE_WINDOW_HEIGHT, MIN_SAFE_WINDOW_WIDTH): Macros
Jim Blandy <jimb@redhat.com>
parents: 780
diff changeset
1910 check_min_window_sizes ();
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1911
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1912 window = selected_window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1913 while (1)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1914 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1915 p = XWINDOW (window);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1916 parent = p->parent;
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
1917 if (NILP (parent))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1918 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1919 if (widthflag)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1920 error ("No other window to side of this one");
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1921 break;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1922 }
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
1923 if (widthflag ? !NILP (XWINDOW (parent)->hchild)
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
1924 : !NILP (XWINDOW (parent)->vchild))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1925 break;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1926 window = parent;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1927 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1928
1049
25046e48ce9a * window.c (coordinates_in_window): Do not assume that all
Jim Blandy <jimb@redhat.com>
parents: 1016
diff changeset
1929 sizep = &CURSIZE (window);
25046e48ce9a * window.c (coordinates_in_window): Do not assume that all
Jim Blandy <jimb@redhat.com>
parents: 1016
diff changeset
1930
25046e48ce9a * window.c (coordinates_in_window): Do not assume that all
Jim Blandy <jimb@redhat.com>
parents: 1016
diff changeset
1931 if (*sizep + delta < MINSIZE (window))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1932 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1933 Fdelete_window (window);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1934 return;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1935 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1936
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1937 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1938 register int maxdelta;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1939
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
1940 maxdelta = (!NILP (parent) ? (*sizefun) (parent) - *sizep
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
1941 : !NILP (p->next) ? (*sizefun) (p->next) - MINSIZE (p->next)
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
1942 : !NILP (p->prev) ? (*sizefun) (p->prev) - MINSIZE (p->prev)
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1943 /* This is a frame with only one window, a minibuffer-only
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1944 or a minibufferless frame. */
432
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
1945 : (delta = 0));
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1946
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1947 if (delta > maxdelta)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1948 /* This case traps trying to make the minibuffer
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1949 the full frame, or make the only window aside from the
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
1950 minibuffer the full frame. */
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1951 delta = maxdelta;
432
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
1952
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
1953 if (delta == 0)
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
1954 return;
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1955 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1956
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
1957 if (!NILP (p->next) &&
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1958 (*sizefun) (p->next) - delta >= MINSIZE (p->next))
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1959 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1960 (*setsizefun) (p->next, (*sizefun) (p->next) - delta, 0);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1961 (*setsizefun) (window, *sizep + delta, 0);
1049
25046e48ce9a * window.c (coordinates_in_window): Do not assume that all
Jim Blandy <jimb@redhat.com>
parents: 1016
diff changeset
1962 CURBEG (p->next) += delta;
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1963 /* This does not change size of p->next,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1964 but it propagates the new top edge to its children */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1965 (*setsizefun) (p->next, (*sizefun) (p->next), 0);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1966 }
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
1967 else if (!NILP (p->prev) &&
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1968 (*sizefun) (p->prev) - delta >= MINSIZE (p->prev))
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1969 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1970 (*setsizefun) (p->prev, (*sizefun) (p->prev) - delta, 0);
1049
25046e48ce9a * window.c (coordinates_in_window): Do not assume that all
Jim Blandy <jimb@redhat.com>
parents: 1016
diff changeset
1971 CURBEG (window) -= delta;
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1972 (*setsizefun) (window, *sizep + delta, 0);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1973 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1974 else
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1975 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1976 register int delta1;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1977 register int opht = (*sizefun) (parent);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1978
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1979 /* If trying to grow this window to or beyond size of the parent,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1980 make delta1 so big that, on shrinking back down,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1981 all the siblings end up with less than one line and are deleted. */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1982 if (opht <= *sizep + delta)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1983 delta1 = opht * opht * 2;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1984 /* Otherwise, make delta1 just right so that if we add delta1
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1985 lines to this window and to the parent, and then shrink
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1986 the parent back to its original size, the new proportional
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1987 size of this window will increase by delta. */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1988 else
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1989 delta1 = (delta * opht * 100) / ((opht - *sizep - delta) * 100);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1990
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1991 /* Add delta1 lines or columns to this window, and to the parent,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1992 keeping things consistent while not affecting siblings. */
1049
25046e48ce9a * window.c (coordinates_in_window): Do not assume that all
Jim Blandy <jimb@redhat.com>
parents: 1016
diff changeset
1993 CURSIZE (parent) = opht + delta1;
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1994 (*setsizefun) (window, *sizep + delta1, 0);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1995
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1996 /* Squeeze out delta1 lines or columns from our parent,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1997 shriking this window and siblings proportionately.
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1998 This brings parent back to correct size.
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1999 Delta1 was calculated so this makes this window the desired size,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2000 taking it all out of the siblings. */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2001 (*setsizefun) (parent, opht, 0);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2002 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2003
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2004 XFASTINT (p->last_modified) = 0;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2005 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2006 #undef MINSIZE
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2007 #undef CURBEG
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2008 #undef CURSIZE
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2009
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2010
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2011 /* Return number of lines of text (not counting mode line) in W. */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2012
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2013 int
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2014 window_internal_height (w)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2015 struct window *w;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2016 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2017 int ht = XFASTINT (w->height);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2018
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2019 if (MINI_WINDOW_P (w))
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2020 return ht;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2021
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
2022 if (!NILP (w->parent) || !NILP (w->vchild) || !NILP (w->hchild)
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
2023 || !NILP (w->next) || !NILP (w->prev)
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
2024 || FRAME_WANTS_MODELINE_P (XFRAME (WINDOW_FRAME (w))))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2025 return ht - 1;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2026
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2027 return ht;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2028 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2029
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2030 /* Scroll contents of window WINDOW up N lines. */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2031
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2032 void
522
bacdab90fa8b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
2033 window_scroll (window, n, noerror)
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2034 Lisp_Object window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2035 int n;
522
bacdab90fa8b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
2036 int noerror;
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2037 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2038 register struct window *w = XWINDOW (window);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2039 register int opoint = point;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2040 register int pos;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2041 register int ht = window_internal_height (w);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2042 register Lisp_Object tem;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2043 int lose;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2044 Lisp_Object bolp, nmoved;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2045
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2046 XFASTINT (tem) = point;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2047 tem = Fpos_visible_in_window_p (tem, window);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2048
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
2049 if (NILP (tem))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2050 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2051 Fvertical_motion (make_number (- ht / 2));
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2052 XFASTINT (tem) = point;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2053 Fset_marker (w->start, tem, w->buffer);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2054 w->force_start = Qt;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2055 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2056
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2057 SET_PT (marker_position (w->start));
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2058 lose = n < 0 && point == BEGV;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2059 Fvertical_motion (make_number (n));
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2060 pos = point;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2061 bolp = Fbolp ();
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2062 SET_PT (opoint);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2063
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2064 if (lose)
522
bacdab90fa8b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
2065 {
bacdab90fa8b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
2066 if (noerror)
bacdab90fa8b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
2067 return;
bacdab90fa8b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
2068 else
bacdab90fa8b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
2069 Fsignal (Qbeginning_of_buffer, Qnil);
bacdab90fa8b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
2070 }
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2071
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2072 if (pos < ZV)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2073 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2074 set_marker_restricted (w->start, make_number (pos), w->buffer);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2075 w->start_at_line_beg = bolp;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2076 w->update_mode_line = Qt;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2077 XFASTINT (w->last_modified) = 0;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2078 if (pos > opoint)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2079 SET_PT (pos);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2080 if (n < 0)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2081 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2082 SET_PT (pos);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2083 tem = Fvertical_motion (make_number (ht));
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2084 if (point > opoint || XFASTINT (tem) < ht)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2085 SET_PT (opoint);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2086 else
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2087 Fvertical_motion (make_number (-1));
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2088 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2089 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2090 else
522
bacdab90fa8b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
2091 {
bacdab90fa8b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
2092 if (noerror)
bacdab90fa8b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
2093 return;
bacdab90fa8b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
2094 else
bacdab90fa8b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
2095 Fsignal (Qend_of_buffer, Qnil);
bacdab90fa8b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
2096 }
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2097 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2098
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2099 /* This is the guts of Fscroll_up and Fscroll_down. */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2100
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2101 static void
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2102 scroll_command (n, direction)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2103 register Lisp_Object n;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2104 int direction;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2105 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2106 register int defalt;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2107 int count = specpdl_ptr - specpdl;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2108
548
a7b7b759f694 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 522
diff changeset
2109 /* If selected window's buffer isn't current, make it current for the moment.
a7b7b759f694 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 522
diff changeset
2110 But don't screw up if window_scroll gets an error. */
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2111 if (XBUFFER (XWINDOW (selected_window)->buffer) != current_buffer)
548
a7b7b759f694 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 522
diff changeset
2112 {
a7b7b759f694 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 522
diff changeset
2113 record_unwind_protect (save_excursion_restore, save_excursion_save ());
a7b7b759f694 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 522
diff changeset
2114 Fset_buffer (XWINDOW (selected_window)->buffer);
a7b7b759f694 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 522
diff changeset
2115 }
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2116
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2117 defalt = (window_internal_height (XWINDOW (selected_window))
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2118 - next_screen_context_lines);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2119 defalt = direction * (defalt < 1 ? 1 : defalt);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2120
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
2121 if (NILP (n))
522
bacdab90fa8b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
2122 window_scroll (selected_window, defalt, 0);
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2123 else if (EQ (n, Qminus))
522
bacdab90fa8b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
2124 window_scroll (selected_window, - defalt, 0);
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2125 else
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2126 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2127 n = Fprefix_numeric_value (n);
522
bacdab90fa8b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
2128 window_scroll (selected_window, XINT (n) * direction, 0);
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2129 }
548
a7b7b759f694 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 522
diff changeset
2130
a7b7b759f694 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 522
diff changeset
2131 unbind_to (count, Qnil);
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2132 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2133
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2134 DEFUN ("scroll-up", Fscroll_up, Sscroll_up, 0, 1, "P",
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2135 "Scroll text of current window upward ARG lines; or near full screen if no ARG.\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2136 A near full screen is `next-screen-context-lines' less than a full screen.\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2137 When calling from a program, supply a number as argument or nil.")
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2138 (n)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2139 Lisp_Object n;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2140 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2141 scroll_command (n, 1);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2142 return Qnil;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2143 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2144
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2145 DEFUN ("scroll-down", Fscroll_down, Sscroll_down, 0, 1, "P",
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2146 "Scroll text of current window downward ARG lines; or near full screen if no ARG.\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2147 A near full screen is `next-screen-context-lines' less than a full screen.\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2148 When calling from a program, supply a number as argument or nil.")
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2149 (n)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2150 Lisp_Object n;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2151 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2152 scroll_command (n, -1);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2153 return Qnil;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2154 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2155
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2156 DEFUN ("scroll-other-window", Fscroll_other_window, Sscroll_other_window, 0, 1, "P",
1339
08c2336d83ff Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 1326
diff changeset
2157 "Scroll next window upward ARG lines; or near full screen if no ARG.\n\
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2158 The next window is the one below the current one; or the one at the top\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2159 if the current one is at the bottom.\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2160 When calling from a program, supply a number as argument or nil.\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2161 \n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2162 If in the minibuffer, `minibuf-scroll-window' if non-nil\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2163 specifies the window to scroll.\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2164 If `other-window-scroll-buffer' is non-nil, scroll the window\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2165 showing that buffer, popping the buffer up if necessary.")
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2166 (n)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2167 register Lisp_Object n;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2168 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2169 register Lisp_Object window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2170 register int ht;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2171 register struct window *w;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2172 register int count = specpdl_ptr - specpdl;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2173
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2174 if (MINI_WINDOW_P (XWINDOW (selected_window))
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
2175 && !NILP (Vminibuf_scroll_window))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2176 window = Vminibuf_scroll_window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2177 /* If buffer is specified, scroll that buffer. */
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
2178 else if (!NILP (Vother_window_scroll_buffer))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2179 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2180 window = Fget_buffer_window (Vother_window_scroll_buffer, Qnil);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
2181 if (NILP (window))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2182 window = Fdisplay_buffer (Vother_window_scroll_buffer, Qt);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2183 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2184 else
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2185 /* Nothing specified; pick a neighboring window. */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2186 window = Fnext_window (selected_window, Qnil, Qt);
1444
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
2187 CHECK_LIVE_WINDOW (window, 0);
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2188
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2189 if (EQ (window, selected_window))
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2190 error ("There is no other window");
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2191
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2192 w = XWINDOW (window);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2193 ht = window_internal_height (w);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2194
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2195 /* Don't screw up if window_scroll gets an error. */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2196 record_unwind_protect (save_excursion_restore, save_excursion_save ());
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2197
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2198 Fset_buffer (w->buffer);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2199 SET_PT (marker_position (w->pointm));
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2200
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
2201 if (NILP (n))
522
bacdab90fa8b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
2202 window_scroll (window, ht - next_screen_context_lines, 1);
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2203 else if (EQ (n, Qminus))
522
bacdab90fa8b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
2204 window_scroll (window, next_screen_context_lines - ht, 1);
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2205 else
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2206 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2207 if (XTYPE (n) == Lisp_Cons)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2208 n = Fcar (n);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2209 CHECK_NUMBER (n, 0);
522
bacdab90fa8b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
2210 window_scroll (window, XINT (n), 1);
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2211 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2212
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2213 Fset_marker (w->pointm, make_number (point), Qnil);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2214 unbind_to (count);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2215
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2216 return Qnil;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2217 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2218
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2219 DEFUN ("scroll-left", Fscroll_left, Sscroll_left, 1, 1, "P",
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2220 "Scroll selected window display ARG columns left.\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2221 Default for ARG is window width minus 2.")
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2222 (arg)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2223 register Lisp_Object arg;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2224 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2225
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
2226 if (NILP (arg))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2227 XFASTINT (arg) = XFASTINT (XWINDOW (selected_window)->width) - 2;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2228 else
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2229 arg = Fprefix_numeric_value (arg);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2230
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2231 return
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2232 Fset_window_hscroll (selected_window,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2233 make_number (XINT (XWINDOW (selected_window)->hscroll)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2234 + XINT (arg)));
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2235 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2236
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2237 DEFUN ("scroll-right", Fscroll_right, Sscroll_right, 1, 1, "P",
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2238 "Scroll selected window display ARG columns right.\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2239 Default for ARG is window width minus 2.")
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2240 (arg)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2241 register Lisp_Object arg;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2242 {
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
2243 if (NILP (arg))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2244 XFASTINT (arg) = XFASTINT (XWINDOW (selected_window)->width) - 2;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2245 else
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2246 arg = Fprefix_numeric_value (arg);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2247
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2248 return
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2249 Fset_window_hscroll (selected_window,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2250 make_number (XINT (XWINDOW (selected_window)->hscroll)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2251 - XINT (arg)));
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2252 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2253
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2254 DEFUN ("recenter", Frecenter, Srecenter, 0, 1, "P",
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
2255 "Center point in window and redisplay frame. With ARG, put point on line ARG.\n\
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2256 The desired position of point is always relative to the current window.\n\
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
2257 Just C-u as prefix means put point in the center of the window.\n\
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
2258 No arg (i.e., it is nil) erases the entire frame and then\n\
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
2259 redraws with point in the center of the current window.")
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2260 (n)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2261 register Lisp_Object n;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2262 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2263 register struct window *w = XWINDOW (selected_window);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2264 register int ht = window_internal_height (w);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2265 register int opoint = point;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2266
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
2267 if (NILP (n))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2268 {
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
2269 extern int frame_garbaged;
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2270
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
2271 SET_FRAME_GARBAGED (XFRAME (WINDOW_FRAME (w)));
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2272 XFASTINT (n) = ht / 2;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2273 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2274 else if (XTYPE (n) == Lisp_Cons) /* Just C-u. */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2275 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2276 XFASTINT (n) = ht / 2;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2277 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2278 else
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2279 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2280 n = Fprefix_numeric_value (n);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2281 CHECK_NUMBER (n, 0);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2282 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2283
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2284 if (XINT (n) < 0)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2285 XSETINT (n, XINT (n) + ht);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2286
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2287 XSETINT (n, - XINT (n));
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2288
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2289 Fvertical_motion (n);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2290 Fset_marker (w->start, make_number (point), w->buffer);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2291 w->start_at_line_beg = Fbolp ();
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2292
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2293 SET_PT (opoint);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2294 w->force_start = Qt;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2295
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2296 return Qnil;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2297 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2298
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2299 DEFUN ("move-to-window-line", Fmove_to_window_line, Smove_to_window_line,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2300 1, 1, "P",
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2301 "Position point relative to window.\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2302 With no argument, position text at center of window.\n\
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
2303 An argument specifies frame line; zero means top of window,\n\
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2304 negative means relative to bottom of window.")
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2305 (arg)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2306 register Lisp_Object arg;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2307 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2308 register struct window *w = XWINDOW (selected_window);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2309 register int height = window_internal_height (w);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2310 register int start;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2311
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
2312 if (NILP (arg))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2313 XFASTINT (arg) = height / 2;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2314 else
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2315 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2316 arg = Fprefix_numeric_value (arg);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2317 if (XINT (arg) < 0)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2318 XSETINT (arg, XINT (arg) + height);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2319 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2320
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2321 start = marker_position (w->start);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2322 if (start < BEGV || start > ZV)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2323 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2324 Fvertical_motion (make_number (- height / 2));
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2325 Fset_marker (w->start, make_number (point), w->buffer);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2326 w->start_at_line_beg = Fbolp ();
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2327 w->force_start = Qt;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2328 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2329 else
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2330 SET_PT (start);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2331
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2332 return Fvertical_motion (arg);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2333 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2334
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2335 struct save_window_data
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2336 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2337 int size_from_Lisp_Vector_struct;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2338 struct Lisp_Vector *next_from_Lisp_Vector_struct;
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
2339 Lisp_Object frame_width, frame_height;
1325
f03e559aac3e * window.c (struct save_window_data): Save the currently selected
Jim Blandy <jimb@redhat.com>
parents: 1280
diff changeset
2340 Lisp_Object selected_frame;
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2341 Lisp_Object current_window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2342 Lisp_Object current_buffer;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2343 Lisp_Object minibuf_scroll_window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2344 Lisp_Object root_window;
1325
f03e559aac3e * window.c (struct save_window_data): Save the currently selected
Jim Blandy <jimb@redhat.com>
parents: 1280
diff changeset
2345 Lisp_Object focus_frame;
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2346 /* A vector, interpreted as a struct saved_window */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2347 Lisp_Object saved_windows;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2348 };
1326
709532b86646 * window.c (SAVE_WINDOW_DATA_SIZE): Define this using sizeof,
Jim Blandy <jimb@redhat.com>
parents: 1325
diff changeset
2349
709532b86646 * window.c (SAVE_WINDOW_DATA_SIZE): Define this using sizeof,
Jim Blandy <jimb@redhat.com>
parents: 1325
diff changeset
2350 /* Arg to Fmake_vector */
709532b86646 * window.c (SAVE_WINDOW_DATA_SIZE): Define this using sizeof,
Jim Blandy <jimb@redhat.com>
parents: 1325
diff changeset
2351 #define SAVE_WINDOW_DATA_SIZE \
709532b86646 * window.c (SAVE_WINDOW_DATA_SIZE): Define this using sizeof,
Jim Blandy <jimb@redhat.com>
parents: 1325
diff changeset
2352 ((sizeof (struct save_window_data) \
709532b86646 * window.c (SAVE_WINDOW_DATA_SIZE): Define this using sizeof,
Jim Blandy <jimb@redhat.com>
parents: 1325
diff changeset
2353 - (sizeof (struct Lisp_Vector) \
709532b86646 * window.c (SAVE_WINDOW_DATA_SIZE): Define this using sizeof,
Jim Blandy <jimb@redhat.com>
parents: 1325
diff changeset
2354 /* Don't count the contents member of the struct Lisp_Vector */ \
709532b86646 * window.c (SAVE_WINDOW_DATA_SIZE): Define this using sizeof,
Jim Blandy <jimb@redhat.com>
parents: 1325
diff changeset
2355 - sizeof (Lisp_Object))) \
709532b86646 * window.c (SAVE_WINDOW_DATA_SIZE): Define this using sizeof,
Jim Blandy <jimb@redhat.com>
parents: 1325
diff changeset
2356 / sizeof (Lisp_Object))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2357
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2358 /* This is saved as a Lisp_Vector */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2359 struct saved_window
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2360 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2361 /* these first two must agree with struct Lisp_Vector in lisp.h */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2362 int size_from_Lisp_Vector_struct;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2363 struct Lisp_Vector *next_from_Lisp_Vector_struct;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2364
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2365 Lisp_Object window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2366 Lisp_Object buffer, start, pointm, mark;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2367 Lisp_Object left, top, width, height, hscroll;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2368 Lisp_Object parent, prev;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2369 Lisp_Object start_at_line_beg;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2370 Lisp_Object display_table;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2371 };
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2372 #define SAVED_WINDOW_VECTOR_SIZE 14 /* Arg to Fmake_vector */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2373
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2374 #define SAVED_WINDOW_N(swv,n) \
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2375 ((struct saved_window *) (XVECTOR ((swv)->contents[(n)])))
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2376
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2377 DEFUN ("window-configuration-p", Fwindow_configuration_p, Swindow_configuration_p, 1, 1, 0,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2378 "T if OBJECT is a window-configration object.")
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2379 (obj)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2380 Lisp_Object obj;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2381 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2382 if (XTYPE (obj) == Lisp_Window_Configuration)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2383 return Qt;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2384 return Qnil;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2385 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2386
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2387
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2388 DEFUN ("set-window-configuration",
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2389 Fset_window_configuration, Sset_window_configuration,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2390 1, 1, 0,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2391 "Set the configuration of windows and buffers as specified by CONFIGURATION.\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2392 CONFIGURATION must be a value previously returned\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2393 by `current-window-configuration' (which see).")
1016
817b0ce337d7 * window.c (Fset_window_configuration): Removed #if 0'd code which
Jim Blandy <jimb@redhat.com>
parents: 983
diff changeset
2394 (configuration)
817b0ce337d7 * window.c (Fset_window_configuration): Removed #if 0'd code which
Jim Blandy <jimb@redhat.com>
parents: 983
diff changeset
2395 Lisp_Object configuration;
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2396 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2397 register struct save_window_data *data;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2398 struct Lisp_Vector *saved_windows;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2399 Lisp_Object new_current_buffer;
1685
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2400 Lisp_Object frame;
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
2401 FRAME_PTR f;
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2402
1016
817b0ce337d7 * window.c (Fset_window_configuration): Removed #if 0'd code which
Jim Blandy <jimb@redhat.com>
parents: 983
diff changeset
2403 while (XTYPE (configuration) != Lisp_Window_Configuration)
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2404 {
1016
817b0ce337d7 * window.c (Fset_window_configuration): Removed #if 0'd code which
Jim Blandy <jimb@redhat.com>
parents: 983
diff changeset
2405 configuration = wrong_type_argument (intern ("window-configuration-p"),
817b0ce337d7 * window.c (Fset_window_configuration): Removed #if 0'd code which
Jim Blandy <jimb@redhat.com>
parents: 983
diff changeset
2406 configuration);
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2407 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2408
1016
817b0ce337d7 * window.c (Fset_window_configuration): Removed #if 0'd code which
Jim Blandy <jimb@redhat.com>
parents: 983
diff changeset
2409 data = (struct save_window_data *) XVECTOR (configuration);
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2410 saved_windows = XVECTOR (data->saved_windows);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2411
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2412 new_current_buffer = data->current_buffer;
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
2413 if (NILP (XBUFFER (new_current_buffer)->name))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2414 new_current_buffer = Qnil;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2415
1685
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2416 frame = XWINDOW (SAVED_WINDOW_N (saved_windows, 0)->window)->frame;
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2417 f = XFRAME (frame);
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2418
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2419 /* If f is a dead frame, don't bother rebuilding its window tree.
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2420 However, there is other stuff we should still try to do below. */
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2421 if (FRAME_LIVE_P (f))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2422 {
1685
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2423 register struct window *w;
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2424 register struct saved_window *p;
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2425 int k;
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2426
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2427 /* If the frame has been resized since this window configuration was
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2428 made, we change the frame to the size specified in the
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2429 configuration, restore the configuration, and then resize it
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2430 back. We keep track of the prevailing height in these variables. */
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2431 int previous_frame_height = FRAME_HEIGHT (f);
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2432 int previous_frame_width = FRAME_WIDTH (f);
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2433
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2434 if (XFASTINT (data->frame_height) != previous_frame_height
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2435 || XFASTINT (data->frame_width) != previous_frame_width)
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2436 change_frame_size (f, data->frame_height, data->frame_width, 0, 0);
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2437
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2438 windows_or_buffers_changed++;
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2439
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2440 /* Kludge Alert!
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2441 Mark all windows now on frame as "deleted".
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2442 Restoring the new configuration "undeletes" any that are in it.
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2443
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2444 Save their current buffers in their height fields, since we may
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2445 need it later, if a buffer saved in the configuration is now
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2446 dead. */
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2447 delete_all_subwindows (XWINDOW (FRAME_ROOT_WINDOW (f)));
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2448
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2449 for (k = 0; k < saved_windows->size; k++)
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2450 {
1685
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2451 p = SAVED_WINDOW_N (saved_windows, k);
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2452 w = XWINDOW (p->window);
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2453 w->next = Qnil;
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2454
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2455 if (!NILP (p->parent))
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2456 w->parent = SAVED_WINDOW_N (saved_windows,
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2457 XFASTINT (p->parent))->window;
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2458 else
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2459 w->parent = Qnil;
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2460
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2461 if (!NILP (p->prev))
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2462 {
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2463 w->prev = SAVED_WINDOW_N (saved_windows,
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2464 XFASTINT (p->prev))->window;
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2465 XWINDOW (w->prev)->next = p->window;
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2466 }
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2467 else
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2468 {
1685
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2469 w->prev = Qnil;
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2470 if (!NILP (w->parent))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2471 {
1685
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2472 if (EQ (p->width, XWINDOW (w->parent)->width))
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2473 {
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2474 XWINDOW (w->parent)->vchild = p->window;
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2475 XWINDOW (w->parent)->hchild = Qnil;
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2476 }
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2477 else
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2478 {
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2479 XWINDOW (w->parent)->hchild = p->window;
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2480 XWINDOW (w->parent)->vchild = Qnil;
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2481 }
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2482 }
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2483 }
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2484
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2485 /* If we squirreled away the buffer in the window's height,
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2486 restore it now. */
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2487 if (XTYPE (w->height) == Lisp_Buffer)
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2488 w->buffer = w->height;
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2489 w->left = p->left;
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2490 w->top = p->top;
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2491 w->width = p->width;
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2492 w->height = p->height;
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2493 w->hscroll = p->hscroll;
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2494 w->display_table = p->display_table;
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2495 XFASTINT (w->last_modified) = 0;
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2496
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2497 /* Reinstall the saved buffer and pointers into it. */
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2498 if (NILP (p->buffer))
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2499 w->buffer = p->buffer;
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2500 else
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2501 {
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2502 if (!NILP (XBUFFER (p->buffer)->name))
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2503 /* If saved buffer is alive, install it. */
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2504 {
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2505 w->buffer = p->buffer;
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2506 w->start_at_line_beg = p->start_at_line_beg;
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2507 set_marker_restricted (w->start,
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2508 Fmarker_position (p->start),
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2509 w->buffer);
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2510 set_marker_restricted (w->pointm,
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2511 Fmarker_position (p->pointm),
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2512 w->buffer);
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2513 Fset_marker (XBUFFER (w->buffer)->mark,
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2514 Fmarker_position (p->mark), w->buffer);
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2515
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2516 /* As documented in Fcurrent_window_configuration, don't
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2517 save the location of point in the buffer which was current
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2518 when the window configuration was recorded. */
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2519 if (!EQ (p->buffer, new_current_buffer) &&
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2520 XBUFFER (p->buffer) == current_buffer)
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2521 Fgoto_char (w->pointm);
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2522 }
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2523 else if (NILP (XBUFFER (w->buffer)->name))
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2524 /* Else if window's old buffer is dead too, get a live one. */
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2525 {
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2526 w->buffer = Fcdr (Fcar (Vbuffer_alist));
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2527 /* This will set the markers to beginning of visible
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2528 range. */
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2529 set_marker_restricted (w->start, make_number (0), w->buffer);
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2530 set_marker_restricted (w->pointm, make_number (0),w->buffer);
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2531 w->start_at_line_beg = Qt;
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2532 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2533 else
1685
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2534 /* Keeping window's old buffer; make sure the markers
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2535 are real. Else if window's old buffer is dead too,
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2536 get a live one. */
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2537 {
1685
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2538 /* Set window markers at start of visible range. */
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2539 if (XMARKER (w->start)->buffer == 0)
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2540 set_marker_restricted (w->start, make_number (0),
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2541 w->buffer);
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2542 if (XMARKER (w->pointm)->buffer == 0)
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2543 set_marker_restricted (w->pointm,
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2544 (make_number
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2545 (BUF_PT (XBUFFER (w->buffer)))),
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2546 w->buffer);
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2547 w->start_at_line_beg = Qt;
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2548 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2549 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2550 }
1237
3929b2135e58 * window.c (delete_all_subwindows): Save the window's buffer in
Jim Blandy <jimb@redhat.com>
parents: 1123
diff changeset
2551
1685
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2552 FRAME_ROOT_WINDOW (f) = data->root_window;
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2553 Fselect_window (data->current_window);
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2554
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2555 #ifdef MULTI_FRAME
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2556 Fredirect_frame_focus (frame, data->focus_frame);
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2557 #endif
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2558
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2559 #if 0 /* I don't understand why this is needed, and it causes problems
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2560 when the frame's old selected window has been deleted. */
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2561 #ifdef MULTI_FRAME
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2562 if (f != selected_frame && ! FRAME_TERMCAP_P (f))
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2563 Fselect_frame (WINDOW_FRAME (XWINDOW (data->root_window)), Qnil);
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2564 #endif
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2565 #endif
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2566
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2567 /* Set the screen height to the value it had before this function. */
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2568 if (previous_frame_height != FRAME_HEIGHT (f)
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2569 || previous_frame_width != FRAME_WIDTH (f))
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2570 change_frame_size (f, previous_frame_height, previous_frame_width,
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2571 0, 0);
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2572 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2573
1572
04c1b4719e60 * window.c (Fset_window_configuration): Protect call to
Jim Blandy <jimb@redhat.com>
parents: 1525
diff changeset
2574 #ifdef MULTI_FRAME
1325
f03e559aac3e * window.c (struct save_window_data): Save the currently selected
Jim Blandy <jimb@redhat.com>
parents: 1280
diff changeset
2575 /* Fselect_window will have made f the selected frame, so we
f03e559aac3e * window.c (struct save_window_data): Save the currently selected
Jim Blandy <jimb@redhat.com>
parents: 1280
diff changeset
2576 reselect the proper frame here. Fselect_frame will change the
f03e559aac3e * window.c (struct save_window_data): Save the currently selected
Jim Blandy <jimb@redhat.com>
parents: 1280
diff changeset
2577 selected window too, but that doesn't make the call to
f03e559aac3e * window.c (struct save_window_data): Save the currently selected
Jim Blandy <jimb@redhat.com>
parents: 1280
diff changeset
2578 Fselect_window above totally superfluous; it still sets f's
f03e559aac3e * window.c (struct save_window_data): Save the currently selected
Jim Blandy <jimb@redhat.com>
parents: 1280
diff changeset
2579 selected window. */
1685
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2580 if (FRAME_LIVE_P (XFRAME (data->selected_frame)))
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2581 Fselect_frame (data->selected_frame);
1572
04c1b4719e60 * window.c (Fset_window_configuration): Protect call to
Jim Blandy <jimb@redhat.com>
parents: 1525
diff changeset
2582 #endif
1325
f03e559aac3e * window.c (struct save_window_data): Save the currently selected
Jim Blandy <jimb@redhat.com>
parents: 1280
diff changeset
2583
f03e559aac3e * window.c (struct save_window_data): Save the currently selected
Jim Blandy <jimb@redhat.com>
parents: 1280
diff changeset
2584 if (!NILP (new_current_buffer))
f03e559aac3e * window.c (struct save_window_data): Save the currently selected
Jim Blandy <jimb@redhat.com>
parents: 1280
diff changeset
2585 Fset_buffer (new_current_buffer);
f03e559aac3e * window.c (struct save_window_data): Save the currently selected
Jim Blandy <jimb@redhat.com>
parents: 1280
diff changeset
2586
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2587 Vminibuf_scroll_window = data->minibuf_scroll_window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2588 return (Qnil);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2589 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2590
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
2591 /* Mark all windows now on frame as deleted
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2592 by setting their buffers to nil. */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2593
1685
8d7fc70d3103 * window.c (Fset_window_configuration): If we're restoring the
Jim Blandy <jimb@redhat.com>
parents: 1572
diff changeset
2594 void
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2595 delete_all_subwindows (w)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2596 register struct window *w;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2597 {
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
2598 if (!NILP (w->next))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2599 delete_all_subwindows (XWINDOW (w->next));
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
2600 if (!NILP (w->vchild))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2601 delete_all_subwindows (XWINDOW (w->vchild));
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
2602 if (!NILP (w->hchild))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2603 delete_all_subwindows (XWINDOW (w->hchild));
1444
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
2604
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
2605 w->height = w->buffer; /* See Fset_window_configuration for excuse. */
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
2606
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
2607 /* We set all three of these fields to nil, to make sure that we can
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
2608 distinguish this dead window from any live window. Live leaf
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
2609 windows will have buffer set, and combination windows will have
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
2610 vchild or hchild set. */
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
2611 w->buffer = Qnil;
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
2612 w->vchild = Qnil;
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
2613 w->hchild = Qnil;
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2614 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2615
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2616 static int
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2617 count_windows (window)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2618 register struct window *window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2619 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2620 register int count = 1;
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
2621 if (!NILP (window->next))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2622 count += count_windows (XWINDOW (window->next));
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
2623 if (!NILP (window->vchild))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2624 count += count_windows (XWINDOW (window->vchild));
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
2625 if (!NILP (window->hchild))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2626 count += count_windows (XWINDOW (window->hchild));
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2627 return count;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2628 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2629
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2630 static int
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2631 save_window_save (window, vector, i)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2632 Lisp_Object window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2633 struct Lisp_Vector *vector;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2634 int i;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2635 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2636 register struct saved_window *p;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2637 register struct window *w;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2638 register Lisp_Object tem;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2639
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
2640 for (;!NILP (window); window = w->next)
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2641 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2642 p = SAVED_WINDOW_N (vector, i);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2643 w = XWINDOW (window);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2644
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2645 XFASTINT (w->temslot) = i++;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2646 p->window = window;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2647 p->buffer = w->buffer;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2648 p->left = w->left;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2649 p->top = w->top;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2650 p->width = w->width;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2651 p->height = w->height;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2652 p->hscroll = w->hscroll;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2653 p->display_table = w->display_table;
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
2654 if (!NILP (w->buffer))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2655 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2656 /* Save w's value of point in the window configuration.
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2657 If w is the selected window, then get the value of point
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2658 from the buffer; pointm is garbage in the selected window. */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2659 if (EQ (window, selected_window))
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2660 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2661 p->pointm = Fmake_marker ();
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2662 Fset_marker (p->pointm, BUF_PT (XBUFFER (w->buffer)),
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2663 w->buffer);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2664 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2665 else
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2666 p->pointm = Fcopy_marker (w->pointm);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2667
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2668 p->start = Fcopy_marker (w->start);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2669 p->start_at_line_beg = w->start_at_line_beg;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2670
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2671 tem = XBUFFER (w->buffer)->mark;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2672 p->mark = Fcopy_marker (tem);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2673 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2674 else
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2675 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2676 p->pointm = Qnil;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2677 p->start = Qnil;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2678 p->mark = Qnil;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2679 p->start_at_line_beg = Qnil;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2680 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2681
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
2682 if (NILP (w->parent))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2683 p->parent = Qnil;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2684 else
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2685 p->parent = XWINDOW (w->parent)->temslot;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2686
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
2687 if (NILP (w->prev))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2688 p->prev = Qnil;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2689 else
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2690 p->prev = XWINDOW (w->prev)->temslot;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2691
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
2692 if (!NILP (w->vchild))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2693 i = save_window_save (w->vchild, vector, i);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 432
diff changeset
2694 if (!NILP (w->hchild))
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2695 i = save_window_save (w->hchild, vector, i);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2696 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2697
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2698 return i;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2699 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2700
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2701 DEFUN ("current-window-configuration",
358
71c9042fb90d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 338
diff changeset
2702 Fcurrent_window_configuration, Scurrent_window_configuration, 0, 1, 0,
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
2703 "Return an object representing the current window configuration of FRAME.\n\
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
2704 If FRAME is nil or omitted, use the selected frame.\n\
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2705 This describes the number of windows, their sizes and current buffers,\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2706 and for each displayed buffer, where display starts, and the positions of\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2707 point and mark. An exception is made for point in the current buffer:\n\
1325
f03e559aac3e * window.c (struct save_window_data): Save the currently selected
Jim Blandy <jimb@redhat.com>
parents: 1280
diff changeset
2708 its value is -not- saved.\n\
f03e559aac3e * window.c (struct save_window_data): Save the currently selected
Jim Blandy <jimb@redhat.com>
parents: 1280
diff changeset
2709 This also records the currently selected frame, and FRAME's focus\n\
f03e559aac3e * window.c (struct save_window_data): Save the currently selected
Jim Blandy <jimb@redhat.com>
parents: 1280
diff changeset
2710 redirection (see `redirect-frame-focus').")
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
2711 (frame)
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
2712 Lisp_Object frame;
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2713 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2714 register Lisp_Object tem;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2715 register int n_windows;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2716 register struct save_window_data *data;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2717 register int i;
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
2718 FRAME_PTR f;
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2719
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
2720 if (NILP (frame))
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
2721 f = selected_frame;
358
71c9042fb90d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 338
diff changeset
2722 else
71c9042fb90d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 338
diff changeset
2723 {
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
2724 CHECK_LIVE_FRAME (frame, 0);
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
2725 f = XFRAME (frame);
358
71c9042fb90d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 338
diff changeset
2726 }
71c9042fb90d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 338
diff changeset
2727
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
2728 n_windows = count_windows (XWINDOW (FRAME_ROOT_WINDOW (f)));
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2729 data = (struct save_window_data *)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2730 XVECTOR (Fmake_vector (make_number (SAVE_WINDOW_DATA_SIZE),
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2731 Qnil));
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
2732 XFASTINT (data->frame_width) = FRAME_WIDTH (f);
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
2733 XFASTINT (data->frame_height) = FRAME_HEIGHT (f);
1572
04c1b4719e60 * window.c (Fset_window_configuration): Protect call to
Jim Blandy <jimb@redhat.com>
parents: 1525
diff changeset
2734 #ifdef MULTI_FRAME
1325
f03e559aac3e * window.c (struct save_window_data): Save the currently selected
Jim Blandy <jimb@redhat.com>
parents: 1280
diff changeset
2735 XSET (data->selected_frame, Lisp_Frame, selected_frame);
1572
04c1b4719e60 * window.c (Fset_window_configuration): Protect call to
Jim Blandy <jimb@redhat.com>
parents: 1525
diff changeset
2736 #endif
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
2737 data->current_window = FRAME_SELECTED_WINDOW (f);
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2738 XSET (data->current_buffer, Lisp_Buffer, current_buffer);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2739 data->minibuf_scroll_window = Vminibuf_scroll_window;
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
2740 data->root_window = FRAME_ROOT_WINDOW (f);
1325
f03e559aac3e * window.c (struct save_window_data): Save the currently selected
Jim Blandy <jimb@redhat.com>
parents: 1280
diff changeset
2741 data->focus_frame = FRAME_FOCUS_FRAME (f);
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2742 tem = Fmake_vector (make_number (n_windows), Qnil);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2743 data->saved_windows = tem;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2744 for (i = 0; i < n_windows; i++)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2745 XVECTOR (tem)->contents[i]
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2746 = Fmake_vector (make_number (SAVED_WINDOW_VECTOR_SIZE), Qnil);
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
2747 save_window_save (FRAME_ROOT_WINDOW (f),
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2748 XVECTOR (tem), 0);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2749 XSET (tem, Lisp_Window_Configuration, data);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2750 return (tem);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2751 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2752
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2753 DEFUN ("save-window-excursion", Fsave_window_excursion, Ssave_window_excursion,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2754 0, UNEVALLED, 0,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2755 "Execute body, preserving window sizes and contents.\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2756 Restores which buffer appears in which window, where display starts,\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2757 as well as the current buffer.\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2758 Does not restore the value of point in current buffer.")
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2759 (args)
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2760 Lisp_Object args;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2761 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2762 register Lisp_Object val;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2763 register int count = specpdl_ptr - specpdl;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2764
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2765 record_unwind_protect (Fset_window_configuration,
358
71c9042fb90d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 338
diff changeset
2766 Fcurrent_window_configuration (Qnil));
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2767 val = Fprogn (args);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2768 return unbind_to (count, val);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2769 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2770
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2771 init_window_once ()
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2772 {
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
2773 #ifdef MULTI_FRAME
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
2774 selected_frame = make_terminal_frame ();
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
2775 minibuf_window = selected_frame->minibuffer_window;
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
2776 selected_window = selected_frame->selected_window;
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
2777 last_nonminibuf_frame = selected_frame;
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
2778 #else /* not MULTI_FRAME */
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2779 extern Lisp_Object get_minibuffer ();
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2780
983
eb19dfaec9c4 * window.c (window_loop): This used to keep track of the first
Jim Blandy <jimb@redhat.com>
parents: 972
diff changeset
2781 minibuf_window = make_window ();
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
2782 FRAME_ROOT_WINDOW (selected_frame) = make_window ();
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2783
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
2784 XWINDOW (FRAME_ROOT_WINDOW (selected_frame))->next = minibuf_window;
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
2785 XWINDOW (minibuf_window)->prev = FRAME_ROOT_WINDOW (selected_frame);
983
eb19dfaec9c4 * window.c (window_loop): This used to keep track of the first
Jim Blandy <jimb@redhat.com>
parents: 972
diff changeset
2786 XWINDOW (minibuf_window)->mini_p = Qt;
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2787
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2788 /* These values 9 and 10 are arbitrary,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2789 just so that there is "something there."
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2790 Correct values are put in in init_xdisp */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2791
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
2792 XFASTINT (XWINDOW (FRAME_ROOT_WINDOW (selected_frame))->width) = 10;
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2793 XFASTINT (XWINDOW (minibuf_window)->width) = 10;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2794
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
2795 XFASTINT (XWINDOW (FRAME_ROOT_WINDOW (selected_frame))->height) = 9;
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2796 XFASTINT (XWINDOW (minibuf_window)->top) = 9;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2797 XFASTINT (XWINDOW (minibuf_window)->height) = 1;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2798
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2799 /* Prevent error in Fset_window_buffer. */
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
2800 XWINDOW (FRAME_ROOT_WINDOW (selected_frame))->buffer = Qt;
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2801 XWINDOW (minibuf_window)->buffer = Qt;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2802
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2803 /* Now set them up for real. */
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
2804 Fset_window_buffer (FRAME_ROOT_WINDOW (selected_frame),
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 722
diff changeset
2805 Fcurrent_buffer ());
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2806 Fset_window_buffer (minibuf_window, get_minibuffer (0));
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2807
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
2808 selected_window = FRAME_ROOT_WINDOW (selected_frame);
362
d1e5cf833d37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 358
diff changeset
2809 /* Make sure this window seems more recently used than
d1e5cf833d37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 358
diff changeset
2810 a newly-created, never-selected window. Increment
d1e5cf833d37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 358
diff changeset
2811 window_select_count so the first selection ever will get
d1e5cf833d37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 358
diff changeset
2812 something newer than this. */
d1e5cf833d37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 358
diff changeset
2813 XFASTINT (XWINDOW (selected_window)->use_time) = ++window_select_count;
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
2814 #endif /* not MULTI_FRAME */
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2815 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2816
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2817 syms_of_window ()
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2818 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2819 Qwindowp = intern ("windowp");
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2820 staticpro (&Qwindowp);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2821
1444
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
2822 Qlive_window_p = intern ("live-window-p");
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
2823 staticpro (&Qlive_window_p);
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
2824
1016
817b0ce337d7 * window.c (Fset_window_configuration): Removed #if 0'd code which
Jim Blandy <jimb@redhat.com>
parents: 983
diff changeset
2825 #ifndef MULTI_FRAME
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2826 /* Make sure all windows get marked */
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2827 staticpro (&minibuf_window);
1016
817b0ce337d7 * window.c (Fset_window_configuration): Removed #if 0'd code which
Jim Blandy <jimb@redhat.com>
parents: 983
diff changeset
2828 #endif
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2829
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2830 DEFVAR_LISP ("temp-buffer-show-function", &Vtemp_buffer_show_function,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2831 "Non-nil means call as function to display a help buffer.\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2832 Used by `with-output-to-temp-buffer'.");
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2833 Vtemp_buffer_show_function = Qnil;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2834
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2835 DEFVAR_LISP ("display-buffer-function", &Vdisplay_buffer_function,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2836 "If non-nil, function to call to handle `display-buffer'.\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2837 It will receive two args, the buffer and a flag which if non-nil means\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2838 that the currently selected window is not acceptable.\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2839 Commands such as `switch-to-buffer-other-window' and `find-file-other-window'\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2840 work using this function.");
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2841 Vdisplay_buffer_function = Qnil;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2842
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2843 DEFVAR_LISP ("mouse-window", &Vmouse_window,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2844 "Window that the last mouse click occurred on.");
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2845 Vmouse_window = Qnil;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2846
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2847 DEFVAR_LISP ("mouse-event", &Vmouse_event,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2848 "The last mouse-event object. A list of four elements:\n\
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
2849 ((X-POS Y-POS) WINDOW FRAME-PART KEYSEQ).\n\
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2850 KEYSEQ is a string, the key sequence to be looked up in the mouse maps.\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2851 WINDOW is the window that the click applies do.\n\
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
2852 If FRAME-PART is non-nil, the event was on a scrollbar;\n\
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2853 then Y-POS is really the total length of the scrollbar, while X-POS is\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2854 the relative position of the scrollbar's value within that total length.\n\
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
2855 FRAME-PART is one of the following symbols:\n\
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2856 `vertical-scrollbar', `vertical-slider',\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2857 `vertical-thumbup', `vertical-thumbdown',\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2858 `horizontal-scrollbar', `horizontal-slider',\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2859 `horizontal-thumbleft', `horizontal-thumbright'");
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2860 Vmouse_event = Qnil;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2861
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2862 DEFVAR_LISP ("minibuffer-scroll-window", &Vminibuf_scroll_window,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2863 "Non-nil means it is the window that C-M-v in minibuffer should scroll.");
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2864 Vminibuf_scroll_window = Qnil;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2865
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2866 DEFVAR_LISP ("other-window-scroll-buffer", &Vother_window_scroll_buffer,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2867 "If non-nil, this is a buffer and \\[scroll-other-window] should scroll its window.");
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2868 Vother_window_scroll_buffer = Qnil;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2869
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
2870 #ifdef MULTI_FRAME
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
2871 DEFVAR_BOOL ("pop-up-frames", &pop_up_frames,
780
b3b1e7d8b8aa entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 769
diff changeset
2872 "*Non-nil means `display-buffer' should make a separate frame.");
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
2873 pop_up_frames = 0;
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2874
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
2875 DEFVAR_LISP ("pop-up-frame-function", &Vpop_up_frame_function,
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
2876 "*If non-nil, function to call to handle automatic new frame creation.\n\
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
2877 It is called with no arguments and should return a newly created frame.\n\
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2878 \n\
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
2879 A typical value might be `(lambda () (new-frame pop-up-frame-alist))'\n\
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
2880 where `pop-up-frame-alist' would hold the default frame parameters.");
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 735
diff changeset
2881 Vpop_up_frame_function = Qnil;
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2882 #endif
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2883
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2884 DEFVAR_BOOL ("pop-up-windows", &pop_up_windows,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2885 "*Non-nil means display-buffer should make new windows.");
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2886 pop_up_windows = 1;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2887
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2888 DEFVAR_INT ("next-screen-context-lines", &next_screen_context_lines,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2889 "*Number of lines of continuity when scrolling by screenfuls.");
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2890 next_screen_context_lines = 2;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2891
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2892 DEFVAR_INT ("split-height-threshold", &split_height_threshold,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2893 "*display-buffer would prefer to split the largest window if this large.\n\
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2894 If there is only one window, it is split regardless of this value.");
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2895 split_height_threshold = 500;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2896
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2897 DEFVAR_INT ("window-min-height", &window_min_height,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2898 "*Delete any window less than this tall (including its mode line).");
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2899 window_min_height = 4;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2900
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2901 DEFVAR_INT ("window-min-width", &window_min_width,
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2902 "*Delete any window less than this wide.");
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2903 window_min_width = 10;
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2904
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2905 defsubr (&Sselected_window);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2906 defsubr (&Sminibuffer_window);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2907 defsubr (&Swindow_minibuffer_p);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2908 defsubr (&Swindowp);
1444
559d2f2119aa * window.c: Try to deal coherently with deleted windows:
Jim Blandy <jimb@redhat.com>
parents: 1345
diff changeset
2909 defsubr (&Slive_window_p);
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2910 defsubr (&Spos_visible_in_window_p);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2911 defsubr (&Swindow_buffer);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2912 defsubr (&Swindow_height);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2913 defsubr (&Swindow_width);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2914 defsubr (&Swindow_hscroll);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2915 defsubr (&Sset_window_hscroll);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2916 defsubr (&Swindow_edges);
432
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
2917 defsubr (&Scoordinates_in_window_p);
4d44159f7481 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 362
diff changeset
2918 defsubr (&Swindow_at);
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2919 defsubr (&Swindow_point);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2920 defsubr (&Swindow_start);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2921 defsubr (&Swindow_end);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2922 defsubr (&Sset_window_point);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2923 defsubr (&Sset_window_start);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2924 defsubr (&Swindow_dedicated_p);
722
0a2391511b46 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 708
diff changeset
2925 defsubr (&Sset_window_dedicated_p);
265
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2926 defsubr (&Swindow_display_table);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2927 defsubr (&Sset_window_display_table);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2928 defsubr (&Snext_window);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2929 defsubr (&Sprevious_window);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2930 defsubr (&Sother_window);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2931 defsubr (&Sget_lru_window);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2932 defsubr (&Sget_largest_window);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2933 defsubr (&Sget_buffer_window);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2934 defsubr (&Sdelete_other_windows);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2935 defsubr (&Sdelete_windows_on);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2936 defsubr (&Sreplace_buffer_in_windows);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2937 defsubr (&Sdelete_window);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2938 defsubr (&Sset_window_buffer);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2939 defsubr (&Sselect_window);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2940 defsubr (&Sdisplay_buffer);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2941 defsubr (&Ssplit_window);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2942 defsubr (&Senlarge_window);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2943 defsubr (&Sshrink_window);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2944 defsubr (&Sscroll_up);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2945 defsubr (&Sscroll_down);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2946 defsubr (&Sscroll_left);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2947 defsubr (&Sscroll_right);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2948 defsubr (&Sscroll_other_window);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2949 defsubr (&Srecenter);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2950 defsubr (&Smove_to_window_line);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2951 defsubr (&Swindow_configuration_p);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2952 defsubr (&Sset_window_configuration);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2953 defsubr (&Scurrent_window_configuration);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2954 defsubr (&Ssave_window_excursion);
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2955 }
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2956
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2957 keys_of_window ()
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2958 {
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2959 initial_define_key (control_x_map, '1', "delete-other-windows");
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2960 initial_define_key (control_x_map, '2', "split-window");
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2961 initial_define_key (control_x_map, '0', "delete-window");
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2962 initial_define_key (control_x_map, 'o', "other-window");
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2963 initial_define_key (control_x_map, '^', "enlarge-window");
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2964 initial_define_key (control_x_map, '<', "scroll-left");
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2965 initial_define_key (control_x_map, '>', "scroll-right");
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2966
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2967 initial_define_key (global_map, Ctl ('V'), "scroll-up");
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2968 initial_define_key (meta_map, Ctl ('V'), "scroll-other-window");
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2969 initial_define_key (meta_map, 'v', "scroll-down");
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2970
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2971 initial_define_key (global_map, Ctl('L'), "recenter");
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2972 initial_define_key (meta_map, 'r', "move-to-window-line");
8df170a4c9d1 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2973 }