annotate src/window.c @ 939:c4dcdc9aed70

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