mirror of
https://github.com/neovim/neovim.git
synced 2024-12-29 14:41:06 -07:00
vim-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 vim/vim#9475,
closes vim/vim#9458, closes vim/vim#9472)
8e7d9db32b
This commit is contained in:
parent
e58071c92c
commit
aa5adef969
@ -338,14 +338,26 @@ static int put_view(FILE *fd, win_T *wp, int add_edit, unsigned *flagp, int curr
|
||||
|
||||
// Edit the file. Skip this when ":next" already did it.
|
||||
if (add_edit && (!did_next || wp->w_arg_idx_invalid)) {
|
||||
char *fname_esc =
|
||||
ses_escape_fname(ses_get_fname(wp->w_buffer, flagp), flagp);
|
||||
//
|
||||
// Load the file.
|
||||
//
|
||||
if (wp->w_buffer->b_ffname != NULL
|
||||
&& (!bt_nofile(wp->w_buffer)
|
||||
|| wp->w_buffer->terminal)) {
|
||||
char *fname_esc = ses_escape_fname(ses_get_fname(wp->w_buffer, flagp), flagp);
|
||||
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;
|
||||
}
|
||||
} else if (wp->w_buffer->b_ffname != NULL
|
||||
&& (!bt_nofile(wp->w_buffer) || wp->w_buffer->terminal)) {
|
||||
// Load the file.
|
||||
|
||||
// Editing a file in this buffer: use ":edit file".
|
||||
// This may have side effects! (e.g., compressed or network file).
|
||||
//
|
||||
|
@ -696,6 +696,36 @@ func Test_mksession_foldopt()
|
||||
set sessionoptions&
|
||||
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
|
||||
func Test_mksession_winpos()
|
||||
if !has('gui_running')
|
||||
|
Loading…
Reference in New Issue
Block a user