]> git.eshelyaron.com Git - emacs.git/commitdiff
Support overflow-newline-into-fringe together with word-wrap (bug#19300)
authorEli Zaretskii <eliz@gnu.org>
Wed, 10 Dec 2014 17:54:19 +0000 (19:54 +0200)
committerEli Zaretskii <eliz@gnu.org>
Wed, 10 Dec 2014 17:54:19 +0000 (19:54 +0200)
 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
src/xdisp.c

index 0a8acf935bde6e57d95322e43c16b2587648667d..b8663bcf7c00a54e07dc456b55d6a4652eac6d5c 100644 (file)
@@ -1,3 +1,9 @@
+2014-12-10  Eli Zaretskii  <eliz@gnu.org>
+
+       * 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  <lee.duhem@gmail.com>  (tiny change)
 
        * eval.c (Fsignal): Remove duplicate test.
index bd262818036d9b5c5d9c7b2c036cdaf2412b40cf..e3e00357ed06901bb4d6b86831c6ac28c3c731c8 100644 (file)
@@ -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)