annotate src/window.c @ 4413:5a00cec8e9b0

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