]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.1.0377: Formatting text wrong when 'breakindent' is set v9.1.0377
authorChristian Brabandt <cb@256bit.org>
Sat, 27 Apr 2024 09:55:08 +0000 (11:55 +0200)
committerChristian Brabandt <cb@256bit.org>
Sat, 27 Apr 2024 09:55:08 +0000 (11:55 +0200)
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>
src/testdir/test_textformat.vim
src/textformat.c
src/version.c

index a9cffd0e6f5d9619fcf4d62be5fa26d43ce34bba..5d584867a7e6f5e2ab407ddb8c1536857e38f067 100644 (file)
@@ -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
index 41ec2cfe4be98085802ab05a06183d7526c0c8f8..d380899c8ffc977f9d95683ca54977665fe88225 100644 (file)
@@ -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)
     {
index cac24ffb5a78e2b77580c82ec1aa670a337b896c..71e56a223f7e78f6f39ae1e41adfdce54533c6fd 100644 (file)
@@ -704,6 +704,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    377,
 /**/
     376,
 /**/