/* Window definitions for GNU Emacs.
- Copyright (C) 1985, 1986, 1993 Free Software Foundation, Inc.
+ Copyright (C) 1985, 1986, 1993, 1995 Free Software Foundation, Inc.
This file is part of GNU Emacs.
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
{
/* 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;
/* Non-nil means next redisplay must use the value of start
set up for it in advance. Set by scrolling commands. */
Lisp_Object force_start;
+ /* Non-nil means we have explicitly changed the value of start,
+ but that the next redisplay is not obliged to use the new value. */
+ Lisp_Object optional_new_start;
/* Number of columns display within the window is scrolled to the left. */
Lisp_Object hscroll;
/* Number saying how recently window was selected */
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
/* 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 scroll bar or window-separating line on the right edge. */
+
+#define WINDOW_RIGHT_MARGIN(W) \
+ (WINDOW_RIGHT_EDGE (W) \
+ - (! FRAME_HAS_VERTICAL_SCROLL_BARS (XFRAME (WINDOW_FRAME (W))) \
+ ? ((WINDOW_RIGHTMOST_P (W)) ? 0 : 1) \
+ : 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
/* Last mouse-click event (nil if no mouse support). */
extern Lisp_Object Vmouse_event;
-extern Lisp_Object Fnext_window ();
-extern Lisp_Object Fselect_window ();
-extern Lisp_Object Fdisplay_buffer ();
-extern Lisp_Object Fset_window_buffer ();
-extern Lisp_Object make_window ();
-extern Lisp_Object window_from_coordinates ();
-extern Lisp_Object Fwindow_dedicated_p ();
+EXFUN (Fnext_window, 3);
+EXFUN (Fselect_window, 1);
+EXFUN (Fdisplay_buffer, 3);
+EXFUN (Fset_window_buffer, 2);
+extern Lisp_Object make_window P_ ((void));
+extern void delete_window P_ ((Lisp_Object));
+extern Lisp_Object window_from_coordinates P_ ((struct frame *, int, int, int *));
+EXFUN (Fwindow_dedicated_p, 1);
+extern int window_height P_ ((Lisp_Object));
+extern int window_width P_ ((Lisp_Object));
+extern void set_window_height P_ ((Lisp_Object, int, int));
+extern void set_window_width P_ ((Lisp_Object, int, int));
+extern void change_window_height P_ ((int, int));
+extern void delete_all_subwindows P_ ((struct window *));
/* 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;
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;
/* 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;
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;
/* If *ROWS or *COLS are too small a size for FRAME, set them to the
minimum allowable size. */
-extern void check_frame_size ( /* FRAME_PTR frame, int *rows, int *cols */ );
+extern void check_frame_size P_ ((struct frame *frame, int *rows, int *cols));