summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2021-04-16 19:58:22 +0200
committerBram Moolenaar <Bram@vim.org>2021-04-16 19:58:22 +0200
commit635bd60804966803490287e97460ecdc91d5fe0a (patch)
treefe8e75ace9e40b0e06f394e689296afe2b6042a7
parentaa1959bd5e82350bb4a82d9a5188c29d70706ec4 (diff)
patch 8.2.2772: problems when restoring 'runtimepath' from a session filev8.2.2772
Problem: Problems when restoring 'runtimepath' from a session file. Solution: Add the "skiprtp" item in 'sessionoptions'.
-rw-r--r--runtime/doc/options.txt1
-rw-r--r--src/option.c3
-rw-r--r--src/option.h1
-rw-r--r--src/optionstr.c5
-rw-r--r--src/session.c10
-rw-r--r--src/testdir/test_mksession.vim26
-rw-r--r--src/version.c2
-rw-r--r--src/vim.h1
8 files changed, 46 insertions, 3 deletions
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
index eb607d9cd9..5cb878a7b3 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 b9d7edbbb0..d7997b0646 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 0b1183fecf..30053cc6c2 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 521242dbcb..91d0a69d18 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 6e73bb6766..4475ca019a 100644
--- 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
index fca1227d5f..8eed111a85 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 44cf5ffd0c..4bc84232da 100644
--- 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
index 4c9e095a10..844627d638 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'