Annotation of GNUtools/emacs/src/window.h, revision 1.1.1.1

1.1       root        1: /* Window definitions for GNU Emacs.
                      2:    Copyright (C) 1985, 1986 Free Software Foundation, Inc.
                      3: 
                      4: This file is part of GNU Emacs.
                      5: 
                      6: GNU Emacs is free software; you can redistribute it and/or modify
                      7: it under the terms of the GNU General Public License as published by
                      8: the Free Software Foundation; either version 1, or (at your option)
                      9: any later version.
                     10: 
                     11: GNU Emacs is distributed in the hope that it will be useful,
                     12: but WITHOUT ANY WARRANTY; without even the implied warranty of
                     13: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                     14: GNU General Public License for more details.
                     15: 
                     16: You should have received a copy of the GNU General Public License
                     17: along with GNU Emacs; see the file COPYING.  If not, write to
                     18: the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
                     19: 
                     20: 
                     21: /* Windows are allocated as if they were vectors, but then the
                     22: Lisp data type is changed to Lisp_Window.  They are garbage
                     23: collected along with the vectors.
                     24: 
                     25: All windows in use are arranged into a tree, with pointers up and down.
                     26: 
                     27: Windows that are leaves of the tree are actually displayed
                     28: and show the contents of buffers.  Windows that are not leaves
                     29: are used for representing the way groups of leaf windows are
                     30: arranged on the screen.  Leaf windows never become non-leaves.
                     31: They are deleted only by calling delete-window on them (but
                     32: this can be done implicitly).  Combination windows can be created
                     33: and deleted at any time.
                     34: 
                     35: A leaf window has a non-nil buffer field, and also
                     36:  has markers in its start and pointm fields.  Non-leaf windows
                     37:  have nil in these fields.
                     38: 
                     39: Non-leaf windows are either vertical or horizontal combinations.
                     40: 
                     41: A vertical combination window has children that are arranged
                     42: one above the next.  Its vchild field points to the uppermost child.
                     43: The parent field of each of the children points to the vertical
                     44: combination window.  The next field of each child points to the
                     45: child below it, or is nil for the lowest child.  The prev field
                     46: or each child points to the child above it, or is nil for the highest child.
                     47: 
                     48: A horizontal combination window has children that are side by side.
                     49: Its hchild field points to the leftmost child.  In each child
                     50: the next field points to the child to the right and the prev field
                     51: points to the child to the left.
                     52: 
                     53: The children of a vertical combination window may be leaf windows
                     54: or horizontal combination windows.  The children of a horizontal
                     55: combination window may be leaf windows or vertical combination windows.
                     56: 
                     57: At the top of the tree are two windows which have nil as parent.
                     58: The second of these is minibuf_window.  The first one manages all
                     59: the screen area that is not minibuffer, and is called the root window.
                     60: Different windows can be the root at different times;
                     61: initially the root window is a leaf window, but if more windows
                     62: are created then that leaf window ceases to be root and a newly
                     63: made combination window becomes root instead.
                     64: 
                     65: In any case, prev of the minibuf window is the root window and
                     66: next of the root window is the minibuf window.  To find the
                     67: root window at any time, do XWINDOW (minibuf_window)->prev.
                     68: 
                     69: */
                     70: 
                     71: struct window
                     72:   {
                     73:     /* The first two fields are really the header of a vector */
                     74:     /* The window code does not refer to them.  */
                     75:     int size;
                     76:     struct Lisp_Vector *vec_next;
                     77:     /* Following child (to right or down) at same level of tree */
                     78:     Lisp_Object next;
                     79:     /* Preceding child (to left or up) at same level of tree */
                     80:     Lisp_Object prev;
                     81:     /* First child of this window. */
                     82:     /* vchild is used if this is a vertical combination,
                     83:        hchild if this is a horizontal combination. */
                     84:     Lisp_Object hchild, vchild;
                     85:     /* The window this one is a child of. */
                     86:     Lisp_Object parent;
                     87:     /* The upper left corner coordinates of this window,
                     88:        as integers relative to upper left corner of screen = 0, 0 */
                     89:     Lisp_Object left;
                     90:     Lisp_Object top;
                     91:     /* The size of the window */
                     92:     Lisp_Object height;
                     93:     Lisp_Object width;
                     94:     /* The buffer displayed in this window */
                     95:     /* Of the fields vchild, hchild and buffer, only one is non-nil.  */
                     96:     Lisp_Object buffer;
                     97:     /* A marker pointing to where in the text to start displaying */
                     98:     Lisp_Object start;
                     99:     /* A marker pointing to where in the text point is in this window,
                    100:        used only when the window is not selected.
                    101:        This exists so that when multiple windows show one buffer
                    102:        each one can have its own value of point.  */
                    103:     Lisp_Object pointm;
                    104:     /* Non-nil means next redisplay must use the value of start
                    105:        set up for it in advance.  Set by scrolling commands.  */
                    106:     Lisp_Object force_start;
                    107:     /* Number of columns display within the window is scrolled to the left.  */
                    108:     Lisp_Object hscroll;
                    109:     /* Number saying how recently window was selected */
                    110:     Lisp_Object use_time;
                    111:     /* Unique number of window assigned when it was created */
                    112:     Lisp_Object sequence_number;
                    113:     /* No permanent meaning; used by save-window-excursion's bookkeeping */
                    114:     Lisp_Object temslot;
                    115:     /* text.modified of displayed buffer as of last time display completed */
                    116:     Lisp_Object last_modified;
                    117:     /* Value of point at that time */
                    118:     Lisp_Object last_point;
                    119: /* The rest are currently not used or only half used */
                    120:     /* Screen coords of point at that time */
                    121:     Lisp_Object last_point_x;
                    122:     Lisp_Object last_point_y;
                    123:     /* Screen coords of mark as of last time display completed */
                    124:     /* May be nil if mark does not exist or was not on screen */
                    125:     Lisp_Object last_mark_x;
                    126:     Lisp_Object last_mark_y;
                    127:     /* Number of characters in buffer past bottom of window,
                    128:        as of last redisplay that finished. */
                    129:     Lisp_Object window_end_pos;
                    130:     /* t if window_end_pos is truly valid.
                    131:        This is nil if nontrivial redisplay is preempted
                    132:        since in that case the screen image that window_end_pos
                    133:        did not get onto the screen.  */
                    134:     Lisp_Object window_end_valid;
                    135:     /* Vertical position (relative to window top) of that buffer position
                    136:        of the first of those characters */
                    137:     Lisp_Object window_end_vpos;
                    138:     /* Non-nil means must regenerate mode line of this window */
                    139:     Lisp_Object update_mode_line;
                    140:     /* Non-nil means current value of `start'
                    141:        was the beginning of a line when it was chosen.  */
                    142:     Lisp_Object start_at_line_beg;
                    143:   };
                    144: 
                    145: /* This is the window which displays the minibuffer.
                    146:    It is always the same window.  */
                    147: 
                    148: extern Lisp_Object minibuf_window;
                    149: 
                    150: /* This is the window in which the terminal's cursor should
                    151:    be left when nothing is being done with it.  This must
                    152:    always be a leaf window, and its buffer is selected by
                    153:    the top level editing loop at the end of each command.  */
                    154: 
                    155: extern Lisp_Object selected_window;
                    156: 
                    157: /* Non-nil => window to for C-M-v to scroll
                    158:    when the minibuffer is selected.  */
                    159: extern Lisp_Object Vminibuf_scroll_window;
                    160: 
                    161: extern Lisp_Object Fnext_window ();
                    162: extern Lisp_Object Fselect_window ();
                    163: extern Lisp_Object Fdisplay_buffer ();
                    164: extern Lisp_Object Fset_window_buffer ();
                    165: 
                    166: /* Prompt to display in front of the minibuffer contents.  */
                    167: extern char *minibuf_prompt;
                    168: 
                    169: /* Message to display instead of minibuffer contents.  */
                    170: extern char *echo_area_contents;
                    171: 
                    172: /* Last message that was displayed in the echo area.  */
                    173: extern char *prev_echo_area_contents;
                    174: 
                    175: /* Depth in minibuffer invocations.  */
                    176: extern int minibuf_level;
                    177: 
                    178: /* Nonzero means redisplay all mode lines.  */
                    179: extern int update_mode_lines;
                    180: 
                    181: /* Minimum value of GPT since last redisplay that finished.  */
                    182: 
                    183: extern int beg_unchanged;
                    184: 
                    185: /* Minimum value of Z-GPT since last redisplay that finished.  */
                    186: 
                    187: extern int end_unchanged;
                    188: 
                    189: /* MODIFF as of last redisplay that finished;
                    190:    if it matches MODIFF, beg_unchanged and end_unchanged
                    191:    contain no useful information */
                    192: extern int unchanged_modified;
                    193: 
                    194: /* Nonzero if BEGV-BEG or Z-ZV of current buffer has changed
                    195:    since last redisplay that finished */
                    196: extern int clip_changed;
                    197: 
                    198: /* Nonzero if window sizes or contents have changed
                    199:    since last redisplay that finished */
                    200: extern int windows_or_buffers_changed;
                    201: 
                    202: /* Number of windows displaying the selected buffer.
                    203:    Normally this is 1, but it can be more.  */
                    204: extern int buffer_shared;

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.