]> granicus.if.org Git - vim/commitdiff
patch 8.2.4645: 'shortmess' changed when session does not store options v8.2.4645
authorJames Cherti <60946298+jamescherti@users.noreply.github.com>
Tue, 29 Mar 2022 11:02:57 +0000 (12:02 +0100)
committerBram Moolenaar <Bram@vim.org>
Tue, 29 Mar 2022 11:02:57 +0000 (12:02 +0100)
Problem:    'shortmess' changed when session does not store options.
Solution:   Save and restore 'shortmess' if needed. (James Charti,
            closes #10037)

src/session.c
src/testdir/test_mksession.vim
src/version.c

index fa77f89c8e05038f27519b65db3782b22d334d48..d80f11ff7c65f659b2f9da1cb0644afcf531542d 100644 (file)
@@ -686,6 +686,11 @@ makeopens(
     if (put_line(fd, "endif") == FAIL)
        goto fail;
 
+    // save 'shortmess' if not storing options
+    if ((ssop_flags & SSOP_OPTIONS) == 0
+           && put_line(fd, "let s:shortmess_save = &shortmess") == FAIL)
+       goto fail;
+
     // Now save the current files, current buffer first.
     if (put_line(fd, "set shortmess=aoO") == FAIL)
        goto fail;
@@ -956,10 +961,23 @@ makeopens(
     if (put_line(fd, "unlet! s:wipebuf") == FAIL)
        goto fail;
 
-    // Re-apply 'winheight', 'winwidth' and 'shortmess'.
-    if (fprintf(fd, "set winheight=%ld winwidth=%ld shortmess=%s",
-                              p_wh, p_wiw, p_shm) < 0 || put_eol(fd) == FAIL)
+    // Re-apply 'winheight' and 'winwidth'.
+    if (fprintf(fd, "set winheight=%ld winwidth=%ld",
+                              p_wh, p_wiw) < 0 || put_eol(fd) == FAIL)
        goto fail;
+
+    // Restore 'shortmess'.
+    if (ssop_flags & SSOP_OPTIONS)
+    {
+        if (fprintf(fd, "set shortmess=%s", p_shm) < 0 || put_eol(fd) == FAIL)
+            goto fail;
+    }
+    else
+    {
+        if (put_line(fd, "let &shortmess = s:shortmess_save") == FAIL)
+            goto fail;
+    }
+
     if (tab_firstwin->w_next != NULL)
     {
        // Restore 'winminheight' and 'winminwidth'.
index 2c2737e00692f96c30bb45afe0a6db282c49ba8e..247d1797d1c2e8dfd36bcbb8cc96e6dc67667275 100644 (file)
@@ -1007,6 +1007,49 @@ func Test_mksession_winminheight()
   set sessionoptions&
 endfunc
 
+" Test for mksession with and without options restores shortmess
+func Test_mksession_shortmess()
+  " Without options
+  set sessionoptions-=options
+  split
+  mksession! Xtest_mks.out
+  let found_save = 0
+  let found_restore = 0
+  let lines = readfile('Xtest_mks.out')
+  for line in lines
+    let line = trim(line)
+
+    if line ==# 'let s:shortmess_save = &shortmess'
+      let found_save += 1
+    endif
+
+    if found_save !=# 0 && line ==# 'let &shortmess = s:shortmess_save'
+      let found_restore += 1
+    endif
+  endfor
+  call assert_equal(1, found_save)
+  call assert_equal(1, found_restore)
+  call delete('Xtest_mks.out')
+  close
+  set sessionoptions&
+
+  " With options
+  set sessionoptions+=options
+  split
+  mksession! Xtest_mks.out
+  let found_restore = 0
+  let lines = readfile('Xtest_mks.out')
+  for line in lines
+    if line =~# 's:shortmess_save'
+      let found_restore += 1
+    endif
+  endfor
+  call assert_equal(0, found_restore)
+  call delete('Xtest_mks.out')
+  close
+  set sessionoptions&
+endfunc
+
 " Test for mksession with 'compatible' option
 func Test_mksession_compatible()
   mksession! Xtest_mks1.out
index 90b30ab3212369222fad0811d704b1333bf34a03..03778bd5caa264920655c719d811e259153190d5 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    4645,
 /**/
     4644,
 /**/