mirror of
https://github.com/neovim/neovim.git
synced 2025-09-30 15:08:35 +00:00
Merge pull request #17156 from zeertzjq/vim-8.2.3584
vim-patch:8.2.{3584,3586,3587}: :command "-keepscript" argument
This commit is contained in:
@@ -44,6 +44,7 @@ return {
|
||||
"count";
|
||||
"desc";
|
||||
"force";
|
||||
"keepscript";
|
||||
"nargs";
|
||||
"range";
|
||||
"register";
|
||||
|
@@ -1510,6 +1510,12 @@ void add_user_command(String name, Object command, Dict(user_command) *opts, int
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (api_object_to_bool(opts->keepscript, "keepscript", false, err)) {
|
||||
argt |= EX_KEEPSCRIPT;
|
||||
} else if (ERROR_SET(err)) {
|
||||
goto err;
|
||||
}
|
||||
|
||||
bool force = api_object_to_bool(opts->force, "force", true, err);
|
||||
if (ERROR_SET(err)) {
|
||||
goto err;
|
||||
|
@@ -1613,7 +1613,7 @@ void ex_compiler(exarg_T *eap)
|
||||
if (old_cur_comp != NULL) {
|
||||
old_cur_comp = vim_strsave(old_cur_comp);
|
||||
}
|
||||
do_cmdline_cmd("command -nargs=* CompilerSet setlocal <args>");
|
||||
do_cmdline_cmd("command -nargs=* -keepscript CompilerSet setlocal <args>");
|
||||
}
|
||||
do_unlet(S_LEN("g:current_compiler"), true);
|
||||
do_unlet(S_LEN("b:current_compiler"), true);
|
||||
|
@@ -61,6 +61,7 @@
|
||||
// current buffer is locked
|
||||
#define EX_MODIFY 0x100000 // forbidden in non-'modifiable' buffer
|
||||
#define EX_FLAGS 0x200000 // allow flags after count in argument
|
||||
#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
|
||||
#define EX_WORD1 (EX_EXTRA | EX_NOSPC) // one extra word allowed
|
||||
|
@@ -5517,6 +5517,8 @@ static int uc_scan_attr(char_u *attr, size_t len, uint32_t *argt, long *def, int
|
||||
*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 {
|
||||
@@ -6256,10 +6258,14 @@ static void do_ucmd(exarg_T *eap)
|
||||
buf = xmalloc(totlen + 1);
|
||||
}
|
||||
|
||||
current_sctx.sc_sid = cmd->uc_script_ctx.sc_sid;
|
||||
if ((cmd->uc_argt & EX_KEEPSCRIPT) == 0) {
|
||||
current_sctx.sc_sid = cmd->uc_script_ctx.sc_sid;
|
||||
}
|
||||
(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;
|
||||
}
|
||||
xfree(buf);
|
||||
xfree(split_buf);
|
||||
}
|
||||
@@ -6305,7 +6311,7 @@ char_u *get_user_cmd_flags(expand_T *xp, int idx)
|
||||
{
|
||||
static char *user_cmd_flags[] = { "addr", "bang", "bar",
|
||||
"buffer", "complete", "count",
|
||||
"nargs", "range", "register" };
|
||||
"nargs", "range", "register", "keepscript" };
|
||||
|
||||
if (idx >= (int)ARRAY_SIZE(user_cmd_flags)) {
|
||||
return NULL;
|
||||
@@ -9844,6 +9850,7 @@ Dictionary commands_array(buf_T *buf)
|
||||
PUT(d, "bang", BOOLEAN_OBJ(!!(cmd->uc_argt & EX_BANG)));
|
||||
PUT(d, "bar", BOOLEAN_OBJ(!!(cmd->uc_argt & EX_TRLBAR)));
|
||||
PUT(d, "register", BOOLEAN_OBJ(!!(cmd->uc_argt & EX_REGSTR)));
|
||||
PUT(d, "keepscript", BOOLEAN_OBJ(!!(cmd->uc_argt & EX_KEEPSCRIPT)));
|
||||
|
||||
switch (cmd->uc_argt & (EX_EXTRA | EX_NOSPC | EX_NEEDARG)) {
|
||||
case 0:
|
||||
|
@@ -19,6 +19,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')
|
||||
|
@@ -269,10 +269,10 @@ endfunc
|
||||
|
||||
func Test_CmdCompletion()
|
||||
call feedkeys(":com -\<C-A>\<C-B>\"\<CR>", 'tx')
|
||||
call assert_equal('"com -addr bang bar buffer complete count nargs range register', @:)
|
||||
call assert_equal('"com -addr bang bar buffer complete count keepscript nargs range register', @:)
|
||||
|
||||
call feedkeys(":com -nargs=0 -\<C-A>\<C-B>\"\<CR>", 'tx')
|
||||
call assert_equal('"com -nargs=0 -addr bang bar buffer complete count nargs range register', @:)
|
||||
call assert_equal('"com -nargs=0 -addr bang bar buffer complete count keepscript nargs range register', @:)
|
||||
|
||||
call feedkeys(":com -nargs=\<C-A>\<C-B>\"\<CR>", 'tx')
|
||||
call assert_equal('"com -nargs=* + 0 1 ?', @:)
|
||||
|
Reference in New Issue
Block a user