# HG changeset patch # User Bram Moolenaar # Date 1636716605 -3600 # Node ID d079ab2ba2607170665688ddb4fc696841504978 # Parent eeb8654235f65f79729113d4d32db81525af163a patch 8.2.3584: "verbose set efm" reports location of the :compiler command Commit: https://github.com/vim/vim/commit/58ef8a31d7087d495ab1582be5b7a22796ac2451 Author: Bram Moolenaar Date: Fri Nov 12 11:25:11 2021 +0000 patch 8.2.3584: "verbose set efm" reports location of the :compiler command 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. diff --git a/runtime/doc/map.txt b/runtime/doc/map.txt --- 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 --- 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 --- 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 "); + "command -nargs=* -keepscript CompilerSet setlocal "); } 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 --- 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\\", 'tx') diff --git a/src/usercmd.c b/src/usercmd.c --- a/src/usercmd.c +++ b/src/usercmd.c @@ -360,7 +360,7 @@ get_user_cmd_flags(expand_T *xp UNUSED, { 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 --- 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,