Mercurial > vim
changeset 26103:d079ab2ba260 v8.2.3584
patch 8.2.3584: "verbose set efm" reports location of the :compiler command
Commit: https://github.com/vim/vim/commit/58ef8a31d7087d495ab1582be5b7a22796ac2451
Author: Bram Moolenaar <Bram@vim.org>
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.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Fri, 12 Nov 2021 12:30:05 +0100 |
parents | eeb8654235f6 |
children | e0a8da7d5b54 |
files | runtime/doc/map.txt src/ex_cmds.h src/ex_cmds2.c src/testdir/test_compiler.vim src/usercmd.c src/version.c |
diffstat | 6 files changed, 20 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- 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
--- 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
--- 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);
--- 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')
--- 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); }