]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.1.1317: noisy error when restoring folds from session fails v9.1.1317
authorIgor Lacerda <igorlfs@ufmg.br>
Thu, 17 Apr 2025 18:41:31 +0000 (20:41 +0200)
committerChristian Brabandt <cb@256bit.org>
Thu, 17 Apr 2025 18:43:25 +0000 (20:43 +0200)
Problem:  noisy error when restoring folds from session fails
Solution: ignore errors silently when sourcing session file.
          (Igor Lacerda)

fixes: #15813
closes: #17127

Signed-off-by: Igor Lacerda <igorlfs@ufmg.br>
Signed-off-by: Christian Brabandt <cb@256bit.org>
src/fold.c
src/testdir/test_mksession.vim
src/version.c

index b165dc9b0ee9d28f63e9f4720812434ca7c15b60..4824a807ce3cec445e745ca36bb376f48e7cead0 100644 (file)
@@ -3576,7 +3576,7 @@ put_folds_recurse(FILE *fd, garray_T *gap, linenr_T off)
        // Do nested folds first, they will be created closed.
        if (put_folds_recurse(fd, &fp->fd_nested, off + fp->fd_top) == FAIL)
            return FAIL;
-       if (fprintf(fd, "%ld,%ldfold", fp->fd_top + off,
+       if (fprintf(fd, "sil! %ld,%ldfold", fp->fd_top + off,
                                        fp->fd_top + off + fp->fd_len - 1) < 0
                || put_eol(fd) == FAIL)
            return FAIL;
@@ -3609,9 +3609,10 @@ put_foldopen_recurse(
            if (fp->fd_nested.ga_len > 0)
            {
                // open nested folds while this fold is open
+               // ignore errors
                if (fprintf(fd, "%ld", fp->fd_top + off) < 0
                        || put_eol(fd) == FAIL
-                       || put_line(fd, "normal! zo") == FAIL)
+                       || put_line(fd, "sil! normal! zo") == FAIL)
                    return FAIL;
                if (put_foldopen_recurse(fd, wp, &fp->fd_nested,
                                                             off + fp->fd_top)
@@ -3652,7 +3653,7 @@ put_fold_open_close(FILE *fd, fold_T *fp, linenr_T off)
 {
     if (fprintf(fd, "%ld", fp->fd_top + off) < 0
            || put_eol(fd) == FAIL
-           || fprintf(fd, "normal! z%c",
+           || fprintf(fd, "sil! normal! z%c",
                           fp->fd_flags == FD_CLOSED ? 'c' : 'o') < 0
            || put_eol(fd) == FAIL)
        return FAIL;
index d0ee6e8a7950e9a848e316127808e10ec642f6c1..72a9376c3ef75ef62a2fe30f7cf829aef2b89cf0 100644 (file)
@@ -1264,6 +1264,24 @@ func Test_mkview_manual_fold()
   bw!
 endfunc
 
+" Test for handling invalid folds within views
+func Test_mkview_ignore_invalid_folds()
+  call writefile(range(1,10), 'Xmkvfile', 'D')
+  new Xmkvfile
+  " create some folds
+  5,6fold
+  4,7fold
+  mkview Xview
+  normal zE
+  " delete lines to make folds invalid
+  call deletebufline('', 6, '$')
+  source Xview
+  call assert_equal([-1, -1, -1, -1, -1, -1], [foldclosed(3), foldclosed(4),
+        \ foldclosed(5), foldclosed(6), foldclosed(7), foldclosed(8)])
+  call delete('Xview')
+  bw!
+endfunc
+
 " Test default 'viewdir' value
 func Test_mkview_default_home()
   if has('win32')
index abd0fa3661898cad4f40be535aa6945058492e7f..e6c8690d200c6cb0e43d0bcebc74d71776c5e0c4 100644 (file)
@@ -704,6 +704,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1317,
 /**/
     1316,
 /**/