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

patch 8.2.4007: session does not restore help buffer properly

Problem:    Session does not restore help buffer properly when "options' is
            missing from 'sessionoptions'.
Solution:   Use a ":help" command to create the help window. (closes #9475,
            closes #9458, closes #9472)
This commit is contained in:
matveyt 2022-01-05 14:01:30 +00:00 committed by Bram Moolenaar
parent c653e4a2bd
commit 8e7d9db32b
3 changed files with 51 additions and 3 deletions

View File

@ -348,16 +348,32 @@ put_view(
// Edit the file. Skip this when ":next" already did it. // Edit the file. Skip this when ":next" already did it.
if (add_edit && (!did_next || wp->w_arg_idx_invalid)) if (add_edit && (!did_next || wp->w_arg_idx_invalid))
{ {
if (bt_help(wp->w_buffer))
{
char *curtag = "";
// A help buffer needs some options to be set.
// First, create a new empty buffer with "buftype=help".
// Then ":help" will re-use both the buffer and the window and set
// the options, even when "options" is not in 'sessionoptions'.
if (0 < wp->w_tagstackidx
&& wp->w_tagstackidx <= wp->w_tagstacklen)
curtag = (char *)wp->w_tagstack[wp->w_tagstackidx - 1].tagname;
if (put_line(fd, "enew | setl bt=help") == FAIL
|| fprintf(fd, "help %s", curtag) < 0
|| put_eol(fd) == FAIL)
return FAIL;
}
# ifdef FEAT_TERMINAL # ifdef FEAT_TERMINAL
if (bt_terminal(wp->w_buffer)) else if (bt_terminal(wp->w_buffer))
{ {
if (term_write_session(fd, wp, terminal_bufs) == FAIL) if (term_write_session(fd, wp, terminal_bufs) == FAIL)
return FAIL; return FAIL;
} }
else
# endif # endif
// Load the file. // Load the file.
if (wp->w_buffer->b_ffname != NULL else if (wp->w_buffer->b_ffname != NULL
# ifdef FEAT_QUICKFIX # ifdef FEAT_QUICKFIX
&& !bt_nofilename(wp->w_buffer) && !bt_nofilename(wp->w_buffer)
# endif # endif

View File

@ -909,6 +909,36 @@ func Test_mksession_foldopt()
set sessionoptions& set sessionoptions&
endfunc endfunc
" Test for mksession with "help" but not "options" in 'sessionoptions'
func Test_mksession_help_noopt()
set sessionoptions-=options
set sessionoptions+=help
help
let fname = expand('%')
mksession! Xtest_mks.out
bwipe
source Xtest_mks.out
call assert_equal('help', &buftype)
call assert_equal('help', &filetype)
call assert_equal(fname, expand('%'))
call assert_false(&modifiable)
call assert_true(&readonly)
helpclose
help index
let fname = expand('%')
mksession! Xtest_mks.out
bwipe
source Xtest_mks.out
call assert_equal('help', &buftype)
call assert_equal(fname, expand('%'))
call delete('Xtest_mks.out')
set sessionoptions&
endfunc
" Test for mksession with window position " Test for mksession with window position
func Test_mksession_winpos() func Test_mksession_winpos()
" Only applicable in GUI Vim " Only applicable in GUI Vim

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 */
/**/
4007,
/**/ /**/
4006, 4006,
/**/ /**/