int save_emsg_silent = emsg_silent;
int save_redir_off = redir_off;
tasave_T typeaheadbuf;
+ int typeahead_saved = FALSE;
+ int save_ignore_script;
# ifdef FEAT_EX_EXTRA
int save_ex_normal_busy;
# endif
* This makes sure we get input from the user here and don't interfere
* with the commands being executed. Reset "ex_normal_busy" to avoid
* the side effects of using ":normal". Save the stuff buffer and make
- * it empty. */
+ * it empty. Set ignore_script to avoid reading from script input. */
# ifdef FEAT_EX_EXTRA
save_ex_normal_busy = ex_normal_busy;
ex_normal_busy = 0;
# endif
if (!debug_greedy)
+ {
save_typeahead(&typeaheadbuf);
+ typeahead_saved = TRUE;
+ save_ignore_script = ignore_script;
+ ignore_script = TRUE;
+ }
cmdline = getcmdline_prompt('>', NULL, 0, EXPAND_NOTHING, NULL);
- if (!debug_greedy)
+ if (typeahead_saved)
+ {
restore_typeahead(&typeaheadbuf);
+ ignore_script = save_ignore_script;
+ }
# ifdef FEAT_EX_EXTRA
ex_normal_busy = save_ex_normal_busy;
# endif
void
free_typebuf()
{
- vim_free(typebuf.tb_buf);
- vim_free(typebuf.tb_noremap);
+ if (typebuf.tb_buf == typebuf_init)
+ EMSG2(_(e_intern2), "Free typebuf 1");
+ else
+ vim_free(typebuf.tb_buf);
+ if (typebuf.tb_buf == noremapbuf_init)
+ EMSG2(_(e_intern2), "Free typebuf 2");
+ else
+ vim_free(typebuf.tb_noremap);
}
/*
EMSG(_(e_nesting));
return;
}
+#ifdef FEAT_EVAL
+ if (ignore_script)
+ /* Not reading from script, also don't open one. Warning message? */
+ return;
+#endif
if (scriptin[curscript] != NULL) /* already reading script */
++curscript;
current_menu->silent[idx]);
}
}
-#endif /* FEAT_GUI */
+#endif /* FEAT_GUI && FEAT_MENU */
continue; /* try mapping again */
}
undo_off = FALSE; /* restart undo now */
/*
- * first try script file
- * If interrupted: Stop reading script files.
+ * Get a character from a script file if there is one.
+ * If interrupted: Stop reading script files, close them all.
*/
script_char = -1;
- while (scriptin[curscript] != NULL && script_char < 0)
+ while (scriptin[curscript] != NULL && script_char < 0
+#ifdef FEAT_EVAL
+ && !ignore_script
+#endif
+ )
{
if (got_int || (script_char = getc(scriptin[curscript])) < 0)
{
EXTERN int ex_normal_busy INIT(= 0); /* recursiveness of ex_normal() */
EXTERN int ex_normal_lock INIT(= 0); /* forbid use of ex_normal() */
#endif
+#ifdef FEAT_EVAL
+EXTERN int ignore_script INIT(= FALSE); /* ignore script input */
+#endif
EXTERN int stop_insert_mode; /* for ":stopinsert" and 'insertmode' */
EXTERN int KeyTyped; /* TRUE if user typed current char */
static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 177,
/**/
176,
/**/