changeset 24464:a56f9c2ba51c v8.2.2772

patch 8.2.2772: problems when restoring 'runtimepath' from a session file Commit: https://github.com/vim/vim/commit/635bd60804966803490287e97460ecdc91d5fe0a Author: Bram Moolenaar <Bram@vim.org> 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'.
author Bram Moolenaar <Bram@vim.org>
date Fri, 16 Apr 2021 20:00:05 +0200
parents 754a22f6d5bc
children 10508ba73a4b
files runtime/doc/options.txt src/option.c src/option.h src/optionstr.c src/session.c src/testdir/test_mksession.vim src/version.c src/vim.h
diffstat 8 files changed, 46 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- 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
--- 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)
 	    {
--- 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'
--- 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};
--- 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)
--- 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
--- 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,
--- 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'