]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.1.0054: 'linebreak' may still apply to leading whitespace v9.1.0054
authorzeertzjq <zeertzjq@outlook.com>
Thu, 25 Jan 2024 20:27:13 +0000 (21:27 +0100)
committerChristian Brabandt <cb@256bit.org>
Thu, 25 Jan 2024 20:28:56 +0000 (21:28 +0100)
Problem:  'linebreak' may still apply to leading whitespace
          (VanaIgr)
Solution: Compare pointers instead of virtual columns.
          (zeertzjq)

related: neovim/neovim#27180
closes: #13915

Co-authored-by: VanaIgr <vanaigranov@gmail.com>
Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
src/charset.c
src/testdir/test_listlbr.vim
src/version.c

index eef2e8983c280e60fa4f6fd515cef843cb018bf7..919885df07fcf1006e68a07aa0478e90c0b6b533 100644 (file)
@@ -1126,7 +1126,6 @@ win_lbr_chartabsize(
     int                n;
     char_u     *sbr;
     int                no_sbr = FALSE;
-    colnr_T    vcol_start = 0; // start from where to consider linebreak
 #endif
 
 #if defined(FEAT_PROP_POPUP)
@@ -1352,22 +1351,21 @@ win_lbr_chartabsize(
     if (headp != NULL)
        *headp = head;
 
+    int need_lbr = FALSE;
     /*
      * If 'linebreak' set check at a blank before a non-blank if the line
-     * needs a break here
+     * needs a break here.
      */
-    if (wp->w_p_lbr && wp->w_p_wrap && wp->w_width != 0)
+    if (wp->w_p_lbr && wp->w_p_wrap && wp->w_width != 0
+           && VIM_ISBREAK((int)s[0]) && !VIM_ISBREAK((int)s[1]))
     {
        char_u  *t = cts->cts_line;
        while (VIM_ISBREAK((int)t[0]))
            t++;
-       vcol_start = t - cts->cts_line;
+       // 'linebreak' is only needed when not in leading whitespace.
+       need_lbr = s >= t;
     }
-    if (wp->w_p_lbr && vcol_start <= vcol
-           && VIM_ISBREAK((int)s[0])
-           && !VIM_ISBREAK((int)s[1])
-           && wp->w_p_wrap
-           && wp->w_width != 0)
+    if (need_lbr)
     {
        /*
         * Count all characters from first non-blank after a blank up to next
index bcbd886abeadb78d6c9cf05d4837415ffa05a31f..68bf948658296770620afa2240abee0cebfbd99a 100644 (file)
@@ -374,13 +374,13 @@ endfunc
 
 func Test_linebreak_no_break_after_whitespace_only()
   call s:test_windows('setl ts=4 linebreak wrap')
-  call setline(1, "\tabcdefghijklmnopqrstuvwxyz" ..
+  call setline(1, "\t  abcdefghijklmnopqrstuvwxyz" ..
         \ "abcdefghijklmnopqrstuvwxyz")
   let lines = s:screen_lines([1, 4], winwidth(0))
   let expect = [
-\ "    abcdefghijklmnop",
-\ "qrstuvwxyzabcdefghij",
-\ "klmnopqrstuvwxyz    ",
+\ "      abcdefghijklmn",
+\ "opqrstuvwxyzabcdefgh",
+\ "ijklmnopqrstuvwxyz  ",
 \ "~                   ",
 \ ]
   call s:compare_lines(expect, lines)
index a8dba0e782096f493b20c863e4075041392c569a..fe10b9569ab07dd2b6b2202ea0c3fa7d1b609ef3 100644 (file)
@@ -704,6 +704,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    54,
 /**/
     53,
 /**/