# HG changeset patch # User Bram Moolenaar # Date 1618596005 -7200 # Node ID a56f9c2ba51c8d7cac97043a879c82b1c60d40b7 # Parent 754a22f6d5bc70708c3b2e079f1838b6fa64a56e patch 8.2.2772: problems when restoring 'runtimepath' from a session file Commit: https://github.com/vim/vim/commit/635bd60804966803490287e97460ecdc91d5fe0a Author: Bram Moolenaar Date: Fri Apr 16 19:58:22 2021 +0200 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 --- a/runtime/doc/options.txt +++ b/runtime/doc/options.txt @@ -6511,6 +6511,7 @@ A jump table for the options with a shor 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 --- a/src/option.c +++ b/src/option.c @@ -4615,6 +4615,9 @@ makeset(FILE *fd, int opt_flags, int loc 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 --- 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 --- a/src/optionstr.c +++ b/src/optionstr.c @@ -34,10 +34,11 @@ static char *(p_fdo_values[]) = {"all", "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 --- a/src/session.c +++ b/src/session.c @@ -1225,8 +1225,16 @@ ex_mkrc(exarg_T *eap) || (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 --- 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 --- a/src/version.c +++ b/src/version.c @@ -751,6 +751,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 2772, +/**/ 2771, /**/ 2770, diff --git a/src/vim.h b/src/vim.h --- a/src/vim.h +++ b/src/vim.h @@ -1201,6 +1201,7 @@ extern int (*dyn_libintl_wputenv)(const #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'