if (row->enabled_p)
{
- if (row->inverse_p)
- {
- /* Give all highlighted lines the same hash code
- so as to encourage scrolling to leave them in place. */
- hash = -1;
- }
- else
- {
- struct glyph *glyph = row->glyphs[TEXT_AREA];
- struct glyph *end = glyph + row->used[TEXT_AREA];
-
- while (glyph < end)
- {
- int c = glyph->u.ch;
- int face_id = glyph->face_id;
- if (must_write_spaces)
- c -= SPACEGLYPH;
- hash = (((hash << 4) + (hash >> 24)) & 0x0fffffff) + c;
- hash = (((hash << 4) + (hash >> 24)) & 0x0fffffff) + face_id;
- ++glyph;
- }
+ struct glyph *glyph = row->glyphs[TEXT_AREA];
+ struct glyph *end = glyph + row->used[TEXT_AREA];
+
+ while (glyph < end)
+ {
+ int c = glyph->u.ch;
+ int face_id = glyph->face_id;
+ if (must_write_spaces)
+ c -= SPACEGLYPH;
+ hash = (((hash << 4) + (hash >> 24)) & 0x0fffffff) + c;
+ hash = (((hash << 4) + (hash >> 24)) & 0x0fffffff) + face_id;
+ ++glyph;
+ }
- if (hash == 0)
- hash = 1;
- }
+ if (hash == 0)
+ hash = 1;
}
return hash;
}
if (a->truncated_on_left_p != b->truncated_on_left_p
- || a->inverse_p != b->inverse_p
|| a->fill_line_p != b->fill_line_p
|| a->truncated_on_right_p != b->truncated_on_right_p
|| a->overlay_arrow_p != b->overlay_arrow_p
- r->used[LEFT_MARGIN_AREA]
- r->used[RIGHT_MARGIN_AREA]);
r->mode_line_p = 0;
- r->inverse_p = fr->inverse_p;
}
}
}
frame_row->used[TEXT_AREA]
= window_matrix->matrix_x + window_matrix->matrix_w;
- /* Or in other flags. */
- frame_row->inverse_p |= window_row->inverse_p;
-
/* Next row. */
++window_y;
++frame_y;
/* Synchronize glyph pointers in the current matrix of window W with
- the current frame matrix. W must be full-width, and be on a tty
- frame. */
+ the current frame matrix. */
static void
sync_window_with_frame_matrix_rows (w)
{
struct frame *f = XFRAME (w->frame);
struct glyph_row *window_row, *window_row_end, *frame_row;
+ int left, right, x, width;
- /* Preconditions: W must be a leaf window and full-width. Its frame
- must have a frame matrix. */
+ /* Preconditions: W must be a leaf window on a tty frame. */
xassert (NILP (w->hchild) && NILP (w->vchild));
- xassert (WINDOW_FULL_WIDTH_P (w));
xassert (!FRAME_WINDOW_P (f));
- /* If W is a full-width window, glyph pointers in W's current matrix
- have, by definition, to be the same as glyph pointers in the
- corresponding frame matrix. */
+ left = margin_glyphs_to_reserve (w, 1, w->left_margin_width);
+ right = margin_glyphs_to_reserve (w, 1, w->right_margin_width);
+ x = w->current_matrix->matrix_x;
+ width = w->current_matrix->matrix_w;
+
window_row = w->current_matrix->rows;
window_row_end = window_row + w->current_matrix->nrows;
frame_row = f->current_matrix->rows + XFASTINT (w->top);
- while (window_row < window_row_end)
+
+ for (; window_row < window_row_end; ++window_row, ++frame_row)
{
- int area;
-
- for (area = LEFT_MARGIN_AREA; area <= LAST_AREA; ++area)
- window_row->glyphs[area] = frame_row->glyphs[area];
-
- ++window_row, ++frame_row;
+ window_row->glyphs[LEFT_MARGIN_AREA]
+ = frame_row->glyphs[0] + x;
+ window_row->glyphs[TEXT_AREA]
+ = window_row->glyphs[LEFT_MARGIN_AREA] + left;
+ window_row->glyphs[LAST_AREA]
+ = window_row->glyphs[LEFT_MARGIN_AREA] + width;
+ window_row->glyphs[RIGHT_MARGIN_AREA]
+ = window_row->glyphs[LAST_AREA] - right;
}
}
if (colored_spaces_p)
write_spaces_p = 1;
- if (desired_row->inverse_p
- != (current_row->enabled_p && current_row->inverse_p))
- {
- int n = current_row->enabled_p ? current_row->used[TEXT_AREA] : 0;
- change_line_highlight (desired_row->inverse_p, vpos, vpos, n);
- current_row->enabled_p = 0;
- }
- else
- reassert_line_highlight (desired_row->inverse_p, vpos);
-
/* Current row not enabled means it has unknown contents. We must
write the whole desired line in that case. */
must_write_whole_line_p = !current_row->enabled_p;
obody = MATRIX_ROW_GLYPH_START (current_matrix, vpos);
olen = current_row->used[TEXT_AREA];
- if (!current_row->inverse_p)
- {
- /* Ignore trailing spaces, if we can. */
- if (!write_spaces_p)
- while (olen > 0 && CHAR_GLYPH_SPACE_P (obody[olen-1]))
- olen--;
- }
- else
- {
- /* For an inverse-video line, make sure it's filled with
- spaces all the way to the frame edge so that the reverse
- video extends all the way across. */
- while (olen < FRAME_WIDTH (f) - 1)
- obody[olen++] = space_glyph;
- }
+ /* Ignore trailing spaces, if we can. */
+ if (!write_spaces_p)
+ while (olen > 0 && CHAR_GLYPH_SPACE_P (obody[olen-1]))
+ olen--;
}
current_row->enabled_p = 1;
current_row->used[TEXT_AREA] = desired_row->used[TEXT_AREA];
- current_row->inverse_p = desired_row->inverse_p;
/* If desired line is empty, just clear the line. */
if (!desired_row->enabled_p)
/* Pretend trailing spaces are not there at all,
unless for one reason or another we must write all spaces. */
- if (!desired_row->inverse_p)
- {
- if (!write_spaces_p)
- while (nlen > 0 && CHAR_GLYPH_SPACE_P (nbody[nlen - 1]))
- nlen--;
- }
- else
- {
- /* For an inverse-video line, give it extra trailing spaces all
- the way to the frame edge so that the reverse video extends
- all the way across. */
- while (nlen < FRAME_WIDTH (f) - 1)
- nbody[nlen++] = space_glyph;
- }
+ if (!write_spaces_p)
+ while (nlen > 0 && CHAR_GLYPH_SPACE_P (nbody[nlen - 1]))
+ nlen--;
/* If there's no i/d char, quickly do the best we can without it. */
if (!char_ins_del_ok)
{
/* If current line is blank, skip over initial spaces, if
possible, and write the rest. */
- if (write_spaces_p || desired_row->inverse_p)
+ if (write_spaces_p)
nsp = 0;
else
nsp = count_blanks (nbody, nlen);
/* Compute number of leading blanks in old and new contents. */
osp = count_blanks (obody, olen);
- nsp = (desired_row->inverse_p || colored_spaces_p
- ? 0
- : count_blanks (nbody, nlen));
+ nsp = (colored_spaces_p ? 0 : count_blanks (nbody, nlen));
/* Compute number of matching chars starting with first non-blank. */
begmatch = count_match (obody + osp, obody + olen,
}
adjust_glyphs (f);
- SET_FRAME_GARBAGED (f);
calculate_costs (f);
+ SET_FRAME_GARBAGED (f);
+ f->resized_p = 1;
UNBLOCK_INPUT;
This means everything is in inverse video which otherwise would not be. */);
DEFVAR_BOOL ("visible-bell", &visible_bell,
- doc: /* *Non-nil means try to flash the frame to represent a bell. */);
+ doc: /* *Non-nil means try to flash the frame to represent a bell.
+
+See also `ring-bell-function'. */);
DEFVAR_BOOL ("no-redraw-on-reenter", &no_redraw_on_reenter,
doc: /* *Non-nil means no need to redraw entire frame after suspending.