1: /* Window definitions for GNU Emacs.
2: Copyright (C) 1985 Richard M. Stallman.
3:
4: This file is part of GNU Emacs.
5:
6: GNU Emacs is distributed in the hope that it will be useful,
7: but WITHOUT ANY WARRANTY. No author or distributor
8: accepts responsibility to anyone for the consequences of using it
9: or for whether it serves any particular purpose or works at all,
10: unless he says so in writing. Refer to the GNU Emacs General Public
11: License for full details.
12:
13: Everyone is granted permission to copy, modify and redistribute
14: GNU Emacs, but only under the conditions described in the
15: GNU Emacs General Public License. A copy of this license is
16: supposed to have been given to you along with GNU Emacs so you
17: can know your rights and responsibilities. It should be in a
18: file named COPYING. Among other things, the copyright notice
19: and this notice must be preserved on all copies. */
20:
21:
22: /* Windows are allocated as if they were vectors, but then the
23: Lisp data type is changed to Lisp_Window. They are garbage
24: collected along with the vectors.
25:
26: All windows in use are arranged into a tree, with pointers up and down.
27:
28: Windows that are leaves of the tree are actually displayed
29: and show the contents of buffers. Windows that are not leaves
30: are used for representing the way groups of leaf windows are
31: arranged on the screen. Leaf windows never become non-leaves.
32: They are deleted only by calling delete-window on them (but
33: this can be done implicitly). Combination windows can be created
34: and deleted at any time.
35:
36: A leaf window has a non-nil buffer field, and also
37: has markers in its start and pointm fields. Non-leaf windows
38: have nil in these fields.
39:
40: Non-leaf windows are either vertical or horizontal combinations.
41:
42: A vertical combination window has children that are arranged
43: one above the next. Its vchild field points to the uppermost child.
44: The parent field of each of the children points to the vertical
45: combination window. The next field of each child points to the
46: child below it, or is nil for the lowest child. The prev field
47: or each child points to the child above it, or is nil for the highest child.
48:
49: A horizontal combination window has children that are side by side.
50: Its hchild field points to the leftmost child. In each child
51: the next field points to the child to the right and the prev field
52: points to the child to the left.
53:
54: The children of a vertical combination window may be leaf windows
55: or horizontal combination windows. The children of a horizontal
56: combination window may be leaf windows or vertical combination windows.
57:
58: At the top of the tree are two windows which have nil as parent.
59: The second of these is minibuf_window. The first one manages all
60: the screen area that is not minibuffer, and is called the root window.
61: Different windows can be the root at different times;
62: initially the root window is a leaf window, but if more windows
63: are created then that leaf window ceases to be root and a newly
64: made combination window becomes root instead.
65:
66: In any case, prev of the minibuf window is the root window and
67: next of the root window is the minibuf window. To find the
68: root window at any time, do XWINDOW (minibuf_window)->prev.
69:
70: */
71:
72: struct window
73: {
74: /* The first two fields are really the header of a vector */
75: /* The window code does not refer to them. */
76: int size;
77: struct Lisp_Vector *vec_next;
78: /* Following child (to right or down) at same level of tree */
79: Lisp_Object next;
80: /* Preceding child (to left or up) at same level of tree */
81: Lisp_Object prev;
82: /* First child of this window. */
83: /* vchild is used if this is a vertical combination,
84: hchild if this is a horizontal combination. */
85: Lisp_Object hchild, vchild;
86: /* The window this one is a child of. */
87: Lisp_Object parent;
88: /* The upper left corner coordinates of this window,
89: as integers relative to upper left corner of screen = 0, 0 */
90: Lisp_Object left;
91: Lisp_Object top;
92: /* The size of the window */
93: Lisp_Object height;
94: Lisp_Object width;
95: /* The buffer displayed in this window */
96: /* Of the fields vchild, hchild and buffer, only one is non-nil. */
97: Lisp_Object buffer;
98: /* A marker pointing to where in the text to start displaying */
99: Lisp_Object start;
100: /* A marker pointing to where in the text point is in this window,
101: used only when the window is not selected.
102: This exists so that when multiple windows show one buffer
103: each one can have its own value of point. */
104: Lisp_Object pointm;
105: /* Non-nil means next redisplay must use the value of start
106: set up for it in advance. Set by scrolling commands. */
107: Lisp_Object force_start;
108: /* Number of columns display within the window is scrolled to the left.
109: Currently always zero since this is not implemented. */
110: Lisp_Object hscroll;
111: /* Number saying how recently window was selected */
112: Lisp_Object use_time;
113: /* Unique number of window assigned when it was created */
114: Lisp_Object sequence_number;
115: /* No permanent meaning; used by save-window-excursion's bookkeeping */
116: Lisp_Object temslot;
117: /* text.modified of displayed buffer as of last time display completed */
118: Lisp_Object last_modified;
119: /* Value of point at that time */
120: Lisp_Object last_point;
121: /* The rest are currently not used or only half used */
122: /* Screen coords of point at that time */
123: Lisp_Object last_point_x;
124: Lisp_Object last_point_y;
125: /* Screen coords of mark as of last time display completed */
126: /* May be nil if mark does not exist or was not on screen */
127: Lisp_Object last_mark_x;
128: Lisp_Object last_mark_y;
129: /* Number of characters in buffer past bottom of window,
130: as of last redisplay that finished. */
131: Lisp_Object window_end_pos;
132: /* Vertical position (relative to window top) of that buffer position
133: of the first of those characters */
134: Lisp_Object window_end_vpos;
135: /* Non-nil means must regenerate mode line of this window */
136: Lisp_Object redo_mode_line;
137: };
138:
139: /* This is the window which displays the minibuffer.
140: It is always the same window. */
141:
142: extern Lisp_Object minibuf_window;
143:
144: /* This is the window in which the terminal's cursor should
145: be left when nothing is being done with it. This must
146: always be a leaf window, and its buffer is selected by
147: the top level editing loop at the end of each command. */
148:
149: extern Lisp_Object selected_window;
150:
151: #define new_windows 1
152:
153: Lisp_Object Fnext_window ();
154: Lisp_Object Fselect_window ();
155: Lisp_Object Fdisplay_buffer ();
156: Lisp_Object Fshow_buffer ();
157:
158: extern char *minibuf_prompt; /* Prompt to display in front of the minibuffer contents */
159:
160: extern char *minibuf_message; /* Message to display instead of minibuffer contents */
161: /* This is what the functions error and message make, */
162: /* and command echoing uses it as well. */
163: /* It overrides the minibuf_prompt as well as the buffer */
164:
165: extern int RecurseDepth; /* Depth in recursive edits */
166:
167: extern int MinibufDepth; /* Depth in minibuffer invocations */
168:
169: extern int RedoModes; /* true iff we should redraw the mode lines
170: on the next redisplay */
171:
172: /* Minimum value of bf_s1 since last redisplay that finished.
173: Valid for current buffer unless Cant1WinOpt is nonzero. */
174:
175: extern int beg_unchanged;
176:
177: /* Minimum value of bf_s2 since last redisplay that finished.
178: Valid for current buffer unless Cant1WinOpt is nonzero. */
179:
180: extern int end_unchanged;
181:
182: /* bf_modified as of last redisplay that finished;
183: if it matches bf_modified, beg_unchanged and end_unchanged
184: contain no useful information */
185: extern int unchanged_modified;
186:
187: /* Nonzero if head_clip or tail_clip of current buffer has changed
188: since last redisplay that finished */
189: extern int clip_changed;
190:
191: /* Nonzero if window sizes or contents have changed
192: since last redisplay that finished */
193: extern int windows_or_buffers_changed;
Defined struct's
window
defined in line
72; used 94 times
- in /usr/src/new/emacs/src/buffer.c line
656(2)
- in /usr/src/new/emacs/src/dispnew.c line
352(2),
392(2),
426(2),
448(2),
493(2)
- in /usr/src/new/emacs/src/indent.c line
386(2),
504(2)
- in /usr/src/new/emacs/src/window.c line
82-85(4),
116(2),
169(2),
234(2),
264(2),
277(2),
294(2),
369(2),
500(2),
654-655(4),
718-719(4),
779(2),
810(2),
841-842(4),
953(2),
986(2),
1107(2),
1115(2),
1137(2),
1221(2),
1390(2),
1428(2),
1479(2),
1572(2),
1621(2)
- in /usr/src/new/emacs/src/xdisp.c line
249(2),
423(2),
470(2),
688(2),
740(2),
1058(2),
1322(2),
1374(2),
1557(2),
1698(2)
Defined macros
Usage of this include