/* If rows are in sync, we don't have to copy glyphs because
frame and window share glyphs. */
+
+#if GLYPH_DEBUG
+ strcpy (w->current_matrix->method, w->desired_matrix->method);
+#endif
}
/* Set number of used glyphs in the frame matrix. Since we fill
= MATRIX_ROW (w->current_matrix, row);
struct glyph_row *desired_row
= MATRIX_ROW (w->desired_matrix, row);
-
- assign_row (current_row, desired_row);
+
+ if (desired_row->enabled_p)
+ assign_row (current_row, desired_row);
+ else
+ swap_glyph_pointers (desired_row, current_row);
current_row->enabled_p = 1;
}
}
/* Give up if highlighting trailing whitespace and we have trailing
whitespace in glyph_row. We would have to remove the trailing
whitespace face in that case. */
- if (it.show_trailing_whitespace_p
+ if (!NILP (Vshow_trailing_whitespace)
&& glyph_row->used[TEXT_AREA])
{
struct glyph *last;
glyph_row->contains_overlapping_glyphs_p
|= it.glyph_row->contains_overlapping_glyphs_p;
- if (it.show_trailing_whitespace_p)
+ if (!NILP (Vshow_trailing_whitespace))
highlight_trailing_whitespace (it.f, glyph_row);
/* Write glyphs. If at end of row, we can simply call write_glyphs.
if (!NILP (Vtransient_mark_mode) && !NILP (current_buffer->mark_active))
return 0;
+ /* Can't use direct output if highlighting trailing whitespace. */
+ if (!NILP (Vshow_trailing_whitespace))
+ return 0;
+
row = MATRIX_ROW (w->current_matrix, w->cursor.vpos);
if (PT <= MATRIX_ROW_START_BYTEPOS (row)
/* If display line has unknown contents, write the whole line. */
if (must_write_whole_line_p)
{
- cursor_to (vpos, 0);
- write_glyphs (nbody, nlen);
+ if (!must_write_spaces)
+ while (nlen > 0 && CHAR_GLYPH_SPACE_P (nbody[nlen - 1]))
+ --nlen;
+
+ if (nlen)
+ {
+ cursor_to (vpos, 0);
+ write_glyphs (nbody, nlen);
+ }
+
cursor_to (vpos, nlen);
- clear_end_of_line (-1);
+ clear_end_of_line (olen);
make_current (desired_matrix, current_matrix, vpos);
return;
}