summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-05-03 17:19:33 +0200
committerBram Moolenaar <Bram@vim.org>2020-05-03 17:19:33 +0200
commit5125874951669944a5f6a4163d6e5d437ae6321e (patch)
treeb1589f391fac9218027328452aa6582ba28bbea4
parenta38b2b737e244eb2e4f199e070b05f86f4d433d4 (diff)
patch 8.2.0690: line number of option set by modeline is wrongv8.2.0690
Problem: Line number of option set by modeline is wrong. Solution: Do not double the line number. (Ozaki Kiichi, closes #6035)
-rw-r--r--src/option.c4
-rw-r--r--src/testdir/test_modeline.vim56
-rw-r--r--src/version.c2
3 files changed, 61 insertions, 1 deletions
diff --git a/src/option.c b/src/option.c
index 3f97c3cd15..8574f7f7cb 100644
--- a/src/option.c
+++ b/src/option.c
@@ -2460,7 +2460,9 @@ set_option_sctx_idx(int opt_idx, int opt_flags, sctx_T script_ctx)
int indir = (int)options[opt_idx].indir;
sctx_T new_script_ctx = script_ctx;
- new_script_ctx.sc_lnum += SOURCING_LNUM;
+ // Modeline already has the line number set.
+ if (!(opt_flags & OPT_MODELINE))
+ new_script_ctx.sc_lnum += SOURCING_LNUM;
// Remember where the option was set. For local options need to do that
// in the buffer or window structure.
diff --git a/src/testdir/test_modeline.vim b/src/testdir/test_modeline.vim
index 05a1460198..546c30c668 100644
--- a/src/testdir/test_modeline.vim
+++ b/src/testdir/test_modeline.vim
@@ -279,3 +279,59 @@ func Test_modeline_fails_modelineexpr()
call s:modeline_fails('tabline', 'tabline=Something()', 'E992:')
call s:modeline_fails('titlestring', 'titlestring=Something()', 'E992:')
endfunc
+
+func Test_modeline_setoption_verbose()
+ let modeline = &modeline
+ set modeline
+
+ let lines =<< trim END
+ 1 vim:ts=2
+ 2 two
+ 3 three
+ 4 four
+ 5 five
+ 6 six
+ 7 seven
+ 8 eight
+ END
+ call writefile(lines, 'Xmodeline')
+ edit Xmodeline
+ let info = split(execute('verbose set tabstop?'), "\n")
+ call assert_match('^\s*Last set from modeline line 1$', info[-1])
+ bwipe!
+
+ let lines =<< trim END
+ 1 one
+ 2 two
+ 3 three
+ 4 vim:ts=4
+ 5 five
+ 6 six
+ 7 seven
+ 8 eight
+ END
+ call writefile(lines, 'Xmodeline')
+ edit Xmodeline
+ let info = split(execute('verbose set tabstop?'), "\n")
+ call assert_match('^\s*Last set from modeline line 4$', info[-1])
+ bwipe!
+
+ let lines =<< trim END
+ 1 one
+ 2 two
+ 3 three
+ 4 four
+ 5 five
+ 6 six
+ 7 seven
+ 8 vim:ts=8
+ END
+ call writefile(lines, 'Xmodeline')
+ edit Xmodeline
+ let info = split(execute('verbose set tabstop?'), "\n")
+ call assert_match('^\s*Last set from modeline line 8$', info[-1])
+ bwipe!
+
+ let &modeline = modeline
+ call delete('Xmodeline')
+endfunc
diff --git a/src/version.c b/src/version.c
index c083372006..6dc86b9643 100644
--- a/src/version.c
+++ b/src/version.c
@@ -747,6 +747,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 690,
+/**/
689,
/**/
688,