diff src/usercmd.c @ 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 60e4892dfa45
children 41b3718d84c3
line wrap: on
line diff
--- 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);
 }