From 56cd55c849f9e08e732b9fdda59e12f58867de04 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Sun, 18 Sep 2011 18:48:12 +0300 Subject: [PATCH] Fix bug #9530 on a TTY. src/xdisp.c (display_line): Record maximum and minimum buffer positions even if no glyphs were produced (e.g., by a zero-width stretch). Fixes bug#9530 on a TTY. Under word-wrap, don't record buffer positions that will be removed from the glyph row because they don't fit. --- src/ChangeLog | 8 ++++++++ src/xdisp.c | 16 +++++++++++----- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index e5962fa8fed..09ac0d78e73 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,11 @@ +2011-09-18 Eli Zaretskii + + * xdisp.c (display_line): Record maximum and minimum buffer + positions even if no glyphs were produced (e.g., by a zero-width + stretch). Fixes bug#9530 on a TTY. Under word-wrap, don't record + buffer positions that will be removed from the glyph row because + they don't fit. + 2011-09-18 YAMAMOTO Mitsuharu * xdisp.c (expose_window): Save original value of phys_cursor_on_p diff --git a/src/xdisp.c b/src/xdisp.c index 921a332fdc6..b2859d0767b 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -18704,11 +18704,6 @@ display_line (struct it *it) it->current_x = new_x; it->continuation_lines_width += new_x; ++it->hpos; - /* Record the maximum and minimum buffer - positions seen so far in glyphs that will be - displayed by this row. */ - if (it->bidi_p) - RECORD_MAX_MIN_POS (it); if (i == nglyphs - 1) { /* If line-wrap is on, check if a previous @@ -18723,6 +18718,11 @@ display_line (struct it *it) || IT_DISPLAYING_WHITESPACE (it))) goto back_to_wrap; + /* Record the maximum and minimum buffer + positions seen so far in glyphs that will be + displayed by this row. */ + if (it->bidi_p) + RECORD_MAX_MIN_POS (it); set_iterator_to_next (it, 1); if (IT_OVERFLOW_NEWLINE_INTO_FRINGE (it)) { @@ -18740,6 +18740,8 @@ display_line (struct it *it) } } } + else if (it->bidi_p) + RECORD_MAX_MIN_POS (it); } else if (CHAR_GLYPH_PADDING_P (*glyph) && !FRAME_WINDOW_P (it->f)) @@ -18870,6 +18872,10 @@ display_line (struct it *it) xassert (it->first_visible_x <= it->last_visible_x); } } + /* Even if this display element produced no glyphs at all, + we want to record its position. */ + if (it->bidi_p && nglyphs == 0) + RECORD_MAX_MIN_POS (it); row->ascent = max (row->ascent, it->max_ascent); row->height = max (row->height, it->max_ascent + it->max_descent); -- 2.39.2