Annotation of GNUtools/emacs/src/window.h, revision 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.