summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2021-11-12 11:25:11 +0000
committerBram Moolenaar <Bram@vim.org>2021-11-12 11:25:11 +0000
commit58ef8a31d7087d495ab1582be5b7a22796ac2451 (patch)
treedbae171d4c49dbe2ba7e89ef94561fa357610e72
parent0c71114aede81a209b7efc126b4bf19f11d58955 (diff)
downloadvim-git-58ef8a31d7087d495ab1582be5b7a22796ac2451.tar.gz
patch 8.2.3584: "verbose set efm" reports location of the :compiler commandv8.2.3584
Problem: "verbose set efm" reports the location of the :compiler command. (Gary Johnson) Solution: Add the "-keepscript" argument to :command and use it when defining CompilerSet.
-rw-r--r--runtime/doc/map.txt3
-rw-r--r--src/ex_cmds.h1
-rw-r--r--src/ex_cmds2.c2
-rw-r--r--src/testdir/test_compiler.vim3
-rw-r--r--src/usercmd.c14
-rw-r--r--src/version.c2
6 files changed, 20 insertions, 5 deletions
diff --git a/runtime/doc/map.txt b/runtime/doc/map.txt
index 2c7735571..f50377b4e 100644
--- a/runtime/doc/map.txt
+++ b/runtime/doc/map.txt
@@ -1569,6 +1569,9 @@ There are some special cases as well:
-register The first argument to the command can be an optional
register name (like :del, :put, :yank).
-buffer The command will only be available in the current buffer.
+ -keepscript Do not use the location of where the user command was
+ defined for verbose messages, use the location of where
+ the user command was invoked.
In the cases of the -count and -register attributes, if the optional argument
is supplied, it is removed from the argument list and is available to the
diff --git a/src/ex_cmds.h b/src/ex_cmds.h
index 1ea74422c..35080dbc6 100644
--- a/src/ex_cmds.h
+++ b/src/ex_cmds.h
@@ -56,6 +56,7 @@
// set; when missing disallows editing another
// buffer when curbuf_lock is set
#define EX_NONWHITE_OK 0x2000000 // command can be followed by non-white
+#define EX_KEEPSCRIPT 0x4000000 // keep sctx of where command was invoked
#define EX_FILES (EX_XFILE | EX_EXTRA) // multiple extra files allowed
#define EX_FILE1 (EX_FILES | EX_NOSPC) // 1 file, defaults to current file
diff --git a/src/ex_cmds2.c b/src/ex_cmds2.c
index 15560d82b..8e7da18aa 100644
--- a/src/ex_cmds2.c
+++ b/src/ex_cmds2.c
@@ -754,7 +754,7 @@ ex_compiler(exarg_T *eap)
if (old_cur_comp != NULL)
old_cur_comp = vim_strsave(old_cur_comp);
do_cmdline_cmd((char_u *)
- "command -nargs=* CompilerSet setlocal <args>");
+ "command -nargs=* -keepscript CompilerSet setlocal <args>");
}
do_unlet((char_u *)"g:current_compiler", TRUE);
do_unlet((char_u *)"b:current_compiler", TRUE);
diff --git a/src/testdir/test_compiler.vim b/src/testdir/test_compiler.vim
index ede307fbf..09c03f7f2 100644
--- a/src/testdir/test_compiler.vim
+++ b/src/testdir/test_compiler.vim
@@ -21,6 +21,9 @@ func Test_compiler()
call assert_equal('perl', b:current_compiler)
call assert_fails('let g:current_compiler', 'E121:')
+ let verbose_efm = execute('verbose set efm')
+ call assert_match('Last set from .*/compiler/perl.vim ', verbose_efm)
+
call setline(1, ['#!/usr/bin/perl -w', 'use strict;', 'my $foo=1'])
w!
call feedkeys(":make\<CR>\<CR>", 'tx')
diff --git a/src/usercmd.c b/src/usercmd.c
index 8ead42c52..0050647ab 100644
--- a/src/usercmd.c
+++ b/src/usercmd.c
@@ -360,7 +360,7 @@ get_user_cmd_flags(expand_T *xp UNUSED, int idx)
{
static char *user_cmd_flags[] = {
"addr", "bang", "bar", "buffer", "complete",
- "count", "nargs", "range", "register"
+ "count", "nargs", "range", "register", "keepscript"
};
if (idx >= (int)ARRAY_LENGTH(user_cmd_flags))
@@ -735,6 +735,8 @@ uc_scan_attr(
*flags |= UC_BUFFER;
else if (STRNICMP(attr, "register", len) == 0)
*argt |= EX_REGSTR;
+ else if (STRNICMP(attr, "keepscript", len) == 0)
+ *argt |= EX_KEEPSCRIPT;
else if (STRNICMP(attr, "bar", len) == 0)
*argt |= EX_TRLBAR;
else
@@ -1764,13 +1766,17 @@ do_ucmd(exarg_T *eap)
}
}
- current_sctx.sc_version = cmd->uc_script_ctx.sc_version;
+ if ((cmd->uc_argt & EX_KEEPSCRIPT) == 0)
+ {
+ current_sctx.sc_version = cmd->uc_script_ctx.sc_version;
#ifdef FEAT_EVAL
- current_sctx.sc_sid = cmd->uc_script_ctx.sc_sid;
+ current_sctx.sc_sid = cmd->uc_script_ctx.sc_sid;
#endif
+ }
(void)do_cmdline(buf, eap->getline, eap->cookie,
DOCMD_VERBOSE|DOCMD_NOWAIT|DOCMD_KEYTYPED);
- current_sctx = save_current_sctx;
+ if ((cmd->uc_argt & EX_KEEPSCRIPT) == 0)
+ current_sctx = save_current_sctx;
vim_free(buf);
vim_free(split_buf);
}
diff --git a/src/version.c b/src/version.c
index 713b5e78d..c13ea68b9 100644
--- a/src/version.c
+++ b/src/version.c
@@ -758,6 +758,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 3584,
+/**/
3583,
/**/
3582,