0
0
mirror of https://github.com/vim/vim.git synced 2025-07-26 11:04:33 -04:00

patch 8.2.4645: 'shortmess' changed when session does not store options

Problem:    'shortmess' changed when session does not store options.
Solution:   Save and restore 'shortmess' if needed. (James Charti,
            closes #10037)
This commit is contained in:
James Cherti 2022-03-29 12:02:57 +01:00 committed by Bram Moolenaar
parent 1624639ec8
commit fd01280d01
3 changed files with 66 additions and 3 deletions

View File

@ -686,6 +686,11 @@ makeopens(
if (put_line(fd, "endif") == FAIL) if (put_line(fd, "endif") == FAIL)
goto 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. // Now save the current files, current buffer first.
if (put_line(fd, "set shortmess=aoO") == FAIL) if (put_line(fd, "set shortmess=aoO") == FAIL)
goto fail; goto fail;
@ -956,10 +961,23 @@ makeopens(
if (put_line(fd, "unlet! s:wipebuf") == FAIL) if (put_line(fd, "unlet! s:wipebuf") == FAIL)
goto fail; goto fail;
// Re-apply 'winheight', 'winwidth' and 'shortmess'. // Re-apply 'winheight' and 'winwidth'.
if (fprintf(fd, "set winheight=%ld winwidth=%ld shortmess=%s", if (fprintf(fd, "set winheight=%ld winwidth=%ld",
p_wh, p_wiw, p_shm) < 0 || put_eol(fd) == FAIL) p_wh, p_wiw) < 0 || put_eol(fd) == FAIL)
goto 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) if (tab_firstwin->w_next != NULL)
{ {
// Restore 'winminheight' and 'winminwidth'. // Restore 'winminheight' and 'winminwidth'.

View File

@ -1007,6 +1007,49 @@ func Test_mksession_winminheight()
set sessionoptions& set sessionoptions&
endfunc 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 " Test for mksession with 'compatible' option
func Test_mksession_compatible() func Test_mksession_compatible()
mksession! Xtest_mks1.out mksession! Xtest_mks1.out

View File

@ -750,6 +750,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
4645,
/**/ /**/
4644, 4644,
/**/ /**/