Patch 8.2.4813
Problem:    Pasting text while indent folding may mess up folds.
Solution:   Adjust the way folds are split. (Brandon Simmons, closes #10254)
Files:      src/fold.c, src/testdir/test_fold.vim


*** ../vim-8.2.4812/src/fold.c  2022-02-16 19:24:03.622162411 +0000
--- src/fold.c  2022-04-23 13:47:57.987510144 +0100
***************
*** 1128,1134 ****
  // foldFind() {{{2
  /*
   * Search for line "lnum" in folds of growarray "gap".
!  * 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".
   */
--- 1128,1134 ----
  // foldFind() {{{2
  /*
   * Search for line "lnum" in folds of growarray "gap".
!  * 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,2917 ****
      // 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))
      {
        len = (int)((fold_T *)gap1->ga_data + gap1->ga_len - fp2);
        if (len > 0 && ga_grow(gap2, len) == OK)
--- 2911,2918 ----
      // any between top and bot, they have been removed by the caller.
      gap1 = &fp->fd_nested;
      gap2 = &fp[1].fd_nested;
!     (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)
*** ../vim-8.2.4812/src/testdir/test_fold.vim   2021-12-26 21:54:38.128433097 
+0000
--- src/testdir/test_fold.vim   2022-04-23 13:44:02.919605017 +0100
***************
*** 1439,1442 ****
--- 1439,1462 ----
    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
*** ../vim-8.2.4812/src/version.c       2022-04-23 12:05:47.398319460 +0100
--- src/version.c       2022-04-23 13:46:34.347544253 +0100
***************
*** 748,749 ****
--- 748,751 ----
  {   /* Add new patch number below this line */
+ /**/
+     4813,
  /**/

-- 
Despite the cost of living, have you noticed how it remains so popular?

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///                                                                      \\\
\\\        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/20220423125107.055F41C43E7%40moolenaar.net.

Raspunde prin e-mail lui