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:
parent
c653e4a2bd
commit
8e7d9db32b
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user