* When "ret_sid" is not NULL and we loaded the script before, don't load it
* again.
*
- * The 'eap' argument is used when sourcing lines from a buffer instead of a
+ * The "eap" argument is used when sourcing lines from a buffer instead of a
* file.
*
- * If 'clearvars' is TRUE, then for scripts which are loaded more than
+ * If "clearvars" is TRUE, then for scripts which are loaded more than
* once, clear all the functions and variables previously defined in that
* script.
*
current_sctx.sc_version = SCRIPT_VERSION_VIM9;
else
current_sctx.sc_version = 1; // default script version
+ current_sctx.sc_lnum = 0;
#ifdef FEAT_EVAL
# ifdef FEAT_PROFILE
// Also starts profiling timer for nested script.
save_funccal(&funccalp_entry);
- current_sctx.sc_lnum = 0;
+ // Reset "KeyTyped" to avoid some commands thinking they are invoked
+ // interactively. E.g. defining a function would output indent.
+ int save_KeyTyped = KeyTyped;
+ KeyTyped = FALSE;
// Check if this script was sourced before to find its SID.
// Always use a new sequence number.
# endif
#endif
current_sctx = save_current_sctx;
+ KeyTyped = save_KeyTyped;
if (cookie.fp != NULL)
fclose(cookie.fp);
--- /dev/null
+| +0&#ffffff0@74
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|:+0#0000000&|"> @72
delfunc g:Ttwo
enddef
+func Test_keytyped_in_nested_function()
+ CheckRunVimInTerminal
+
+ call Run_Test_keytyped_in_nested_function()
+endfunc
+
+def Run_Test_keytyped_in_nested_function()
+ var lines =<< trim END
+ vim9script
+ autocmd CmdlineEnter * sample#Init()
+
+ exe 'set rtp=' .. getcwd() .. '/Xrtpdir'
+ END
+ writefile(lines, 'Xkeytyped', 'D')
+
+ var dir = 'Xrtpdir/autoload'
+ mkdir(dir, 'pR')
+
+ lines =<< trim END
+ vim9script
+ export def Init(): void
+ cnoremap <expr>" <SID>Quote('"')
+ enddef
+ def Quote(str: string): string
+ def InPair(): number
+ return 0
+ enddef
+ return str
+ enddef
+ END
+ writefile(lines, dir .. '/sample.vim')
+
+ var buf = g:RunVimInTerminal('-S Xkeytyped', {rows: 6})
+
+ term_sendkeys(buf, ':"')
+ g:VerifyScreenDump(buf, 'Test_keytyped_in_nested_func', {})
+
+ # clean up
+ term_sendkeys(buf, "\<Esc>")
+ g:StopVimInTerminal(buf)
+enddef
+
" The following messes up syntax highlight, keep near the end.
if has('python3')
def Test_python3_command()
static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 1130,
/**/
1129,
/**/
goto theend;
}
+ // Make sure "KeyTyped" is not set, it may cause indent to be written.
+ int save_KeyTyped = KeyTyped;
+ KeyTyped = FALSE;
+
ufunc = define_function(eap, lambda_name, lines_to_free, FALSE);
+
+ KeyTyped = save_KeyTyped;
+
if (ufunc == NULL)
{
r = eap->skip ? OK : FAIL;