From: Bram Moolenaar Date: Fri, 16 Apr 2021 17:58:22 +0000 (+0200) Subject: patch 8.2.2772: problems when restoring 'runtimepath' from a session file X-Git-Tag: v8.2.2772 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=635bd60804966803490287e97460ecdc91d5fe0a;p=vim patch 8.2.2772: problems when restoring 'runtimepath' from a session file Problem: Problems when restoring 'runtimepath' from a session file. Solution: Add the "skiprtp" item in 'sessionoptions'. --- diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt index eb607d9cd..5cb878a7b 100644 --- a/runtime/doc/options.txt +++ b/runtime/doc/options.txt @@ -6511,6 +6511,7 @@ A jump table for the options with a short description can be found at |Q_op|. global values for local options) options all options and mappings (also global values for local options) + skiprtp exclude 'runtimepath' from the options resize size of the Vim window: 'lines' and 'columns' sesdir the directory in which the session file is located will become the current directory (useful with diff --git a/src/option.c b/src/option.c index b9d7edbbb..d7997b064 100644 --- a/src/option.c +++ b/src/option.c @@ -4615,6 +4615,9 @@ makeset(FILE *fd, int opt_flags, int local_only) if ((opt_flags & OPT_GLOBAL) && optval_default(p, varp, p_cp)) continue; + if ((opt_flags & OPT_SKIPRTP) && p->var == (char_u *)&p_rtp) + continue; + round = 2; if (p->indir != PV_NONE) { diff --git a/src/option.h b/src/option.h index 0b1183fec..30053cc6c 100644 --- a/src/option.h +++ b/src/option.h @@ -864,6 +864,7 @@ EXTERN unsigned ssop_flags; # define SSOP_CURSOR 0x4000 # define SSOP_TABPAGES 0x8000 # define SSOP_TERMINAL 0x10000 +# define SSOP_SKIP_RTP 0x20000 #endif EXTERN char_u *p_sh; // 'shell' EXTERN char_u *p_shcf; // 'shellcmdflag' diff --git a/src/optionstr.c b/src/optionstr.c index 521242dbc..91d0a69d1 100644 --- a/src/optionstr.c +++ b/src/optionstr.c @@ -34,10 +34,11 @@ static char *(p_fdo_values[]) = {"all", "block", "hor", "mark", "percent", "undo", "jump", NULL}; #endif #ifdef FEAT_SESSION -// Also used for 'viewoptions'! +// Also used for 'viewoptions'! Keep in sync with SSOP_ flags. static char *(p_ssop_values[]) = {"buffers", "winpos", "resize", "winsize", "localoptions", "options", "help", "blank", "globals", "slash", "unix", - "sesdir", "curdir", "folds", "cursor", "tabpages", "terminal", NULL}; + "sesdir", "curdir", "folds", "cursor", "tabpages", "terminal", "skiprtp", + NULL}; #endif // Keep in sync with SWB_ flags in option.h static char *(p_swb_values[]) = {"useopen", "usetab", "split", "newtab", "vsplit", "uselast", NULL}; diff --git a/src/session.c b/src/session.c index 6e73bb676..4475ca019 100644 --- a/src/session.c +++ b/src/session.c @@ -1224,9 +1224,17 @@ ex_mkrc(exarg_T *eap) if (!view_session || (eap->cmdidx == CMD_mksession && (*flagp & SSOP_OPTIONS))) +#endif + { + int flags = OPT_GLOBAL; + +#ifdef FEAT_SESSION + if (eap->cmdidx == CMD_mksession && (*flagp & SSOP_SKIP_RTP)) + flags |= OPT_SKIPRTP; #endif failed |= (makemap(fd, NULL) == FAIL - || makeset(fd, OPT_GLOBAL, FALSE) == FAIL); + || makeset(fd, flags, FALSE) == FAIL); + } #ifdef FEAT_SESSION if (!failed && view_session) diff --git a/src/testdir/test_mksession.vim b/src/testdir/test_mksession.vim index fca1227d5..8eed111a8 100644 --- a/src/testdir/test_mksession.vim +++ b/src/testdir/test_mksession.vim @@ -131,6 +131,32 @@ func Test_mksession() set sessionoptions& endfunc +def Test_mksession_skiprtp() + mksession! Xtest_mks.out + var found = 0 + for line in readfile('Xtest_mks.out') + if line =~ 'set runtimepath' + found = 1 + break + endif + endfor + assert_equal(1, found) + delete('Xtest_mks.out') + + set sessionoptions+=skiprtp + mksession! Xtest_mks.out + found = 0 + for line in readfile('Xtest_mks.out') + if line =~ 'set runtimepath' + found = 1 + break + endif + endfor + assert_equal(0, found) + delete('Xtest_mks.out') + set sessionoptions& +enddef + func Test_mksession_winheight() new set winheight=10 diff --git a/src/version.c b/src/version.c index 44cf5ffd0..4bc84232d 100644 --- a/src/version.c +++ b/src/version.c @@ -750,6 +750,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 2772, /**/ 2771, /**/ diff --git a/src/vim.h b/src/vim.h index 4c9e095a1..844627d63 100644 --- a/src/vim.h +++ b/src/vim.h @@ -1201,6 +1201,7 @@ extern int (*dyn_libintl_wputenv)(const wchar_t *envstring); #define OPT_NOWIN 0x20 // don't set window-local options #define OPT_ONECOLUMN 0x40 // list options one per line #define OPT_NO_REDRAW 0x80 // ignore redraw flags on option +#define OPT_SKIPRTP 0x100 // "skiprtp" in 'sessionoptions' // Magic chars used in confirm dialog strings #define DLG_BUTTON_SEP '\n'