Commit 9472f927 authored by Gerd Moellmann's avatar Gerd Moellmann
Browse files

Use XCAR and XCDR instead of XCONS.

(Vresize_mini_config, resize_mini_frame,
resize_mini_initial_height): Removed.
(syms_of_xdisp): Remove references to these variables.
(resize_mini_window): Don't save window configuration, freeze
window starts instead.  Enlarge window until displaying an empty
buffer, then shrink it.  Make the function externally visible.
(redisplay_window): Treat frozen window start like forced start,
but accept point outside of the window.
parent e9abf394
......@@ -479,19 +479,6 @@ int message_buf_print;
static Lisp_Object Vmax_mini_window_height;
/* Window configuration saved in resize_mini_window. */
Lisp_Object Vresize_mini_config;
/* Frmae of the mini-window being resized by resize_mini_window. */
struct frame *resize_mini_frame;
/* Initial height of the mini-window having been resized
by resize_mini_window. */
int resize_mini_initial_height;
/* A scratch glyph row with contents used for generating truncation
glyphs. Also used in direct_output_for_insert. */
......@@ -599,7 +586,6 @@ enum move_it_result
static Lisp_Object unwind_with_echo_area_buffer P_ ((Lisp_Object));
static Lisp_Object with_echo_area_buffer_unwind_data P_ ((struct window *));
static int resize_mini_window P_ ((struct window *));
static void clear_garbaged_frames P_ ((void));
static int current_message_1 P_ ((Lisp_Object *));
static int truncate_message_1 P_ ((int));
......@@ -2720,9 +2706,9 @@ load_overlay_strings (it)
/* Process overlay before the overlay center. */
for (ov = current_buffer->overlays_before;
CONSP (ov);
ov = XCONS (ov)->cdr)
ov = XCDR (ov))
{
overlay = XCONS (ov)->car;
overlay = XCAR (ov);
xassert (OVERLAYP (overlay));
start = OVERLAY_POSITION (OVERLAY_START (overlay));
end = OVERLAY_POSITION (OVERLAY_END (overlay));
......@@ -2756,9 +2742,9 @@ load_overlay_strings (it)
/* Process overlays after the overlay center. */
for (ov = current_buffer->overlays_after;
CONSP (ov);
ov = XCONS (ov)->cdr)
ov = XCDR (ov))
{
overlay = XCONS (ov)->car;
overlay = XCAR (ov);
xassert (OVERLAYP (overlay));
start = OVERLAY_POSITION (OVERLAY_START (overlay));
end = OVERLAY_POSITION (OVERLAY_END (overlay));
......@@ -5432,7 +5418,7 @@ display_echo_area_1 (w)
/* Resize mini-window W to fit the size of its contents. Value is
non-zero if the window height has been changed. */
static int
int
resize_mini_window (w)
struct window *w;
{
......@@ -5485,50 +5471,18 @@ resize_mini_window (w)
SET_TEXT_POS (start, BEGV, BEGV_BYTE);
SET_MARKER_FROM_TEXT_POS (w->start, start);
if (NILP (Vresize_mini_config))
/* Let it grow only, until we display an empty message, in which
case the window shrinks again. */
if (height > XFASTINT (w->height)
|| BEGV == ZV)
{
if (height != XFASTINT (w->height))
{
Lisp_Object old_selected_window;
Lisp_Object config;
struct gcpro gcpro1;
resize_mini_initial_height = XFASTINT (w->height);
config = Fcurrent_window_configuration (Qnil);
GCPRO1 (config);
old_selected_window = selected_window;
XSETWINDOW (selected_window, w);
change_window_height (height - XFASTINT (w->height), 0);
selected_window = old_selected_window;
window_height_changed_p = 1;
/* Set this after changing window sizes, or else
Vresize_mini_config would be reset in
adjust_frame_glyphs. */
resize_mini_frame = XFRAME (w->frame);
Vresize_mini_config = config;
UNGCPRO;
}
}
else if (height != XFASTINT (w->height))
{
if (height == resize_mini_initial_height)
{
Fset_window_configuration (Vresize_mini_config);
Vresize_mini_config = Qnil;
resize_mini_frame = NULL;
}
else
{
Lisp_Object old_selected_window;
old_selected_window = selected_window;
XSETWINDOW (selected_window, w);
change_window_height (height - XFASTINT (w->height), 0);
selected_window = old_selected_window;
}
Lisp_Object old_selected_window;
freeze_window_starts (f, height > XFASTINT (w->height));
old_selected_window = selected_window;
XSETWINDOW (selected_window, w);
change_window_height (height - XFASTINT (w->height), 0);
selected_window = old_selected_window;
window_height_changed_p = 1;
}
}
......@@ -5985,9 +5939,9 @@ x_consider_frame_title (frame)
int len;
struct it it;
for (tail = Vframe_list; CONSP (tail); tail = XCONS (tail)->cdr)
for (tail = Vframe_list; CONSP (tail); tail = XCDR (tail))
{
struct frame *tf = XFRAME (XCONS (tail)->car);
struct frame *tf = XFRAME (XCAR (tail));
if (tf != f
&& FRAME_KBOARD (tf) == FRAME_KBOARD (f)
......@@ -7404,14 +7358,14 @@ redisplay_internal (preserve_echo_area)
pause = 0;
for (tail = Vframe_list; CONSP (tail); tail = XCONS (tail)->cdr)
for (tail = Vframe_list; CONSP (tail); tail = XCDR (tail))
{
struct frame *f;
if (!FRAMEP (XCONS (tail)->car))
if (!FRAMEP (XCAR (tail)))
continue;
f = XFRAME (XCONS (tail)->car);
f = XFRAME (XCAR (tail));
if ((FRAME_WINDOW_P (f) || f == selected_frame)
&& FRAME_VISIBLE_P (f) && !FRAME_OBSCURED_P (f))
......@@ -8400,7 +8354,8 @@ redisplay_window (window, just_this_one_p)
/* Handle case where place to start displaying has been specified,
unless the specified location is outside the accessible range. */
if (!NILP (w->force_start))
if (!NILP (w->force_start)
|| w->frozen_window_start_p)
{
w->force_start = Qnil;
w->vscroll = 0;
......@@ -8449,7 +8404,7 @@ redisplay_window (window, just_this_one_p)
goto restore_buffers;
}
if (w->cursor.vpos < 0)
if (w->cursor.vpos < 0 && !w->frozen_window_start_p)
{
/* If point does not appear, or on a line that is not fully
visible, move point so it does appear. The desired
......@@ -11538,7 +11493,7 @@ display_mode_element (it, depth, field_width, precision, elt)
to at least that many characters.
If first element is a symbol, process the cadr or caddr recursively
according to whether the symbol's value is non-nil or nil. */
car = XCONS (elt)->car;
car = XCAR (elt);
if (EQ (car, QCeval) && CONSP (XCDR (elt)))
{
/* An element of the form (:eval FORM) means evaluate FORM
......@@ -11555,7 +11510,7 @@ display_mode_element (it, depth, field_width, precision, elt)
else if (SYMBOLP (car))
{
tem = Fboundp (car);
elt = XCONS (elt)->cdr;
elt = XCDR (elt);
if (!CONSP (elt))
goto invalid;
/* elt is now the cdr, and we know it is a cons cell.
......@@ -11564,23 +11519,26 @@ display_mode_element (it, depth, field_width, precision, elt)
{
tem = Fsymbol_value (car);
if (!NILP (tem))
{ elt = XCONS (elt)->car; goto tail_recurse; }
{
elt = XCAR (elt);
goto tail_recurse;
}
}
/* Symbol's value is nil (or symbol is unbound)
Get the cddr of the original list
and if possible find the caddr and use that. */
elt = XCONS (elt)->cdr;
elt = XCDR (elt);
if (NILP (elt))
break;
else if (!CONSP (elt))
goto invalid;
elt = XCONS (elt)->car;
elt = XCAR (elt);
goto tail_recurse;
}
else if (INTEGERP (car))
{
register int lim = XINT (car);
elt = XCONS (elt)->cdr;
elt = XCDR (elt);
if (lim < 0)
{
/* Negative int means reduce maximum width. */
......@@ -11612,8 +11570,8 @@ display_mode_element (it, depth, field_width, precision, elt)
&& (precision <= 0 || n < precision))
{
n += display_mode_element (it, depth, field_width - n,
precision - n, XCONS (elt)->car);
elt = XCONS (elt)->cdr;
precision - n, XCAR (elt));
elt = XCDR (elt);
}
}
}
......@@ -12431,28 +12389,28 @@ invisible_p (propval, list)
Lisp_Object list;
{
register Lisp_Object tail, proptail;
for (tail = list; CONSP (tail); tail = XCONS (tail)->cdr)
for (tail = list; CONSP (tail); tail = XCDR (tail))
{
register Lisp_Object tem;
tem = XCONS (tail)->car;
tem = XCAR (tail);
if (EQ (propval, tem))
return 1;
if (CONSP (tem) && EQ (propval, XCONS (tem)->car))
if (CONSP (tem) && EQ (propval, XCAR (tem)))
return 1;
}
if (CONSP (propval))
for (proptail = propval; CONSP (proptail);
proptail = XCONS (proptail)->cdr)
proptail = XCDR (proptail))
{
Lisp_Object propelt;
propelt = XCONS (proptail)->car;
for (tail = list; CONSP (tail); tail = XCONS (tail)->cdr)
propelt = XCAR (proptail);
for (tail = list; CONSP (tail); tail = XCDR (tail))
{
register Lisp_Object tem;
tem = XCONS (tail)->car;
tem = XCAR (tail);
if (EQ (propelt, tem))
return 1;
if (CONSP (tem) && EQ (propelt, XCONS (tem)->car))
if (CONSP (tem) && EQ (propelt, XCAR (tem)))
return 1;
}
}
......@@ -12472,27 +12430,29 @@ invisible_ellipsis_p (propval, list)
Lisp_Object list;
{
register Lisp_Object tail, proptail;
for (tail = list; CONSP (tail); tail = XCONS (tail)->cdr)
for (tail = list; CONSP (tail); tail = XCDR (tail))
{
register Lisp_Object tem;
tem = XCONS (tail)->car;
if (CONSP (tem) && EQ (propval, XCONS (tem)->car))
return ! NILP (XCONS (tem)->cdr);
tem = XCAR (tail);
if (CONSP (tem) && EQ (propval, XCAR (tem)))
return ! NILP (XCDR (tem));
}
if (CONSP (propval))
for (proptail = propval; CONSP (proptail);
proptail = XCONS (proptail)->cdr)
for (proptail = propval; CONSP (proptail); proptail = XCDR (proptail))
{
Lisp_Object propelt;
propelt = XCONS (proptail)->car;
for (tail = list; CONSP (tail); tail = XCONS (tail)->cdr)
propelt = XCAR (proptail);
for (tail = list; CONSP (tail); tail = XCDR (tail))
{
register Lisp_Object tem;
tem = XCONS (tail)->car;
if (CONSP (tem) && EQ (propelt, XCONS (tem)->car))
return ! NILP (XCONS (tem)->cdr);
tem = XCAR (tail);
if (CONSP (tem) && EQ (propelt, XCAR (tem)))
return ! NILP (XCDR (tem));
}
}
return 0;
}
......@@ -12505,9 +12465,6 @@ invisible_ellipsis_p (propval, list)
void
syms_of_xdisp ()
{
Vresize_mini_config = Qnil;
staticpro (&Vresize_mini_config);
Vwith_echo_area_save_vector = Qnil;
staticpro (&Vwith_echo_area_save_vector);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment