diff options
author | Bram Moolenaar <Bram@vim.org> | 2021-04-16 19:58:22 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2021-04-16 19:58:22 +0200 |
commit | 635bd60804966803490287e97460ecdc91d5fe0a (patch) | |
tree | fe8e75ace9e40b0e06f394e689296afe2b6042a7 | |
parent | aa1959bd5e82350bb4a82d9a5188c29d70706ec4 (diff) | |
download | vim-git-635bd60804966803490287e97460ecdc91d5fe0a.tar.gz |
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.txt | 1 | ||||
-rw-r--r-- | src/option.c | 3 | ||||
-rw-r--r-- | src/option.h | 1 | ||||
-rw-r--r-- | src/optionstr.c | 5 | ||||
-rw-r--r-- | src/session.c | 10 | ||||
-rw-r--r-- | src/testdir/test_mksession.vim | 26 | ||||
-rw-r--r-- | src/version.c | 2 | ||||
-rw-r--r-- | src/vim.h | 1 |
8 files changed, 46 insertions, 3 deletions
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 @@ -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 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 @@ -751,6 +751,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 2772, +/**/ 2771, /**/ 2770, @@ -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' |