From 8e5439182b0c62c433b0696d85e033ffc7404e0c Mon Sep 17 00:00:00 2001 From: Jan Edmund Lazo Date: Sat, 22 May 2021 15:33:13 -0400 Subject: [PATCH 1/3] fixup! vim-patch:8.1.0734: the hlsearch state is not stored in a session file (#13547) --- src/nvim/ex_session.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/nvim/ex_session.c b/src/nvim/ex_session.c index 9e4e69e124..c22c1f428d 100644 --- a/src/nvim/ex_session.c +++ b/src/nvim/ex_session.c @@ -939,9 +939,6 @@ void ex_mkrc(exarg_T *eap) && (*flagp & SSOP_OPTIONS))) { failed |= (makemap(fd, NULL) == FAIL || makeset(fd, OPT_GLOBAL, false) == FAIL); - if (p_hls && fprintf(fd, "%s", "set hlsearch\n") < 0) { - failed = true; - } } if (!failed && view_session) { @@ -1002,6 +999,9 @@ void ex_mkrc(exarg_T *eap) < 0) { failed = true; } + if (p_hls && fprintf(fd, "%s", "set hlsearch\n") < 0) { + failed = true; + } if (no_hlsearch && fprintf(fd, "%s", "nohlsearch\n") < 0) { failed = true; } From 8415615b593c6673083a5004d5db9e8af4914726 Mon Sep 17 00:00:00 2001 From: Jan Edmund Lazo Date: Sat, 22 May 2021 15:01:08 -0400 Subject: [PATCH 2/3] vim-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'. https://github.com/vim/vim/commit/635bd60804966803490287e97460ecdc91d5fe0a Allow "terminal" value for sessionoptions even if it's no-opt because patch v8.0.1592 is not ported yet. Omit vim9 test, Test_mksession_skiprtp(). --- runtime/doc/options.txt | 1 + src/nvim/ex_session.c | 7 ++++++- src/nvim/option.c | 4 ++++ src/nvim/option.h | 3 +++ src/nvim/option_defs.h | 7 +++++-- 5 files changed, 19 insertions(+), 3 deletions(-) diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt index fa3ceb1142..60fc16f7e4 100644 --- a/runtime/doc/options.txt +++ b/runtime/doc/options.txt @@ -5052,6 +5052,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/nvim/ex_session.c b/src/nvim/ex_session.c index c22c1f428d..c1e52d6994 100644 --- a/src/nvim/ex_session.c +++ b/src/nvim/ex_session.c @@ -937,8 +937,13 @@ void ex_mkrc(exarg_T *eap) if (!view_session || (eap->cmdidx == CMD_mksession && (*flagp & SSOP_OPTIONS))) { + int flags = OPT_GLOBAL; + + if (eap->cmdidx == CMD_mksession && (*flagp & SSOP_SKIP_RTP)) { + flags |= OPT_SKIPRTP; + } failed |= (makemap(fd, NULL) == FAIL - || makeset(fd, OPT_GLOBAL, false) == FAIL); + || makeset(fd, flags, false) == FAIL); } if (!failed && view_session) { diff --git a/src/nvim/option.c b/src/nvim/option.c index ad481af7fa..b33571ccc2 100644 --- a/src/nvim/option.c +++ b/src/nvim/option.c @@ -5232,6 +5232,10 @@ int makeset(FILE *fd, int opt_flags, int local_only) continue; } + if ((opt_flags & OPT_SKIPRTP) && p->var == (char_u *)&p_rtp) { + continue; + } + round = 2; if (p->indir != PV_NONE) { if (p->var == VAR_WIN) { diff --git a/src/nvim/option.h b/src/nvim/option.h index 60f14dea44..c6ee03e052 100644 --- a/src/nvim/option.h +++ b/src/nvim/option.h @@ -19,6 +19,9 @@ typedef enum { OPT_MODELINE = 8, ///< Option in modeline. OPT_WINONLY = 16, ///< Only set window-local options. OPT_NOWIN = 32, ///< Don’t set window-local options. + OPT_ONECOLUMN = 64, ///< list options one per line + OPT_NO_REDRAW = 128, ///< ignore redraw flags on option + OPT_SKIPRTP = 256, ///< "skiprtp" in 'sessionoptions' } OptionFlags; #ifdef INCLUDE_GENERATED_DECLARATIONS diff --git a/src/nvim/option_defs.h b/src/nvim/option_defs.h index 62df28c55e..beb62a6a0b 100644 --- a/src/nvim/option_defs.h +++ b/src/nvim/option_defs.h @@ -572,11 +572,12 @@ EXTERN char_u *p_slm; // 'selectmode' EXTERN char_u *p_ssop; // 'sessionoptions' EXTERN unsigned ssop_flags; # ifdef IN_OPTION_C -// 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", NULL + "sesdir", "curdir", "folds", "cursor", "tabpages", "terminal", "skiprtp", + NULL }; # endif # define SSOP_BUFFERS 0x001 @@ -595,6 +596,8 @@ static char *(p_ssop_values[]) = { # define SSOP_FOLDS 0x2000 # define SSOP_CURSOR 0x4000 # define SSOP_TABPAGES 0x8000 +# define SSOP_TERMINAL 0x10000 +# define SSOP_SKIP_RTP 0x20000 EXTERN char_u *p_sh; // 'shell' EXTERN char_u *p_shcf; // 'shellcmdflag' From 59d550345d2531b1b1058a82ae4e4de6a941f8ad Mon Sep 17 00:00:00 2001 From: Jan Edmund Lazo Date: Sat, 22 May 2021 15:41:34 -0400 Subject: [PATCH 3/3] vim-patch:8.2.2778: problem restoring 'packpath' in session Problem: Problem restoring 'packpath' in session. Solution: Let "skiprtp" also apply to 'packpath'. https://github.com/vim/vim/commit/d23b714d8b9ed8e16ef553098acc6da0979e94fc Port Test_mksession_skiprtp() to lua functional test. --- runtime/doc/options.txt | 2 +- src/nvim/option.c | 3 +- test/functional/legacy/mksession_spec.lua | 42 +++++++++++++++++++++++ 3 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 test/functional/legacy/mksession_spec.lua diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt index 60fc16f7e4..cc9696e536 100644 --- a/runtime/doc/options.txt +++ b/runtime/doc/options.txt @@ -5052,7 +5052,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 + skiprtp exclude 'runtimepath' and 'packpath' 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/nvim/option.c b/src/nvim/option.c index b33571ccc2..1454af1a73 100644 --- a/src/nvim/option.c +++ b/src/nvim/option.c @@ -5232,7 +5232,8 @@ int makeset(FILE *fd, int opt_flags, int local_only) continue; } - if ((opt_flags & OPT_SKIPRTP) && p->var == (char_u *)&p_rtp) { + if ((opt_flags & OPT_SKIPRTP) + && (p->var == (char_u *)&p_rtp || p->var == (char_u *)&p_pp)) { continue; } diff --git a/test/functional/legacy/mksession_spec.lua b/test/functional/legacy/mksession_spec.lua new file mode 100644 index 0000000000..a2af891107 --- /dev/null +++ b/test/functional/legacy/mksession_spec.lua @@ -0,0 +1,42 @@ +local helpers = require('test.functional.helpers')(after_each) +local clear = helpers.clear +local command = helpers.command +local funcs = helpers.funcs +local eq = helpers.eq + +describe('mksession', function() + before_each(clear) + + after_each(function() + os.remove('Xtest_mks.out') + end) + + it('supports "skiprtp" value', function() + command('set sessionoptions&vi') + command('set rtp+=$HOME') + command('set pp+=$HOME') + command('mksession! Xtest_mks.out') + local found_rtp = 0 + local found_pp = 0 + for _, line in pairs(funcs.readfile('Xtest_mks.out', 'b')) do + if line:find('set runtimepath') then + found_rtp = found_rtp + 1 + end + if line:find('set packpath') then + found_pp = found_pp + 1 + end + end + eq(1, found_rtp) + eq(1, found_pp) + + command('set sessionoptions+=skiprtp') + command('mksession! Xtest_mks.out') + local found_rtp_or_pp = 0 + for _, line in pairs(funcs.readfile('Xtest_mks.out', 'b')) do + if line:find('set runtimepath') or line:find('set packpath') then + found_rtp_or_pp = found_rtp_or_pp + 1 + end + end + eq(0, found_rtp_or_pp) + end) +end)