Skip to content

Commit

Permalink
patch 8.2.4645: 'shortmess' changed when session does not store options
Browse files Browse the repository at this point in the history
Problem:    'shortmess' changed when session does not store options.
Solution:   Save and restore 'shortmess' if needed. (James Charti,
            closes #10037)
  • Loading branch information
jamescherti authored and brammool committed Mar 29, 2022
1 parent 1624639 commit fd01280
Show file tree
Hide file tree
Showing 3 changed files with 66 additions and 3 deletions.
24 changes: 21 additions & 3 deletions src/session.c
Expand Up @@ -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;
Expand Down Expand Up @@ -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'.
Expand Down
43 changes: 43 additions & 0 deletions src/testdir/test_mksession.vim
Expand Up @@ -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
Expand Down
2 changes: 2 additions & 0 deletions src/version.c
Expand Up @@ -750,6 +750,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
4645,
/**/
4644,
/**/
Expand Down

0 comments on commit fd01280

Please sign in to comment.