X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/096855a66a12083b635eeaff7771bb84e28d02e9..26c76ace8de7d0fa687d8a76b3a3bce5fb1ee692:/src/window.h diff --git a/src/window.h b/src/window.h index a7db04810c..ba2f81e53d 100644 --- a/src/window.h +++ b/src/window.h @@ -1,5 +1,5 @@ /* Window definitions for GNU Emacs. - Copyright (C) 1985, 1986, 1992, 1993 Free Software Foundation, Inc. + Copyright (C) 1985, 1986, 1993, 1995 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -15,7 +15,8 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Emacs; see the file COPYING. If not, write to -the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ /* Windows are allocated as if they were vectors, but then the @@ -75,7 +76,7 @@ struct window { /* The first two fields are really the header of a vector */ /* The window code does not refer to them. */ - int size; + EMACS_INT size; struct Lisp_Vector *vec_next; /* The frame this window is on. */ Lisp_Object frame; @@ -121,8 +122,13 @@ struct window Lisp_Object temslot; /* text.modified of displayed buffer as of last time display completed */ Lisp_Object last_modified; + /* BUF_OVERLAY_MODIFIED of displayed buffer as of last complete update. */ + Lisp_Object last_overlay_modified; /* Value of point at that time */ Lisp_Object last_point; + /* Non-nil if the buffer was "modified" when the window + was last updated. */ + Lisp_Object last_had_star; /* This window's vertical scroll bar. This field is only for use by the window-system-dependent code which implements the scroll bars; it can store anything it likes here. If this @@ -170,12 +176,52 @@ struct window /* If we have highlighted the region (or any part of it), this is the mark position that we used, as an integer. */ Lisp_Object region_showing; + /* The column number currently displayed in this window's mode line, + or nil if column numbers are not being displayed. */ + Lisp_Object column_number_displayed; + /* If redisplay in this window goes beyond this buffer position, + must run the redisplay-end-trigger-hook. */ + Lisp_Object redisplay_end_trigger; }; /* 1 if W is a minibuffer window. */ #define MINI_WINDOW_P(W) (!EQ ((W)->mini_p, Qnil)) +/* Return the frame column at which the text in window W starts. + This is different from the `left' field because it does not include + a left-hand scroll bar if any. */ + +#define WINDOW_LEFT_MARGIN(W) \ + (XFASTINT ((W)->left) \ + + FRAME_LEFT_SCROLL_BAR_WIDTH (XFRAME (WINDOW_FRAME (W)))) + +/* Return the frame column before window W ends. + This includes a right-hand scroll bar, if any. */ + +#define WINDOW_RIGHT_EDGE(W) \ + (XFASTINT ((W)->left) + XFASTINT ((W)->width)) + +/* Return the frame column before which the text in window W ends. + This is different from WINDOW_RIGHT_EDGE because it does not include + a right-hand scroll bar if any. */ + +#define WINDOW_RIGHT_MARGIN(W) \ + (WINDOW_RIGHT_EDGE (W) \ + - (FRAME_HAS_VERTICAL_SCROLL_BARS_ON_RIGHT (XFRAME (WINDOW_FRAME (W))) \ + ? FRAME_SCROLL_BAR_COLS (XFRAME (WINDOW_FRAME (W))) \ + : 0)) + +/* 1 if window W takes up the full width of its frame. */ + +#define WINDOW_FULL_WIDTH_P(W) \ + (XFASTINT ((W)->width) == FRAME_WINDOW_WIDTH (XFRAME (WINDOW_FRAME (W)))) + +/* 1 if window W's has no other windows to its right in its frame. */ + +#define WINDOW_RIGHTMOST_P(W) \ + (WINDOW_RIGHT_EDGE (W) == FRAME_WINDOW_WIDTH (XFRAME (WINDOW_FRAME (W)))) + /* This is the window in which the terminal's cursor should be left when nothing is being done with it. This must always be a leaf window, and its buffer is selected by @@ -225,7 +271,7 @@ extern Lisp_Object window_from_coordinates (); extern Lisp_Object Fwindow_dedicated_p (); /* Prompt to display in front of the minibuffer contents. */ -extern char *minibuf_prompt; +extern Lisp_Object minibuf_prompt; /* The visual width of the above. */ extern int minibuf_prompt_width; @@ -236,12 +282,20 @@ extern int minibuf_prompt_width; minibuf_prompt as well as the buffer. */ extern char *echo_area_glyphs; +/* This is the length of the message in echo_area_glyphs. */ +extern int echo_area_glyphs_length; + /* Value of echo_area_glyphs when it was last acted on. If this is nonzero, there is a message on the frame in the minibuffer and it should be erased as soon as it is no longer requested to appear. */ extern char *previous_echo_glyphs; +/* This is the window where the echo area message was displayed. + It is always a minibuffer window, but it may not be the + same window currently active as a minibuffer. */ +extern Lisp_Object echo_area_window; + /* Depth in recursive edits. */ extern int command_loop_level; @@ -251,7 +305,7 @@ extern int minibuf_level; /* true iff we should redraw the mode lines on the next redisplay. */ extern int update_mode_lines; -/* Minimum value of GPT since last redisplay that finished. */ +/* Minimum value of GPT - BEG since last redisplay that finished. */ extern int beg_unchanged; @@ -260,10 +314,15 @@ extern int beg_unchanged; extern int end_unchanged; /* MODIFF as of last redisplay that finished; - if it matches MODIFF, beg_unchanged and end_unchangedn + if it matches MODIFF, beg_unchanged and end_unchanged contain no useful information. */ extern int unchanged_modified; +/* BUF_OVERLAY_MODIFF of current buffer, as of last redisplay that finished; + if it matches BUF_OVERLAY_MODIFF, beg_unchanged and end_unchanged + contain no useful information. */ +extern int overlay_unchanged_modified; + /* Nonzero if BEGV - BEG or Z - ZV of current buffer has changed since last redisplay that finished. */ extern int clip_changed;