changeset 35065:6cb7e7ee8477 v9.1.0377

patch 9.1.0377: Formatting text wrong when 'breakindent' is set Commit: https://github.com/vim/vim/commit/86ef815959d18961a3d21cee07ab724e618d3a7b Author: Christian Brabandt <cb@256bit.org> Date: Sat Apr 27 11:55:08 2024 +0200 patch 9.1.0377: Formatting text wrong when 'breakindent' is set Problem: formatting text wrong when 'breakindent' is set (Gary Johnson) Solution: temporarily disable 'breakindent' option when formatting text, so that the breakindent is not wrongly taken into account for the line length fixes: #14630 closes: #14637 Signed-off-by: Christian Brabandt <cb@256bit.org>
author Christian Brabandt <cb@256bit.org>
date Sat, 27 Apr 2024 12:00:06 +0200
parents deb9cd1f5e3f
children 440452ed0dc3
files src/testdir/test_textformat.vim src/textformat.c src/version.c
diffstat 3 files changed, 29 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/testdir/test_textformat.vim
+++ b/src/testdir/test_textformat.vim
@@ -1312,4 +1312,28 @@ func Test_textwdith_overflow()
   bw!
 endfunc
 
+func Test_breakindent_reformat()
+  " Make sure textformatting uses the full width
+  " of the textwidth and does not consider the indent
+  " from breakindent into account when calculating the
+  " line length. Should break at tw 78 and not at 70
+  CheckOption breakindent
+  new
+  80vnew
+  39vnew
+  setl ai breakindent tw=78
+  let lorem = [
+  \  '	Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam luctus',
+  \  '	lectus sodales, dictum augue vel, molestie augue. Duis sit amet',
+  \  '	rhoncus justo. Nullam posuere risus semper magna commodo scelerisque.',
+  \  '	Duis et venenatis sem. In rhoncus augue sed tempor mattis. Mauris id',
+  \  '	aliquet odio.']
+  call setline(1, lorem)
+  norm! gqap
+  call assert_equal(lorem, getline(1, '$'))
+  bw!
+  bw!
+  bw!
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
--- a/src/textformat.c
+++ b/src/textformat.c
@@ -59,9 +59,11 @@ internal_format(
     int		safe_tw = trim_to_int(8 * (vimlong_T)textwidth);
 #ifdef FEAT_LINEBREAK
     int		has_lbr = curwin->w_p_lbr;
+    int		has_bri = curwin->w_p_bri;
 
     // make sure win_lbr_chartabsize() counts correctly
     curwin->w_p_lbr = FALSE;
+    curwin->w_p_bri = FALSE;
 #endif
 
     // When 'ai' is off we don't want a space under the cursor to be
@@ -475,6 +477,7 @@ internal_format(
 
 #ifdef FEAT_LINEBREAK
     curwin->w_p_lbr = has_lbr;
+    curwin->w_p_bri = has_bri;
 #endif
     if (!format_only && haveto_redraw)
     {
--- a/src/version.c
+++ b/src/version.c
@@ -705,6 +705,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    377,
+/**/
     376,
 /**/
     375,