diff options
author | Eli Zaretskii <eliz@gnu.org> | 2011-09-18 18:48:12 +0300 |
---|---|---|
committer | Eli Zaretskii <eliz@gnu.org> | 2011-09-18 18:48:12 +0300 |
commit | 56cd55c849f9e08e732b9fdda59e12f58867de04 (patch) | |
tree | e30432ebc10a0574fc3d367da4ba4fdcb4d1307b | |
parent | 3aace4e4b36b946b577cf708cc26fc00d3288a21 (diff) | |
download | emacs-56cd55c849f9e08e732b9fdda59e12f58867de04.tar.gz |
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.
-rw-r--r-- | src/ChangeLog | 8 | ||||
-rw-r--r-- | 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 <eliz@gnu.org> + + * 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 <mituharu@math.s.chiba-u.ac.jp> * 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); |