From 0c2f254bc3d69ba08a59037e8e192d5d7fb7d816 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Wed, 10 Dec 2014 19:54:19 +0200 Subject: [PATCH] Support overflow-newline-into-fringe together with word-wrap (bug#19300) src/xdisp.c (move_it_in_display_line_to, display_line): Don't disallow overflow-newline-into-fringe when word-wrap is in effect. --- src/ChangeLog | 6 ++++++ src/xdisp.c | 25 +++++++++++++++++-------- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 0a8acf935bd..b8663bcf7c0 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2014-12-10 Eli Zaretskii + + * xdisp.c (move_it_in_display_line_to, display_line): Don't + disallow overflow-newline-into-fringe when word-wrap is in + effect. (Bug#19300) + 2014-12-04 Lee Duhem (tiny change) * eval.c (Fsignal): Remove duplicate test. diff --git a/src/xdisp.c b/src/xdisp.c index bd262818036..e3e00357ed0 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -8792,12 +8792,7 @@ move_it_in_display_line_to (struct it *it, doesn't fit on the line, e.g. a wide image. */ it->hpos == 0 || (new_x == it->last_visible_x - && FRAME_WINDOW_P (it->f) - /* When word-wrap is ON and we have a valid - wrap point, we don't allow the last glyph - to "just barely fit" on the line. */ - && (it->line_wrap != WORD_WRAP - || wrap_it.sp < 0))) + && FRAME_WINDOW_P (it->f))) { ++it->hpos; it->current_x = new_x; @@ -8864,7 +8859,8 @@ move_it_in_display_line_to (struct it *it, } if (ITERATOR_AT_END_OF_LINE_P (it) && (it->line_wrap != WORD_WRAP - || wrap_it.sp < 0)) + || wrap_it.sp < 0 + || IT_OVERFLOW_NEWLINE_INTO_FRINGE (it))) { result = MOVE_NEWLINE_OR_CR; break; @@ -20389,7 +20385,8 @@ display_line (struct it *it) { /* If line-wrap is on, check if a previous wrap point was found. */ - if (wrap_row_used > 0 + if (!IT_OVERFLOW_NEWLINE_INTO_FRINGE (it) + && wrap_row_used > 0 /* Even if there is a previous wrap point, continue the line here as usual, if (i) the previous character @@ -20419,6 +20416,18 @@ display_line (struct it *it) row->continued_p = 0; row->exact_window_width_line_p = 1; } + /* If line-wrap is on, check if a + previous wrap point was found. */ + else if (wrap_row_used > 0 + /* Even if there is a previous wrap + point, continue the line here as + usual, if (i) the previous character + was a space or tab AND (ii) the + current character is not. */ + && (!may_wrap + || IT_DISPLAYING_WHITESPACE (it))) + goto back_to_wrap; + } } else if (it->bidi_p) -- 2.11.4.GIT