/* Window definitions for GNU Emacs.
- Copyright (C) 1985, 1986, 1993, 1995 Free Software Foundation, Inc.
+ Copyright (C) 1985, 1986, 1993, 1995, 1997, 1998, 1999, 2000, 2001
+ Free Software Foundation, Inc.
This file is part of GNU Emacs.
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. */
+ but that the next redisplay is not obliged to use the new value.
+ This is used in Fdelete_other_windows to force a call to
+ Vwindow_scroll_functions; also by Frecenter with argument. */
Lisp_Object optional_new_start;
/* Number of columns display within the window is scrolled to the left. */
Lisp_Object hscroll;
+ /* Minimum hscroll for automatic hscrolling. This is the value
+ the user has set, by set-window-hscroll for example. */
+ Lisp_Object min_hscroll;
/* Number saying how recently window was selected */
Lisp_Object use_time;
/* Unique number of window assigned when it was created */
Lisp_Object redisplay_end_trigger;
/* Non-nil means don't delete this window for becoming "too small". */
Lisp_Object too_small_ok;
-
+
+ /* Original window height and top before mini-window was
+ enlarged. */
+ Lisp_Object orig_height, orig_top;
+
/* No Lisp data may follow below this point without changing
mark_object in alloc.c. The member current_matrix must be the
first non-Lisp member. */
/* Intended cursor position. This is a position within the
glyph matrix. */
struct cursor_pos cursor;
-
+
/* Where the cursor actually is. */
struct cursor_pos phys_cursor;
-
- /* Cursor type last drawn on the window. Used for X frames; -1
- initially. */
- int phys_cursor_type;
+
+ /* Cursor type and width of last cursor drawn on the window.
+ Used for X and w32 frames; -1 initially. */
+ int phys_cursor_type, phys_cursor_width;
/* This is handy for undrawing the cursor. */
int phys_cursor_ascent, phys_cursor_height;
-
+
/* Non-zero means the cursor is currently displayed. This can be
set to zero by functions overpainting the cursor image. */
unsigned phys_cursor_on_p : 1;
/* Amount by which lines of this window are scrolled in
y-direction (smooth scrolling). */
int vscroll;
-
+
/* Z_BYTE - the buffer position of the last glyph in the current matrix
of W. Only valid if WINDOW_END_VALID is not nil. */
int window_end_bytepos;
+
+ /* 1 means the window start of this window is frozen and may not
+ be changed during redisplay. If point is not in the window,
+ accept that. */
+ unsigned frozen_window_start_p : 1;
+
+ /* 1 means that this window's height is temporarily fixed. Used
+ in resize_mini_window to precent resizing selected_window, if
+ possible. */
+ unsigned height_fixed_p : 1;
};
/* 1 if W is a minibuffer window. */
-#define MINI_WINDOW_P(W) (!EQ ((W)->mini_p, Qnil))
+#define MINI_WINDOW_P(W) (!NILP ((W)->mini_p))
/* Return the window 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))))
? FRAME_SCROLL_BAR_COLS (XFRAME (WINDOW_FRAME (W))) \
: 0))
-/* 1 if window W takes up the full width of its frame. */
+/* 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. */
+/* 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
extern Lisp_Object minibuf_window;
+/* Non-nil means it is the window whose mode line should be
+ shown as the selected window when the minibuffer is selected. */
+
+extern Lisp_Object minibuf_selected_window;
+
/* Non-nil => window to for C-M-v to scroll when the minibuffer is
selected. */
EXFUN (Fset_window_vscroll, 2);
EXFUN (Fwindow_vscroll, 1);
EXFUN (Fset_window_margins, 3);
+EXFUN (Fwindow_live_p, 1);
+EXFUN (Fset_window_point, 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 *, int));
+extern Lisp_Object window_from_coordinates P_ ((struct frame *, int, int,
+ enum window_part *, 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 change_window_heights P_ ((Lisp_Object, int));
extern void delete_all_subwindows P_ ((struct window *));
+extern void freeze_window_starts P_ ((struct frame *, int));
+extern void foreach_window P_ ((struct frame *,
+ int (* fn) (struct window *, void *),
+ void *));
+extern void grow_mini_window P_ ((struct window *, int));
+extern void shrink_mini_window P_ ((struct window *));
+
/* Make WINDOW display BUFFER as its contents. RUN_HOOKS_P non-zero
means it's allowed to run hooks. See make_frame for a case where
extern int minibuf_prompt_width;
-/* Message to display instead of minibuffer contents. This is what
- the functions error and message make, and command echoing uses it
- as well. It overrides the minibuf_prompt as well as the buffer. */
-
-extern char *echo_area_glyphs;
-
-/* A Lisp string to display instead of mini-buffer contents, analogous
- to echo_area_glyphs. If this is a string, display that string.
- Otherwise, if echo_area_glyphs is non-null, display that. */
-
-extern Lisp_Object echo_area_message;
-
-/* 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;
-
-extern Lisp_Object previous_echo_area_message;
-
/* 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 int update_mode_lines;
-/* Minimum value of GPT - BEG since last redisplay that finished. */
-
-extern int beg_unchanged;
-
-/* Minimum value of Z - GPT since last redisplay that finished. */
-
-extern int end_unchanged;
-
-/* MODIFF as of last redisplay that finished; 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 windows_or_buffers_changed;
+/* Nonzero means a frame's cursor type has been changed. */
+
+extern int cursor_type_changed;
+
/* Number of windows displaying the selected buffer. Normally this is
1, but it can be more. */
struct glyph *get_phys_cursor_glyph P_ ((struct window *w));
+/* Value is non-zero if WINDOW is a live window. */
+
+#define WINDOW_LIVE_P(WINDOW) \
+ (WINDOWP ((WINDOW)) && !NILP (XWINDOW ((WINDOW))->buffer))
+
#endif /* not WINDOW_H_INCLUDED */