0
0
mirror of https://github.com/vim/vim.git synced 2025-09-24 03:44:06 -04:00

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'.
This commit is contained in:
Bram Moolenaar
2021-04-16 19:58:22 +02:00
parent aa1959bd5e
commit 635bd60804
8 changed files with 46 additions and 3 deletions

View File

@@ -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) global values for local options)
options all options and mappings (also global values for local options all options and mappings (also global values for local
options) options)
skiprtp exclude 'runtimepath' from the options
resize size of the Vim window: 'lines' and 'columns' resize size of the Vim window: 'lines' and 'columns'
sesdir the directory in which the session file is located sesdir the directory in which the session file is located
will become the current directory (useful with will become the current directory (useful with

View File

@@ -4615,6 +4615,9 @@ makeset(FILE *fd, int opt_flags, int local_only)
if ((opt_flags & OPT_GLOBAL) && optval_default(p, varp, p_cp)) if ((opt_flags & OPT_GLOBAL) && optval_default(p, varp, p_cp))
continue; continue;
if ((opt_flags & OPT_SKIPRTP) && p->var == (char_u *)&p_rtp)
continue;
round = 2; round = 2;
if (p->indir != PV_NONE) if (p->indir != PV_NONE)
{ {

View File

@@ -864,6 +864,7 @@ EXTERN unsigned ssop_flags;
# define SSOP_CURSOR 0x4000 # define SSOP_CURSOR 0x4000
# define SSOP_TABPAGES 0x8000 # define SSOP_TABPAGES 0x8000
# define SSOP_TERMINAL 0x10000 # define SSOP_TERMINAL 0x10000
# define SSOP_SKIP_RTP 0x20000
#endif #endif
EXTERN char_u *p_sh; // 'shell' EXTERN char_u *p_sh; // 'shell'
EXTERN char_u *p_shcf; // 'shellcmdflag' EXTERN char_u *p_shcf; // 'shellcmdflag'

View File

@@ -34,10 +34,11 @@ static char *(p_fdo_values[]) = {"all", "block", "hor", "mark", "percent",
"undo", "jump", NULL}; "undo", "jump", NULL};
#endif #endif
#ifdef FEAT_SESSION #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", static char *(p_ssop_values[]) = {"buffers", "winpos", "resize", "winsize",
"localoptions", "options", "help", "blank", "globals", "slash", "unix", "localoptions", "options", "help", "blank", "globals", "slash", "unix",
"sesdir", "curdir", "folds", "cursor", "tabpages", "terminal", NULL}; "sesdir", "curdir", "folds", "cursor", "tabpages", "terminal", "skiprtp",
NULL};
#endif #endif
// Keep in sync with SWB_ flags in option.h // Keep in sync with SWB_ flags in option.h
static char *(p_swb_values[]) = {"useopen", "usetab", "split", "newtab", "vsplit", "uselast", NULL}; static char *(p_swb_values[]) = {"useopen", "usetab", "split", "newtab", "vsplit", "uselast", NULL};

View File

@@ -1224,9 +1224,17 @@ ex_mkrc(exarg_T *eap)
if (!view_session if (!view_session
|| (eap->cmdidx == CMD_mksession || (eap->cmdidx == CMD_mksession
&& (*flagp & SSOP_OPTIONS))) && (*flagp & SSOP_OPTIONS)))
#endif
{
int flags = OPT_GLOBAL;
#ifdef FEAT_SESSION
if (eap->cmdidx == CMD_mksession && (*flagp & SSOP_SKIP_RTP))
flags |= OPT_SKIPRTP;
#endif #endif
failed |= (makemap(fd, NULL) == FAIL failed |= (makemap(fd, NULL) == FAIL
|| makeset(fd, OPT_GLOBAL, FALSE) == FAIL); || makeset(fd, flags, FALSE) == FAIL);
}
#ifdef FEAT_SESSION #ifdef FEAT_SESSION
if (!failed && view_session) if (!failed && view_session)

View File

@@ -131,6 +131,32 @@ func Test_mksession()
set sessionoptions& set sessionoptions&
endfunc 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() func Test_mksession_winheight()
new new
set winheight=10 set winheight=10

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 */
/**/
2772,
/**/ /**/
2771, 2771,
/**/ /**/

View File

@@ -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_NOWIN 0x20 // don't set window-local options
#define OPT_ONECOLUMN 0x40 // list options one per line #define OPT_ONECOLUMN 0x40 // list options one per line
#define OPT_NO_REDRAW 0x80 // ignore redraw flags on option #define OPT_NO_REDRAW 0x80 // ignore redraw flags on option
#define OPT_SKIPRTP 0x100 // "skiprtp" in 'sessionoptions'
// Magic chars used in confirm dialog strings // Magic chars used in confirm dialog strings
#define DLG_BUTTON_SEP '\n' #define DLG_BUTTON_SEP '\n'