]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 8.2.4813: pasting text while indent folding may mess up folds v8.2.4813
authorBrandon Simmons <simmsbra@gmail.com>
Sat, 23 Apr 2022 12:50:17 +0000 (13:50 +0100)
committerBram Moolenaar <Bram@vim.org>
Sat, 23 Apr 2022 12:50:17 +0000 (13:50 +0100)
Problem:    Pasting text while indent folding may mess up folds.
Solution:   Adjust the way folds are split. (Brandon Simmons, closes #10254)

src/fold.c
src/testdir/test_fold.vim
src/version.c

index 8078e3af888c34f25ea9aa4409f24b89aaf32874..229cb2ad2d8f1fcbd3d66cd6ab1f117390fef27c 100644 (file)
@@ -1128,7 +1128,7 @@ cloneFoldGrowArray(garray_T *from, garray_T *to)
 // foldFind() {{{2
 /*
  * Search for line "lnum" in folds of growarray "gap".
- * Set *fpp to the fold struct for the fold that contains "lnum" or
+ * Set "*fpp" to the fold struct for the fold that contains "lnum" or
  * the first fold below it (careful: it can be beyond the end of the array!).
  * Returns FALSE when there is no fold that contains "lnum".
  */
@@ -2911,7 +2911,8 @@ foldSplit(
     // any between top and bot, they have been removed by the caller.
     gap1 = &fp->fd_nested;
     gap2 = &fp[1].fd_nested;
-    if (foldFind(gap1, bot + 1 - fp->fd_top, &fp2))
+    (void)foldFind(gap1, bot + 1 - fp->fd_top, &fp2);
+    if (fp2 != NULL)
     {
        len = (int)((fold_T *)gap1->ga_data + gap1->ga_len - fp2);
        if (len > 0 && ga_grow(gap2, len) == OK)
index e3b6b6e58bc250cbc4bd74fbdbcba55b19f22b39..3abb81aaffcf3534c231738f3c3171716458fb35 100644 (file)
@@ -1439,4 +1439,24 @@ func Test_foldtext_scriptlocal_func()
   delfunc s:FoldText
 endfunc
 
+" Make sure a fold containing a nested fold is split correctly when using
+" foldmethod=indent
+func Test_fold_split()
+  new
+  let lines =<< trim END
+    line 1
+      line 2
+      line 3
+        line 4
+        line 5
+  END
+  call setline(1, lines)
+  setlocal sw=2
+  setlocal foldmethod=indent foldenable
+  call assert_equal([0, 1, 1, 2, 2], range(1, 5)->map('foldlevel(v:val)'))
+  call append(2, 'line 2.5')
+  call assert_equal([0, 1, 0, 1, 2, 2], range(1, 6)->map('foldlevel(v:val)'))
+  bw!
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
index 078f968180405d6deae2e5e7da48298bfcc1cff1..7530c1b54bf97139ce7ba61a7e3099a3fdc8ed88 100644 (file)
@@ -746,6 +746,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    4813,
 /**/
     4812,
 /**/