*** empty log message ***
This commit is contained in:
parent
be14d3120a
commit
44fa5b1e24
3 changed files with 436 additions and 436 deletions
492
src/window.c
492
src/window.c
File diff suppressed because it is too large
Load diff
28
src/window.h
28
src/window.h
|
@ -27,7 +27,7 @@ All windows in use are arranged into a tree, with pointers up and down.
|
|||
Windows that are leaves of the tree are actually displayed
|
||||
and show the contents of buffers. Windows that are not leaves
|
||||
are used for representing the way groups of leaf windows are
|
||||
arranged on the screen. Leaf windows never become non-leaves.
|
||||
arranged on the frame. Leaf windows never become non-leaves.
|
||||
They are deleted only by calling delete-window on them (but
|
||||
this can be done implicitly). Combination windows can be created
|
||||
and deleted at any time.
|
||||
|
@ -38,7 +38,7 @@ A leaf window has a non-nil buffer field, and also
|
|||
|
||||
Non-leaf windows are either vertical or horizontal combinations.
|
||||
|
||||
A vertical combination window has children that are arranged on the screen
|
||||
A vertical combination window has children that are arranged on the frame
|
||||
one above the next. Its vchild field points to the uppermost child.
|
||||
The parent field of each of the children points to the vertical
|
||||
combination window. The next field of each child points to the
|
||||
|
@ -57,7 +57,7 @@ combination window may be leaf windows or vertical combination windows.
|
|||
|
||||
At the top of the tree are two windows which have nil as parent.
|
||||
The second of these is minibuf_window. The first one manages all
|
||||
the screen area that is not minibuffer, and is called the root window.
|
||||
the frame area that is not minibuffer, and is called the root window.
|
||||
Different windows can be the root at different times;
|
||||
initially the root window is a leaf window, but if more windows
|
||||
are created then that leaf window ceases to be root and a newly
|
||||
|
@ -75,8 +75,8 @@ struct window
|
|||
/* The window code does not refer to them. */
|
||||
int size;
|
||||
struct Lisp_Vector *vec_next;
|
||||
/* The screen this window is on. */
|
||||
Lisp_Object screen;
|
||||
/* The frame this window is on. */
|
||||
Lisp_Object frame;
|
||||
/* t if this window is a minibuffer window. */
|
||||
Lisp_Object mini_p;
|
||||
/* Following child (to right or down) at same level of tree */
|
||||
|
@ -90,7 +90,7 @@ struct window
|
|||
/* The window this one is a child of. */
|
||||
Lisp_Object parent;
|
||||
/* The upper left corner coordinates of this window,
|
||||
as integers relative to upper left corner of screen = 0, 0 */
|
||||
as integers relative to upper left corner of frame = 0, 0 */
|
||||
Lisp_Object left;
|
||||
Lisp_Object top;
|
||||
/* The size of the window */
|
||||
|
@ -122,11 +122,11 @@ struct window
|
|||
/* Value of point at that time */
|
||||
Lisp_Object last_point;
|
||||
/* The rest are currently not used or only half used */
|
||||
/* Screen coords of point at that time */
|
||||
/* Frame coords of point at that time */
|
||||
Lisp_Object last_point_x;
|
||||
Lisp_Object last_point_y;
|
||||
/* Screen coords of mark as of last time display completed */
|
||||
/* May be nil if mark does not exist or was not on screen */
|
||||
/* Frame coords of mark as of last time display completed */
|
||||
/* May be nil if mark does not exist or was not on frame */
|
||||
Lisp_Object last_mark_x;
|
||||
Lisp_Object last_mark_y;
|
||||
/* Number of characters in buffer past bottom of window,
|
||||
|
@ -134,8 +134,8 @@ struct window
|
|||
Lisp_Object window_end_pos;
|
||||
/* t if window_end_pos is truly valid.
|
||||
This is nil if nontrivial redisplay is preempted
|
||||
since in that case the screen image that window_end_pos
|
||||
did not get onto the screen. */
|
||||
since in that case the frame image that window_end_pos
|
||||
did not get onto the frame. */
|
||||
Lisp_Object window_end_valid;
|
||||
/* Vertical position (relative to window top) of that buffer position
|
||||
of the first of those characters */
|
||||
|
@ -162,17 +162,17 @@ struct window
|
|||
the top level editing loop at the end of each command.
|
||||
|
||||
This value is always the same as
|
||||
SCREEN_SELECTED_WINDOW (selected_screen). */
|
||||
FRAME_SELECTED_WINDOW (selected_frame). */
|
||||
|
||||
extern Lisp_Object selected_window;
|
||||
|
||||
/* This is a time stamp for window selection, so we can find the least
|
||||
recently used window. Its only users are Fselect_window,
|
||||
init_window_once, and make_screen. */
|
||||
init_window_once, and make_frame. */
|
||||
|
||||
extern int window_select_count;
|
||||
|
||||
/* The minibuffer window of the selected screen.
|
||||
/* The minibuffer window of the selected frame.
|
||||
Note that you cannot test for minibufferness of an arbitrary window
|
||||
by comparing against this; but you can test for minibufferness of
|
||||
the selected window or of any window that is displayed. */
|
||||
|
|
352
src/xdisp.c
352
src/xdisp.c
|
@ -23,7 +23,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
|
|||
/*#include <ctype.h>*/
|
||||
#undef NULL
|
||||
#include "lisp.h"
|
||||
#include "screen.h"
|
||||
#include "frame.h"
|
||||
#include "window.h"
|
||||
#include "termchar.h"
|
||||
#include "dispextern.h"
|
||||
|
@ -44,18 +44,18 @@ int noninteractive_need_newline;
|
|||
#define max(a, b) ((a) > (b) ? (a) : (b))
|
||||
|
||||
/* The buffer position of the first character appearing
|
||||
entirely or partially on the current screen line.
|
||||
Or zero, which disables the optimization for the current screen line. */
|
||||
entirely or partially on the current frame line.
|
||||
Or zero, which disables the optimization for the current frame line. */
|
||||
static int this_line_bufpos;
|
||||
|
||||
/* Number of characters past the end of this line,
|
||||
including the terminating newline */
|
||||
static int this_line_endpos;
|
||||
|
||||
/* The vertical position of this screen line. */
|
||||
/* The vertical position of this frame line. */
|
||||
static int this_line_vpos;
|
||||
|
||||
/* Hpos value for start of display on this screen line.
|
||||
/* Hpos value for start of display on this frame line.
|
||||
Usually zero, but negative if first character really began
|
||||
on previous line */
|
||||
static int this_line_start_hpos;
|
||||
|
@ -64,17 +64,17 @@ static int this_line_start_hpos;
|
|||
static struct buffer *this_line_buffer;
|
||||
|
||||
/* Set by try_window_id to the vpos of first of any lines
|
||||
scrolled on to the bottom of the screen. These lines should
|
||||
scrolled on to the bottom of the frame. These lines should
|
||||
not be included in any general scroll computation. */
|
||||
static int scroll_bottom_vpos;
|
||||
|
||||
/* Value of echo_area_glyphs when it was last acted on.
|
||||
If this is nonzero, there is a message on the screen
|
||||
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. */
|
||||
char *previous_echo_glyphs;
|
||||
|
||||
/* Nonzero means truncate lines in all windows less wide than the screen */
|
||||
/* Nonzero means truncate lines in all windows less wide than the frame */
|
||||
int truncate_partial_width_windows;
|
||||
|
||||
Lisp_Object Vglobal_mode_string;
|
||||
|
@ -91,7 +91,7 @@ Lisp_Object last_arrow_position, last_arrow_string;
|
|||
/* Nonzero if overlay arrow has been displayed once in this window. */
|
||||
static int overlay_arrow_seen;
|
||||
|
||||
/* If cursor motion alone moves point off screen,
|
||||
/* If cursor motion alone moves point off frame,
|
||||
Try scrolling this many lines up or down if that will bring it back. */
|
||||
int scroll_step;
|
||||
|
||||
|
@ -103,7 +103,7 @@ static int blank_end_of_window;
|
|||
keyboard.c refers to this. */
|
||||
int buffer_shared;
|
||||
|
||||
/* display_text_line sets these to the screen position (origin 0) of point,
|
||||
/* display_text_line sets these to the frame position (origin 0) of point,
|
||||
whether the window is selected or not.
|
||||
Set one to -1 first to determine whether point was found afterwards. */
|
||||
|
||||
|
@ -167,7 +167,7 @@ int clip_changed;
|
|||
int windows_or_buffers_changed;
|
||||
|
||||
|
||||
/* Nonzero if SCREEN_MESSAGE_BUF (selected_screen) is being used by print;
|
||||
/* Nonzero if FRAME_MESSAGE_BUF (selected_frame) is being used by print;
|
||||
zero if being used by message. */
|
||||
int message_buf_print;
|
||||
|
||||
|
@ -187,14 +187,14 @@ message (m, a1, a2, a3)
|
|||
fprintf (stderr, "\n");
|
||||
fflush (stderr);
|
||||
}
|
||||
/* A null message buffer means that the screen hasn't really been
|
||||
/* A null message buffer means that the frame hasn't really been
|
||||
initialized yet. Error messages get reported properly by
|
||||
cmd_error, so this must be just an informative message; toss it. */
|
||||
else if (INTERACTIVE && SCREEN_MESSAGE_BUF (selected_screen))
|
||||
else if (INTERACTIVE && FRAME_MESSAGE_BUF (selected_frame))
|
||||
{
|
||||
#ifdef MULTI_SCREEN
|
||||
choose_minibuf_screen ();
|
||||
Fmake_screen_visible (WINDOW_SCREEN (XWINDOW (minibuf_window)));
|
||||
#ifdef MULTI_FRAME
|
||||
choose_minibuf_frame ();
|
||||
Fmake_frame_visible (WINDOW_FRAME (XWINDOW (minibuf_window)));
|
||||
#endif
|
||||
|
||||
{
|
||||
|
@ -204,15 +204,15 @@ message (m, a1, a2, a3)
|
|||
a[1] = a2;
|
||||
a[2] = a3;
|
||||
|
||||
doprnt (SCREEN_MESSAGE_BUF (selected_screen),
|
||||
SCREEN_WIDTH (selected_screen), m, 0, 3, a);
|
||||
doprnt (FRAME_MESSAGE_BUF (selected_frame),
|
||||
FRAME_WIDTH (selected_frame), m, 0, 3, a);
|
||||
#else
|
||||
doprnt (SCREEN_MESSAGE_BUF (selected_screen),
|
||||
SCREEN_WIDTH (selected_screen), m, 0, 3, &a1);
|
||||
doprnt (FRAME_MESSAGE_BUF (selected_frame),
|
||||
FRAME_WIDTH (selected_frame), m, 0, 3, &a1);
|
||||
#endif /* NO_ARG_ARRAY */
|
||||
}
|
||||
|
||||
echo_area_glyphs = SCREEN_MESSAGE_BUF (selected_screen);
|
||||
echo_area_glyphs = FRAME_MESSAGE_BUF (selected_frame);
|
||||
|
||||
/* Print should start at the beginning of the message
|
||||
buffer next time. */
|
||||
|
@ -220,7 +220,7 @@ message (m, a1, a2, a3)
|
|||
|
||||
do_pending_window_change ();
|
||||
echo_area_display ();
|
||||
update_screen (XSCREEN (XWINDOW (minibuf_window)->screen), 1, 1);
|
||||
update_frame (XFRAME (XWINDOW (minibuf_window)->frame), 1, 1);
|
||||
do_pending_window_change ();
|
||||
}
|
||||
}
|
||||
|
@ -238,20 +238,20 @@ message1 (m)
|
|||
fprintf (stderr, "%s\n", m);
|
||||
fflush (stderr);
|
||||
}
|
||||
/* A null message buffer means that the screen hasn't really been
|
||||
/* A null message buffer means that the frame hasn't really been
|
||||
initialized yet. Error messages get reported properly by
|
||||
cmd_error, so this must be just an informative message; toss it. */
|
||||
else if (INTERACTIVE && SCREEN_MESSAGE_BUF (selected_screen))
|
||||
else if (INTERACTIVE && FRAME_MESSAGE_BUF (selected_frame))
|
||||
{
|
||||
#ifdef MULTI_SCREEN
|
||||
choose_minibuf_screen ();
|
||||
Fmake_screen_visible (WINDOW_SCREEN (XWINDOW (minibuf_window)));
|
||||
#ifdef MULTI_FRAME
|
||||
choose_minibuf_frame ();
|
||||
Fmake_frame_visible (WINDOW_FRAME (XWINDOW (minibuf_window)));
|
||||
#endif
|
||||
|
||||
echo_area_glyphs = m;
|
||||
do_pending_window_change ();
|
||||
echo_area_display ();
|
||||
update_screen (XSCREEN (XWINDOW (minibuf_window)->screen), 1, 1);
|
||||
update_frame (XFRAME (XWINDOW (minibuf_window)->frame), 1, 1);
|
||||
do_pending_window_change ();
|
||||
}
|
||||
}
|
||||
|
@ -260,33 +260,33 @@ static void
|
|||
echo_area_display ()
|
||||
{
|
||||
register int vpos;
|
||||
SCREEN_PTR s;
|
||||
FRAME_PTR f;
|
||||
|
||||
#ifdef MULTI_SCREEN
|
||||
choose_minibuf_screen ();
|
||||
s = XSCREEN (WINDOW_SCREEN (XWINDOW (minibuf_window)));
|
||||
#ifdef MULTI_FRAME
|
||||
choose_minibuf_frame ();
|
||||
f = XFRAME (WINDOW_FRAME (XWINDOW (minibuf_window)));
|
||||
|
||||
if (! SCREEN_VISIBLE_P (s))
|
||||
if (! FRAME_VISIBLE_P (f))
|
||||
return;
|
||||
#endif
|
||||
|
||||
if (screen_garbaged)
|
||||
if (frame_garbaged)
|
||||
{
|
||||
Fredraw_display ();
|
||||
screen_garbaged = 0;
|
||||
frame_garbaged = 0;
|
||||
}
|
||||
|
||||
if (echo_area_glyphs || minibuf_level == 0)
|
||||
{
|
||||
vpos = XFASTINT (XWINDOW (minibuf_window)->top);
|
||||
get_display_line (s, vpos, 0);
|
||||
get_display_line (f, vpos, 0);
|
||||
display_string (XWINDOW (minibuf_window), vpos,
|
||||
echo_area_glyphs ? echo_area_glyphs : "",
|
||||
0, 0, 0, SCREEN_WIDTH (s));
|
||||
0, 0, 0, FRAME_WIDTH (f));
|
||||
|
||||
/* If desired cursor location is on this line, put it at end of text */
|
||||
if (SCREEN_CURSOR_Y (s) == vpos)
|
||||
SCREEN_CURSOR_X (s) = SCREEN_DESIRED_GLYPHS (s)->used[vpos];
|
||||
if (FRAME_CURSOR_Y (f) == vpos)
|
||||
FRAME_CURSOR_X (f) = FRAME_DESIRED_GLYPHS (f)->used[vpos];
|
||||
|
||||
/* Fill the rest of the minibuffer window with blank lines. */
|
||||
{
|
||||
|
@ -294,9 +294,9 @@ echo_area_display ()
|
|||
|
||||
for (i = vpos + 1; i < vpos + XWINDOW (minibuf_window)->height; i++)
|
||||
{
|
||||
get_display_line (s, i, 0);
|
||||
get_display_line (f, i, 0);
|
||||
display_string (XWINDOW (minibuf_window), vpos,
|
||||
"", 0, 0, 0, SCREEN_WIDTH (s));
|
||||
"", 0, 0, 0, FRAME_WIDTH (f));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -309,7 +309,7 @@ echo_area_display ()
|
|||
previous_echo_glyphs = echo_area_glyphs;
|
||||
}
|
||||
|
||||
/* Do a screen update, taking possible shortcuts into account.
|
||||
/* Do a frame update, taking possible shortcuts into account.
|
||||
This is the main external entry point for redisplay.
|
||||
|
||||
If the last redisplay displayed an echo area message and that
|
||||
|
@ -338,17 +338,17 @@ redisplay ()
|
|||
if (noninteractive)
|
||||
return;
|
||||
|
||||
/* Notice any pending interrupt request to change screen size. */
|
||||
/* Notice any pending interrupt request to change frame size. */
|
||||
do_pending_window_change ();
|
||||
|
||||
if (screen_garbaged)
|
||||
if (frame_garbaged)
|
||||
{
|
||||
Fredraw_display ();
|
||||
screen_garbaged = 0;
|
||||
frame_garbaged = 0;
|
||||
}
|
||||
|
||||
/* Normally the message* functions will have already displayed and
|
||||
updated the echo area, but the screen may have been trashed, or
|
||||
updated the echo area, but the frame may have been trashed, or
|
||||
the update may have been preempted, so display the echo area
|
||||
again here. */
|
||||
if (echo_area_glyphs || previous_echo_glyphs)
|
||||
|
@ -369,7 +369,7 @@ redisplay ()
|
|||
update_mode_lines++;
|
||||
}
|
||||
|
||||
SCREEN_SCROLL_BOTTOM_VPOS (XSCREEN (w->screen)) = -1;
|
||||
FRAME_SCROLL_BOTTOM_VPOS (XFRAME (w->frame)) = -1;
|
||||
|
||||
all_windows = update_mode_lines || buffer_shared > 1;
|
||||
|
||||
|
@ -382,7 +382,7 @@ redisplay ()
|
|||
tlbufpos = this_line_bufpos;
|
||||
tlendpos = this_line_endpos;
|
||||
if (!all_windows && tlbufpos > 0 && NILP (w->update_mode_line)
|
||||
&& SCREEN_VISIBLE_P (XSCREEN (w->screen))
|
||||
&& FRAME_VISIBLE_P (XFRAME (w->frame))
|
||||
/* Make sure recorded data applies to current buffer, etc */
|
||||
&& this_line_buffer == current_buffer
|
||||
&& current_buffer == XBUFFER (w->buffer)
|
||||
|
@ -422,7 +422,7 @@ redisplay ()
|
|||
if (cursor_vpos >= 0 && this_line_bufpos
|
||||
&& this_line_endpos == tlendpos)
|
||||
{
|
||||
if (XFASTINT (w->width) != SCREEN_WIDTH (XSCREEN (WINDOW_SCREEN (w))))
|
||||
if (XFASTINT (w->width) != FRAME_WIDTH (XFRAME (WINDOW_FRAME (w))))
|
||||
preserve_other_columns (w);
|
||||
goto update;
|
||||
}
|
||||
|
@ -445,14 +445,14 @@ redisplay ()
|
|||
point, 2, - (1 << (SHORTBITS - 1)),
|
||||
XFASTINT (w->width) - 1
|
||||
- (XFASTINT (w->width) + XFASTINT (w->left)
|
||||
!= SCREEN_WIDTH (selected_screen)),
|
||||
!= FRAME_WIDTH (selected_frame)),
|
||||
XINT (w->hscroll),
|
||||
pos_tab_offset (w, tlbufpos));
|
||||
if (pos.vpos < 1)
|
||||
{
|
||||
SCREEN_CURSOR_X (selected_screen)
|
||||
FRAME_CURSOR_X (selected_frame)
|
||||
= XFASTINT (w->left) + max (pos.hpos, 0);
|
||||
SCREEN_CURSOR_Y (selected_screen) = this_line_vpos;
|
||||
FRAME_CURSOR_Y (selected_frame) = this_line_vpos;
|
||||
goto update;
|
||||
}
|
||||
else
|
||||
|
@ -460,7 +460,7 @@ redisplay ()
|
|||
}
|
||||
cancel:
|
||||
/* Text changed drastically or point moved off of line */
|
||||
cancel_line (this_line_vpos, selected_screen);
|
||||
cancel_line (this_line_vpos, selected_frame);
|
||||
}
|
||||
|
||||
this_line_bufpos = 0;
|
||||
|
@ -468,33 +468,33 @@ redisplay ()
|
|||
|
||||
if (all_windows)
|
||||
{
|
||||
#ifdef MULTI_SCREEN
|
||||
#ifdef MULTI_FRAME
|
||||
Lisp_Object tail;
|
||||
|
||||
/* Recompute # windows showing selected buffer.
|
||||
This will be incremented each time such a window is displayed. */
|
||||
buffer_shared = 0;
|
||||
|
||||
for (tail = Vscreen_list; CONSP (tail); tail = XCONS (tail)->cdr)
|
||||
for (tail = Vframe_list; CONSP (tail); tail = XCONS (tail)->cdr)
|
||||
{
|
||||
SCREEN_PTR s;
|
||||
FRAME_PTR f;
|
||||
|
||||
if (XTYPE (XCONS (tail)->car) != Lisp_Screen)
|
||||
if (XTYPE (XCONS (tail)->car) != Lisp_Frame)
|
||||
continue;
|
||||
|
||||
s = XSCREEN (XCONS (tail)->car);
|
||||
if (s->visible)
|
||||
f = XFRAME (XCONS (tail)->car);
|
||||
if (f->visible)
|
||||
/* Redraw its windows. */
|
||||
redisplay_windows (SCREEN_ROOT_WINDOW (s));
|
||||
redisplay_windows (FRAME_ROOT_WINDOW (f));
|
||||
}
|
||||
#else
|
||||
redisplay_windows (SCREEN_ROOT_WINDOW (s));
|
||||
#endif /* not MULTI_SCREEN */
|
||||
redisplay_windows (FRAME_ROOT_WINDOW (f));
|
||||
#endif /* not MULTI_FRAME */
|
||||
}
|
||||
else if (SCREEN_VISIBLE_P (selected_screen))
|
||||
else if (FRAME_VISIBLE_P (selected_frame))
|
||||
{
|
||||
redisplay_window (selected_window, 1);
|
||||
if (XFASTINT (w->width) != SCREEN_WIDTH (selected_screen))
|
||||
if (XFASTINT (w->width) != FRAME_WIDTH (selected_frame))
|
||||
preserve_other_columns (w);
|
||||
}
|
||||
|
||||
|
@ -506,51 +506,51 @@ redisplay ()
|
|||
unrequest_sigio ();
|
||||
stop_polling ();
|
||||
|
||||
#ifdef MULTI_SCREEN
|
||||
#ifdef MULTI_FRAME
|
||||
if (all_windows)
|
||||
{
|
||||
Lisp_Object tail;
|
||||
|
||||
pause = 0;
|
||||
|
||||
for (tail = Vscreen_list; CONSP (tail); tail = XCONS (tail)->cdr)
|
||||
for (tail = Vframe_list; CONSP (tail); tail = XCONS (tail)->cdr)
|
||||
{
|
||||
SCREEN_PTR s;
|
||||
FRAME_PTR f;
|
||||
|
||||
if (XTYPE (XCONS (tail)->car) != Lisp_Screen)
|
||||
if (XTYPE (XCONS (tail)->car) != Lisp_Frame)
|
||||
continue;
|
||||
|
||||
s = XSCREEN (XCONS (tail)->car);
|
||||
if (s->visible)
|
||||
f = XFRAME (XCONS (tail)->car);
|
||||
if (f->visible)
|
||||
{
|
||||
pause |= update_screen (s, 0, 0);
|
||||
pause |= update_frame (f, 0, 0);
|
||||
if (!pause)
|
||||
mark_window_display_accurate (s->root_window, 1);
|
||||
mark_window_display_accurate (f->root_window, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
#endif /* MULTI_SCREEN */
|
||||
#endif /* MULTI_FRAME */
|
||||
{
|
||||
if (SCREEN_VISIBLE_P (selected_screen))
|
||||
pause = update_screen (selected_screen, 0, 0);
|
||||
#ifdef MULTI_SCREEN
|
||||
if (FRAME_VISIBLE_P (selected_frame))
|
||||
pause = update_frame (selected_frame, 0, 0);
|
||||
#ifdef MULTI_FRAME
|
||||
/* We may have called echo_area_display at the top of this
|
||||
function. If the echo area is on another screen, that may
|
||||
have put text on a screen other than the selected one, so the
|
||||
above call to update_screen would not have caught it. Catch
|
||||
function. If the echo area is on another frame, that may
|
||||
have put text on a frame other than the selected one, so the
|
||||
above call to update_frame would not have caught it. Catch
|
||||
it here. */
|
||||
{
|
||||
SCREEN_PTR mini_screen =
|
||||
XSCREEN (WINDOW_SCREEN (XWINDOW (minibuf_window)));
|
||||
FRAME_PTR mini_frame =
|
||||
XFRAME (WINDOW_FRAME (XWINDOW (minibuf_window)));
|
||||
|
||||
if (mini_screen != selected_screen)
|
||||
pause |= update_screen (mini_screen, 0, 0);
|
||||
if (mini_frame != selected_frame)
|
||||
pause |= update_frame (mini_frame, 0, 0);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/* If screen does not match, prevent doing single-line-update next time.
|
||||
/* If frame does not match, prevent doing single-line-update next time.
|
||||
Also, don't forget to check every line to update the arrow. */
|
||||
if (pause)
|
||||
{
|
||||
|
@ -560,15 +560,15 @@ redisplay ()
|
|||
last_arrow_position = Qt;
|
||||
last_arrow_string = Qt;
|
||||
}
|
||||
/* If we pause after scrolling, some lines in current_screen
|
||||
/* If we pause after scrolling, some lines in current_frame
|
||||
may be null, so preserve_other_columns won't be able to
|
||||
preserve all the vertical-bar separators. So, avoid using it
|
||||
in that case. */
|
||||
if (XFASTINT (w->width) != SCREEN_WIDTH (selected_screen))
|
||||
if (XFASTINT (w->width) != FRAME_WIDTH (selected_frame))
|
||||
update_mode_lines = 1;
|
||||
}
|
||||
|
||||
/* Now text on screen agrees with windows, so
|
||||
/* Now text on frame agrees with windows, so
|
||||
put info into the windows for partial redisplay to follow */
|
||||
|
||||
if (!pause)
|
||||
|
@ -582,8 +582,8 @@ redisplay ()
|
|||
end_unchanged = BUF_Z (b) - BUF_GPT (b);
|
||||
|
||||
XFASTINT (w->last_point) = BUF_PT (b);
|
||||
XFASTINT (w->last_point_x) = SCREEN_CURSOR_X (selected_screen);
|
||||
XFASTINT (w->last_point_y) = SCREEN_CURSOR_Y (selected_screen);
|
||||
XFASTINT (w->last_point_x) = FRAME_CURSOR_X (selected_frame);
|
||||
XFASTINT (w->last_point_y) = FRAME_CURSOR_Y (selected_frame);
|
||||
|
||||
if (all_windows)
|
||||
mark_window_display_accurate (XWINDOW (minibuf_window)->prev, 1);
|
||||
|
@ -610,7 +610,7 @@ redisplay ()
|
|||
request_sigio ();
|
||||
start_polling ();
|
||||
|
||||
/* Change screen size now if a change is pending. */
|
||||
/* Change frame size now if a change is pending. */
|
||||
do_pending_window_change ();
|
||||
}
|
||||
|
||||
|
@ -688,13 +688,13 @@ redisplay_window (window, just_this_one)
|
|||
int just_this_one;
|
||||
{
|
||||
register struct window *w = XWINDOW (window);
|
||||
SCREEN_PTR s = XSCREEN (w->screen);
|
||||
FRAME_PTR f = XFRAME (w->frame);
|
||||
int height;
|
||||
register int lpoint = point;
|
||||
struct buffer *old = current_buffer;
|
||||
register int width = XFASTINT (w->width) - 1
|
||||
- (XFASTINT (w->width) + XFASTINT (w->left)
|
||||
!= SCREEN_WIDTH (XSCREEN (WINDOW_SCREEN (w))));
|
||||
!= FRAME_WIDTH (XFRAME (WINDOW_FRAME (w))));
|
||||
register int startp;
|
||||
register int hscroll = XINT (w->hscroll);
|
||||
struct position pos;
|
||||
|
@ -702,7 +702,7 @@ redisplay_window (window, just_this_one)
|
|||
int tem;
|
||||
int window_needs_modeline;
|
||||
|
||||
if (SCREEN_HEIGHT (s) == 0) abort (); /* Some bug zeros some core */
|
||||
if (FRAME_HEIGHT (f) == 0) abort (); /* Some bug zeros some core */
|
||||
|
||||
/* If this is a combination window, do its children; that's all. */
|
||||
|
||||
|
@ -733,12 +733,12 @@ redisplay_window (window, just_this_one)
|
|||
{
|
||||
/* This is a minibuffer, but it's not the currently active one, so
|
||||
clear it. */
|
||||
int vpos = XFASTINT (XWINDOW (SCREEN_MINIBUF_WINDOW (s))->top);
|
||||
int vpos = XFASTINT (XWINDOW (FRAME_MINIBUF_WINDOW (f))->top);
|
||||
int i;
|
||||
|
||||
for (i = 0; i < height; i++)
|
||||
{
|
||||
get_display_line (s, vpos + i, 0);
|
||||
get_display_line (f, vpos + i, 0);
|
||||
display_string (w, vpos + i, "", 0, 0, 0, width);
|
||||
}
|
||||
|
||||
|
@ -806,20 +806,20 @@ redisplay_window (window, just_this_one)
|
|||
- (1 << (SHORTBITS - 1)),
|
||||
width, hscroll, pos_tab_offset (w, startp));
|
||||
SET_PT (pos.bufpos);
|
||||
if (w != XWINDOW (SCREEN_SELECTED_WINDOW (s)))
|
||||
if (w != XWINDOW (FRAME_SELECTED_WINDOW (f)))
|
||||
Fset_marker (w->pointm, make_number (point), Qnil);
|
||||
else
|
||||
{
|
||||
lpoint = point;
|
||||
SCREEN_CURSOR_X (s) = max (0, pos.hpos) + XFASTINT (w->left);
|
||||
SCREEN_CURSOR_Y (s) = pos.vpos + XFASTINT (w->top);
|
||||
FRAME_CURSOR_X (f) = max (0, pos.hpos) + XFASTINT (w->left);
|
||||
FRAME_CURSOR_Y (f) = pos.vpos + XFASTINT (w->top);
|
||||
}
|
||||
}
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* Handle case where text has not changed, only point,
|
||||
and it has not moved off the screen */
|
||||
and it has not moved off the frame */
|
||||
|
||||
/* This code is not used for minibuffer for the sake of
|
||||
the case of redisplaying to replace an echo area message;
|
||||
|
@ -830,7 +830,7 @@ redisplay_window (window, just_this_one)
|
|||
|
||||
if (XFASTINT (w->last_modified) >= MODIFF
|
||||
&& point >= startp && !clip_changed
|
||||
&& (just_this_one || XFASTINT (w->width) == SCREEN_WIDTH (s))
|
||||
&& (just_this_one || XFASTINT (w->width) == FRAME_WIDTH (f))
|
||||
&& !EQ (window, minibuf_window))
|
||||
{
|
||||
pos = *compute_motion (startp, 0, (hscroll ? 1 - hscroll : 0),
|
||||
|
@ -839,18 +839,18 @@ redisplay_window (window, just_this_one)
|
|||
|
||||
if (pos.vpos < height)
|
||||
{
|
||||
/* Ok, point is still on screen */
|
||||
if (w == XWINDOW (SCREEN_SELECTED_WINDOW (s)))
|
||||
/* Ok, point is still on frame */
|
||||
if (w == XWINDOW (FRAME_SELECTED_WINDOW (f)))
|
||||
{
|
||||
/* These variables are supposed to be origin 1 */
|
||||
SCREEN_CURSOR_X (s) = max (0, pos.hpos) + XFASTINT (w->left);
|
||||
SCREEN_CURSOR_Y (s) = pos.vpos + XFASTINT (w->top);
|
||||
FRAME_CURSOR_X (f) = max (0, pos.hpos) + XFASTINT (w->left);
|
||||
FRAME_CURSOR_Y (f) = pos.vpos + XFASTINT (w->top);
|
||||
}
|
||||
/* This doesn't do the trick, because if a window to the right of
|
||||
this one must be redisplayed, this does nothing because there
|
||||
is nothing in DesiredScreen yet, and then the other window is
|
||||
is nothing in DesiredFrame yet, and then the other window is
|
||||
redisplayed, making likes that are empty in this window's columns.
|
||||
if (XFASTINT (w->width) != SCREEN_WIDTH (s))
|
||||
if (XFASTINT (w->width) != FRAME_WIDTH (f))
|
||||
preserve_my_columns (w);
|
||||
*/
|
||||
goto done;
|
||||
|
@ -872,10 +872,10 @@ redisplay_window (window, just_this_one)
|
|||
&& ! EQ (w->window_end_valid, Qnil)
|
||||
&& do_id && !clip_changed
|
||||
&& !blank_end_of_window
|
||||
&& XFASTINT (w->width) == SCREEN_WIDTH (s)
|
||||
&& XFASTINT (w->width) == FRAME_WIDTH (f)
|
||||
&& EQ (last_arrow_position, Voverlay_arrow_position)
|
||||
&& EQ (last_arrow_string, Voverlay_arrow_string)
|
||||
&& (tem = try_window_id (SCREEN_SELECTED_WINDOW (s)))
|
||||
&& (tem = try_window_id (FRAME_SELECTED_WINDOW (f)))
|
||||
&& tem != -2)
|
||||
{
|
||||
/* tem > 0 means success. tem == -1 means choose new start.
|
||||
|
@ -891,7 +891,7 @@ redisplay_window (window, just_this_one)
|
|||
|| (XFASTINT (w->last_modified) >= MODIFF)))
|
||||
{
|
||||
/* Try to redisplay starting at same place as before */
|
||||
/* If point has not moved off screen, accept the results */
|
||||
/* If point has not moved off frame, accept the results */
|
||||
try_window (window, startp);
|
||||
if (cursor_vpos >= 0)
|
||||
goto done;
|
||||
|
@ -942,7 +942,7 @@ redisplay_window (window, just_this_one)
|
|||
/* If window not full width, must redo its mode line
|
||||
if the window to its side is being redone */
|
||||
if ((!NILP (w->update_mode_line)
|
||||
|| (!just_this_one && width < SCREEN_WIDTH (s) - 1))
|
||||
|| (!just_this_one && width < FRAME_WIDTH (f) - 1))
|
||||
&& height != XFASTINT (w->height))
|
||||
display_mode_line (w);
|
||||
|
||||
|
@ -963,9 +963,9 @@ try_window (window, pos)
|
|||
register int vpos = XFASTINT (w->top);
|
||||
register int last_text_vpos = vpos;
|
||||
int tab_offset = pos_tab_offset (w, pos);
|
||||
SCREEN_PTR s = XSCREEN (w->screen);
|
||||
FRAME_PTR f = XFRAME (w->frame);
|
||||
int width = XFASTINT (w->width) - 1
|
||||
- (XFASTINT (w->width) + XFASTINT (w->left) != SCREEN_WIDTH (s));
|
||||
- (XFASTINT (w->width) + XFASTINT (w->left) != FRAME_WIDTH (f));
|
||||
struct position val;
|
||||
|
||||
Fset_marker (w->start, make_number (pos), Qnil);
|
||||
|
@ -987,16 +987,16 @@ try_window (window, pos)
|
|||
}
|
||||
|
||||
/* If last line is continued in middle of character,
|
||||
include the split character in the text considered on the screen */
|
||||
include the split character in the text considered on the frame */
|
||||
if (val.hpos < (XINT (w->hscroll) ? 1 - XINT (w->hscroll) : 0))
|
||||
pos++;
|
||||
|
||||
/* If bottom just moved off end of screen, change mode line percentage. */
|
||||
/* If bottom just moved off end of frame, change mode line percentage. */
|
||||
if (XFASTINT (w->window_end_pos) == 0
|
||||
&& Z != pos)
|
||||
w->update_mode_line = Qt;
|
||||
|
||||
/* Say where last char on screen will be, once redisplay is finished. */
|
||||
/* Say where last char on frame will be, once redisplay is finished. */
|
||||
XFASTINT (w->window_end_pos) = Z - pos;
|
||||
XFASTINT (w->window_end_vpos) = last_text_vpos - XFASTINT (w->top);
|
||||
/* But that is not valid info until redisplay finishes. */
|
||||
|
@ -1017,11 +1017,11 @@ try_window_id (window)
|
|||
int pos;
|
||||
register struct window *w = XWINDOW (window);
|
||||
register int height = window_internal_height (w);
|
||||
SCREEN_PTR s = XSCREEN (w->screen);
|
||||
FRAME_PTR f = XFRAME (w->frame);
|
||||
int top = XFASTINT (w->top);
|
||||
int start = marker_position (w->start);
|
||||
int width = XFASTINT (w->width) - 1
|
||||
- (XFASTINT (w->width) + XFASTINT (w->left) != SCREEN_WIDTH (s));
|
||||
- (XFASTINT (w->width) + XFASTINT (w->left) != FRAME_WIDTH (f));
|
||||
int hscroll = XINT (w->hscroll);
|
||||
int lmargin = hscroll > 0 ? 1 - hscroll : 0;
|
||||
register int vpos;
|
||||
|
@ -1050,8 +1050,8 @@ try_window_id (window)
|
|||
{
|
||||
if (point < bp.bufpos && !bp.contin)
|
||||
{
|
||||
/* All changes are below the screen, and point is on the screen.
|
||||
We don't need to change the screen at all.
|
||||
/* All changes are below the frame, and point is on the frame.
|
||||
We don't need to change the frame at all.
|
||||
But we need to update window_end_pos to account for
|
||||
any change in buffer size. */
|
||||
bp = *compute_motion (start, 0, lmargin,
|
||||
|
@ -1066,7 +1066,7 @@ try_window_id (window)
|
|||
|
||||
vpos = bp.vpos;
|
||||
|
||||
/* Find beginning of that screen line. Must display from there. */
|
||||
/* Find beginning of that frame line. Must display from there. */
|
||||
bp = *vmotion (bp.bufpos, 0, width, hscroll, window);
|
||||
|
||||
pos = bp.bufpos;
|
||||
|
@ -1075,7 +1075,7 @@ try_window_id (window)
|
|||
return -1;
|
||||
|
||||
/* If about to start displaying at the beginning of a continuation line,
|
||||
really start with previous screen line, in case it was not
|
||||
really start with previous frame line, in case it was not
|
||||
continued when last redisplayed */
|
||||
if ((bp.contin && bp.bufpos - 1 == beg_unchanged && vpos > 0)
|
||||
||
|
||||
|
@ -1111,8 +1111,8 @@ try_window_id (window)
|
|||
height, - (1 << (SHORTBITS - 1)),
|
||||
width, hscroll, pos_tab_offset (w, bp.bufpos));
|
||||
|
||||
/* If changes reach past the text available on the screen,
|
||||
just display rest of screen. */
|
||||
/* If changes reach past the text available on the frame,
|
||||
just display rest of frame. */
|
||||
if (ep.bufpos > Z - XFASTINT (w->window_end_pos))
|
||||
stop_vpos = height;
|
||||
else
|
||||
|
@ -1143,7 +1143,7 @@ try_window_id (window)
|
|||
10000, 0, width, hscroll, epto);
|
||||
scroll_amount = xp.vpos - XFASTINT (w->window_end_vpos);
|
||||
|
||||
/* Is everything on screen below the changes whitespace?
|
||||
/* Is everything on frame below the changes whitespace?
|
||||
If so, no scrolling is really necessary. */
|
||||
for (i = ep.bufpos; i < xp.bufpos; i++)
|
||||
{
|
||||
|
@ -1156,7 +1156,7 @@ try_window_id (window)
|
|||
|
||||
XFASTINT (w->window_end_vpos) += scroll_amount;
|
||||
|
||||
/* Before doing any scrolling, verify that point will be on screen. */
|
||||
/* Before doing any scrolling, verify that point will be on frame. */
|
||||
if (point > ep.bufpos && !(point <= xp.bufpos && xp.bufpos < height))
|
||||
{
|
||||
if (point <= xp.bufpos)
|
||||
|
@ -1186,9 +1186,9 @@ try_window_id (window)
|
|||
/* In this path, we have altered window_end_vpos
|
||||
and not left it negative.
|
||||
We must make sure that, in case display is preempted
|
||||
before the screen changes to reflect what we do here,
|
||||
before the frame changes to reflect what we do here,
|
||||
further updates will not come to try_window_id
|
||||
and assume the screen and window_end_vpos match. */
|
||||
and assume the frame and window_end_vpos match. */
|
||||
blank_end_of_window = 1;
|
||||
}
|
||||
else if (!scroll_amount)
|
||||
|
@ -1197,7 +1197,7 @@ try_window_id (window)
|
|||
{
|
||||
/* If reprinting everything is nearly as fast as scrolling,
|
||||
don't bother scrolling. Can happen if lines are short. */
|
||||
if (scroll_cost (s, bp.vpos + top - scroll_amount,
|
||||
if (scroll_cost (f, bp.vpos + top - scroll_amount,
|
||||
top + height - max (0, scroll_amount),
|
||||
scroll_amount)
|
||||
> xp.bufpos - bp.bufpos - 20)
|
||||
|
@ -1208,7 +1208,7 @@ try_window_id (window)
|
|||
In common case of killing a line, this can save the
|
||||
following line from being overwritten by scrolling
|
||||
and therefore having to be redrawn. */
|
||||
tem = scroll_screen_lines (s, bp.vpos + top - scroll_amount,
|
||||
tem = scroll_frame_lines (f, bp.vpos + top - scroll_amount,
|
||||
top + height - max (0, scroll_amount),
|
||||
scroll_amount);
|
||||
if (!tem) stop_vpos = height;
|
||||
|
@ -1220,14 +1220,14 @@ try_window_id (window)
|
|||
/* Note that if scroll_amount > 0, xp.bufpos - bp.bufpos is an
|
||||
overestimate of cost of reprinting, since xp.bufpos
|
||||
would end up below the bottom of the window. */
|
||||
if (scroll_cost (s, ep.vpos + top - scroll_amount,
|
||||
if (scroll_cost (f, ep.vpos + top - scroll_amount,
|
||||
top + height - max (0, scroll_amount),
|
||||
scroll_amount)
|
||||
> xp.bufpos - ep.bufpos - 20)
|
||||
/* Return "try normal display with same window-start."
|
||||
Too bad we can't prevent further scroll-thinking. */
|
||||
return -2;
|
||||
tem = scroll_screen_lines (s, ep.vpos + top - scroll_amount,
|
||||
tem = scroll_frame_lines (f, ep.vpos + top - scroll_amount,
|
||||
top + height - max (0, scroll_amount),
|
||||
scroll_amount);
|
||||
if (!tem) stop_vpos = height;
|
||||
|
@ -1272,7 +1272,7 @@ try_window_id (window)
|
|||
if (vpos == height)
|
||||
{
|
||||
/* If last line is continued in middle of character,
|
||||
include the split character in the text considered on the screen */
|
||||
include the split character in the text considered on the frame */
|
||||
if (val.hpos < lmargin)
|
||||
val.bufpos++;
|
||||
XFASTINT (w->window_end_vpos) = last_text_vpos;
|
||||
|
@ -1285,7 +1285,7 @@ try_window_id (window)
|
|||
{
|
||||
/* Don't consider these lines for general-purpose scrolling.
|
||||
That will save time in the scrolling computation. */
|
||||
SCREEN_SCROLL_BOTTOM_VPOS (s) = xp.vpos;
|
||||
FRAME_SCROLL_BOTTOM_VPOS (f) = xp.vpos;
|
||||
vpos = xp.vpos;
|
||||
pos = xp.bufpos;
|
||||
val.hpos = lmargin;
|
||||
|
@ -1319,7 +1319,7 @@ try_window_id (window)
|
|||
cursor_vpos = -1;
|
||||
}
|
||||
|
||||
/* If bottom just moved off end of screen, change mode line percentage. */
|
||||
/* If bottom just moved off end of frame, change mode line percentage. */
|
||||
if (XFASTINT (w->window_end_pos) == 0
|
||||
&& Z != val.bufpos)
|
||||
w->update_mode_line = Qt;
|
||||
|
@ -1346,19 +1346,19 @@ try_window_id (window)
|
|||
{
|
||||
val = *compute_motion (start, 0, lmargin, point, 10000, 10000,
|
||||
width, hscroll, pos_tab_offset (w, start));
|
||||
/* Admit failure if point is off screen now */
|
||||
/* Admit failure if point is off frame now */
|
||||
if (val.vpos >= height)
|
||||
{
|
||||
for (vpos = 0; vpos < height; vpos++)
|
||||
cancel_line (vpos + top, s);
|
||||
cancel_line (vpos + top, f);
|
||||
return 0;
|
||||
}
|
||||
cursor_vpos = val.vpos + top;
|
||||
cursor_hpos = val.hpos + XFASTINT (w->left);
|
||||
}
|
||||
|
||||
SCREEN_CURSOR_X (s) = max (0, cursor_hpos);
|
||||
SCREEN_CURSOR_Y (s) = cursor_vpos;
|
||||
FRAME_CURSOR_X (f) = max (0, cursor_hpos);
|
||||
FRAME_CURSOR_Y (f) = cursor_vpos;
|
||||
|
||||
if (debug_end_pos)
|
||||
{
|
||||
|
@ -1408,7 +1408,7 @@ copy_rope (t, s, from)
|
|||
|
||||
TABOFFSET is an offset for ostensible hpos, used in tab stop calculations.
|
||||
|
||||
Display on position VPOS on the screen. (origin 0).
|
||||
Display on position VPOS on the frame. (origin 0).
|
||||
|
||||
Returns a STRUCT POSITION giving character to start next line with
|
||||
and where to display it, including a zero or negative hpos.
|
||||
|
@ -1433,18 +1433,18 @@ display_text_line (w, start, vpos, hpos, taboffset)
|
|||
GLYPH *endp;
|
||||
register GLYPH *startp;
|
||||
register GLYPH *p1prev;
|
||||
SCREEN_PTR s = XSCREEN (w->screen);
|
||||
FRAME_PTR f = XFRAME (w->frame);
|
||||
int tab_width = XINT (current_buffer->tab_width);
|
||||
int ctl_arrow = !NILP (current_buffer->ctl_arrow);
|
||||
int width = XFASTINT (w->width) - 1
|
||||
- (XFASTINT (w->width) + XFASTINT (w->left) != SCREEN_WIDTH (s));
|
||||
- (XFASTINT (w->width) + XFASTINT (w->left) != FRAME_WIDTH (f));
|
||||
struct position val;
|
||||
int lastpos;
|
||||
int invis;
|
||||
int hscroll = XINT (w->hscroll);
|
||||
int truncate = hscroll
|
||||
|| (truncate_partial_width_windows
|
||||
&& XFASTINT (w->width) < SCREEN_WIDTH (s))
|
||||
&& XFASTINT (w->width) < FRAME_WIDTH (f))
|
||||
|| !NILP (current_buffer->truncate_lines);
|
||||
int selective
|
||||
= XTYPE (current_buffer->selective_display) == Lisp_Int
|
||||
|
@ -1453,7 +1453,7 @@ display_text_line (w, start, vpos, hpos, taboffset)
|
|||
#ifndef old
|
||||
int selective_e = selective && !NILP (current_buffer->selective_display_ellipses);
|
||||
#endif
|
||||
register struct screen_glyphs *desired_glyphs = SCREEN_DESIRED_GLYPHS (s);
|
||||
register struct frame_glyphs *desired_glyphs = FRAME_DESIRED_GLYPHS (f);
|
||||
register struct Lisp_Vector *dp = window_display_table (w);
|
||||
int selective_rlen
|
||||
= (selective && dp && XTYPE (DISP_INVIS_ROPE (dp)) == Lisp_String
|
||||
|
@ -1464,7 +1464,7 @@ display_text_line (w, start, vpos, hpos, taboffset)
|
|||
? '\\' : XINT (DISP_CONTINUE_GLYPH (dp)));
|
||||
|
||||
hpos += XFASTINT (w->left);
|
||||
get_display_line (s, vpos, XFASTINT (w->left));
|
||||
get_display_line (f, vpos, XFASTINT (w->left));
|
||||
if (tab_width <= 0 || tab_width > 20) tab_width = 8;
|
||||
|
||||
if (MINI_WINDOW_P (w) && start == 1
|
||||
|
@ -1652,7 +1652,7 @@ display_text_line (w, start, vpos, hpos, taboffset)
|
|||
}
|
||||
|
||||
/* If point is at eol or in invisible text at eol,
|
||||
record its screen location now. */
|
||||
record its frame location now. */
|
||||
|
||||
if (start <= point && point <= lastpos && cursor_vpos < 0)
|
||||
{
|
||||
|
@ -1665,10 +1665,10 @@ display_text_line (w, start, vpos, hpos, taboffset)
|
|||
if (cursor_hpos < 0) cursor_hpos = 0;
|
||||
if (cursor_hpos > width) cursor_hpos = width;
|
||||
cursor_hpos += XFASTINT (w->left);
|
||||
if (w == XWINDOW (SCREEN_SELECTED_WINDOW (s)))
|
||||
if (w == XWINDOW (FRAME_SELECTED_WINDOW (f)))
|
||||
{
|
||||
SCREEN_CURSOR_Y (s) = cursor_vpos;
|
||||
SCREEN_CURSOR_X (s) = cursor_hpos;
|
||||
FRAME_CURSOR_Y (f) = cursor_vpos;
|
||||
FRAME_CURSOR_X (f) = cursor_hpos;
|
||||
|
||||
if (w == XWINDOW (selected_window))
|
||||
{
|
||||
|
@ -1698,7 +1698,7 @@ display_text_line (w, start, vpos, hpos, taboffset)
|
|||
p1 = startp + 1;
|
||||
}
|
||||
|
||||
if (XFASTINT (w->width) + XFASTINT (w->left) != SCREEN_WIDTH (s))
|
||||
if (XFASTINT (w->width) + XFASTINT (w->left) != FRAME_WIDTH (f))
|
||||
{
|
||||
endp++;
|
||||
if (p1 < startp) p1 = startp;
|
||||
|
@ -1747,12 +1747,12 @@ display_mode_line (w)
|
|||
register int vpos = XFASTINT (w->height) + XFASTINT (w->top) - 1;
|
||||
register int left = XFASTINT (w->left);
|
||||
register int right = XFASTINT (w->width) + left;
|
||||
register SCREEN_PTR s = XSCREEN (WINDOW_SCREEN (w));
|
||||
register FRAME_PTR f = XFRAME (WINDOW_FRAME (w));
|
||||
|
||||
get_display_line (s, vpos, left);
|
||||
get_display_line (f, vpos, left);
|
||||
display_mode_element (w, vpos, left, 0, right, right,
|
||||
current_buffer->mode_line_format);
|
||||
SCREEN_DESIRED_GLYPHS (s)->bufp[vpos] = 0;
|
||||
FRAME_DESIRED_GLYPHS (f)->bufp[vpos] = 0;
|
||||
|
||||
/* Make the mode line inverse video if the entire line
|
||||
is made of mode lines.
|
||||
|
@ -1760,19 +1760,19 @@ display_mode_line (w)
|
|||
or if it is the child of a full width window
|
||||
(which implies that that window is split side-by-side
|
||||
and the rest of this line is mode lines of the sibling windows). */
|
||||
if (XFASTINT (w->width) == SCREEN_WIDTH (s)
|
||||
|| XFASTINT (XWINDOW (w->parent)->width) == SCREEN_WIDTH (s))
|
||||
SCREEN_DESIRED_GLYPHS (s)->highlight[vpos] = mode_line_inverse_video;
|
||||
if (XFASTINT (w->width) == FRAME_WIDTH (f)
|
||||
|| XFASTINT (XWINDOW (w->parent)->width) == FRAME_WIDTH (f))
|
||||
FRAME_DESIRED_GLYPHS (f)->highlight[vpos] = mode_line_inverse_video;
|
||||
|
||||
#ifdef HAVE_X_WINDOWS
|
||||
/* I'm trying this out because I saw Unimpress use it, but it's
|
||||
possible that this may mess adversely with some window managers. jla */
|
||||
|
||||
if (SCREEN_IS_X (s)
|
||||
&& ! SCREEN_MINIBUF_ONLY_P (s)
|
||||
&& w == XWINDOW (s->selected_window)
|
||||
&& (NILP (Fstring_equal (XBUFFER (w->buffer)->name, s->name))))
|
||||
x_set_name (s, XBUFFER (w->buffer)->name, Qnil);
|
||||
if (FRAME_IS_X (f)
|
||||
&& ! FRAME_MINIBUF_ONLY_P (f)
|
||||
&& w == XWINDOW (f->selected_window)
|
||||
&& (NILP (Fstring_equal (XBUFFER (w->buffer)->name, f->name))))
|
||||
x_set_name (f, XBUFFER (w->buffer)->name, Qnil);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -1781,7 +1781,7 @@ display_mode_line (w)
|
|||
|
||||
VPOS is the position of the mode line being displayed.
|
||||
|
||||
HPOS is the position (absolute on screen) where this element's text
|
||||
HPOS is the position (absolute on frame) where this element's text
|
||||
should start. The output is truncated automatically at the right
|
||||
edge of window W.
|
||||
|
||||
|
@ -1994,11 +1994,11 @@ decode_mode_spec (w, c, maxwidth)
|
|||
register int maxwidth;
|
||||
{
|
||||
Lisp_Object obj = Qnil;
|
||||
SCREEN_PTR scr = XSCREEN (WINDOW_SCREEN (w));
|
||||
char *decode_mode_spec_buf = (char *) SCREEN_TEMP_GLYPHS (scr)->total_contents;
|
||||
FRAME_PTR f = XFRAME (WINDOW_FRAME (w));
|
||||
char *decode_mode_spec_buf = (char *) FRAME_TEMP_GLYPHS (f)->total_contents;
|
||||
|
||||
if (maxwidth > SCREEN_WIDTH (scr))
|
||||
maxwidth = SCREEN_WIDTH (scr);
|
||||
if (maxwidth > FRAME_WIDTH (f))
|
||||
maxwidth = FRAME_WIDTH (f);
|
||||
|
||||
switch (c)
|
||||
{
|
||||
|
@ -2143,7 +2143,7 @@ decode_mode_spec (w, c, maxwidth)
|
|||
MINCOL is the first column ok to end at. (Pad with spaces to this col.)
|
||||
MAXCOL is the last column ok to end at. Truncate here.
|
||||
-1 for MINCOL or MAXCOL means no explicit minimum or maximum.
|
||||
Both count from the left edge of the screen, as does HPOS.
|
||||
Both count from the left edge of the frame, as does HPOS.
|
||||
The right edge of W is an implicit maximum.
|
||||
If TRUNCATE is nonzero, the implicit maximum is one column before the edge.
|
||||
|
||||
|
@ -2163,7 +2163,7 @@ display_string (w, vpos, string, hpos, truncate, mincol, maxcol)
|
|||
int tab_width = XINT (current_buffer->tab_width);
|
||||
register GLYPH *start;
|
||||
register GLYPH *end;
|
||||
struct screen_glyphs *desired_glyphs = SCREEN_DESIRED_GLYPHS (XSCREEN (w->screen));
|
||||
struct frame_glyphs *desired_glyphs = FRAME_DESIRED_GLYPHS (XFRAME (w->frame));
|
||||
GLYPH *p1start = desired_glyphs->glyphs[vpos] + hpos;
|
||||
int window_width = XFASTINT (w->width);
|
||||
|
||||
|
@ -2182,7 +2182,7 @@ display_string (w, vpos, string, hpos, truncate, mincol, maxcol)
|
|||
end = start + window_width - (truncate != 0);
|
||||
|
||||
if ((window_width + XFASTINT (w->left))
|
||||
!= SCREEN_WIDTH (XSCREEN (WINDOW_SCREEN (w))))
|
||||
!= FRAME_WIDTH (XFRAME (WINDOW_FRAME (w))))
|
||||
*end-- = '|';
|
||||
|
||||
if (maxcol >= 0 && end - desired_glyphs->glyphs[vpos] > maxcol)
|
||||
|
@ -2288,14 +2288,14 @@ See also `overlay-arrow-string'.");
|
|||
|
||||
DEFVAR_INT ("scroll-step", &scroll_step,
|
||||
"*The number of lines to try scrolling a window by when point moves out.\n\
|
||||
If that fails to bring point back on screen, point is centered instead.\n\
|
||||
If this is zero, point is always centered after it moves off screen.");
|
||||
If that fails to bring point back on frame, point is centered instead.\n\
|
||||
If this is zero, point is always centered after it moves off frame.");
|
||||
|
||||
DEFVAR_INT ("debug-end-pos", &debug_end_pos, "Don't ask");
|
||||
|
||||
DEFVAR_BOOL ("truncate-partial-width-windows",
|
||||
&truncate_partial_width_windows,
|
||||
"*Non-nil means truncate lines in all windows less than full screen wide.");
|
||||
"*Non-nil means truncate lines in all windows less than full frame wide.");
|
||||
truncate_partial_width_windows = 1;
|
||||
|
||||
DEFVAR_BOOL ("mode-line-inverse-video", &mode_line_inverse_video,
|
||||
|
@ -2322,13 +2322,13 @@ init_xdisp ()
|
|||
|
||||
if (!noninteractive)
|
||||
{
|
||||
SCREEN_PTR s = XSCREEN (WINDOW_SCREEN (XWINDOW (root_window)));
|
||||
FRAME_PTR f = XFRAME (WINDOW_FRAME (XWINDOW (root_window)));
|
||||
XFASTINT (XWINDOW (root_window)->top) = 0;
|
||||
set_window_height (root_window, SCREEN_HEIGHT (s) - 1, 0);
|
||||
XFASTINT (mini_w->top) = SCREEN_HEIGHT (s) - 1;
|
||||
set_window_height (root_window, FRAME_HEIGHT (f) - 1, 0);
|
||||
XFASTINT (mini_w->top) = FRAME_HEIGHT (f) - 1;
|
||||
set_window_height (minibuf_window, 1, 0);
|
||||
|
||||
XFASTINT (XWINDOW (root_window)->width) = SCREEN_WIDTH (s);
|
||||
XFASTINT (mini_w->width) = SCREEN_WIDTH (s);
|
||||
XFASTINT (XWINDOW (root_window)->width) = FRAME_WIDTH (f);
|
||||
XFASTINT (mini_w->width) = FRAME_WIDTH (f);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue