patch 8.1.0466: autocmd test fails

Problem:    Autocmd test fails.
Solution:   Do call inchar() when flushing typeahead.
diff --git a/src/getchar.c b/src/getchar.c
index 679eae1..53c0ef3 100644
--- a/src/getchar.c
+++ b/src/getchar.c
@@ -438,7 +438,7 @@
  * flush all typeahead characters (used when interrupted by a CTRL-C).
  */
     void
-flush_buffers(int flush_typeahead)
+flush_buffers(flush_buffers_T flush_typeahead)
 {
     init_typebuf();
 
@@ -446,15 +446,21 @@
     while (read_readbuffers(TRUE) != NUL)
 	;
 
-    if (flush_typeahead)	    /* remove all typeahead */
+    if (flush_typeahead == FLUSH_MINIMAL)
     {
-	/*
-	 * We have to get all characters, because we may delete the first part
-	 * of an escape sequence.
-	 * In an xterm we get one char at a time and we have to get them all.
-	 */
-	while (inchar(typebuf.tb_buf, typebuf.tb_buflen - 1, 10L) != 0)
-	    ;
+	// remove mapped characters at the start only
+	typebuf.tb_off += typebuf.tb_maplen;
+	typebuf.tb_len -= typebuf.tb_maplen;
+    }
+    else
+    {
+	// remove typeahead
+	if (flush_typeahead == FLUSH_INPUT)
+	    // We have to get all characters, because we may delete the first
+	    // part of an escape sequence.  In an xterm we get one char at a
+	    // time and we have to get them all.
+	    while (inchar(typebuf.tb_buf, typebuf.tb_buflen - 1, 10L) != 0)
+		;
 	typebuf.tb_off = MAXMAPLEN;
 	typebuf.tb_len = 0;
 #if defined(FEAT_CLIENTSERVER) || defined(FEAT_EVAL)
@@ -463,11 +469,6 @@
 	typebuf_was_filled = FALSE;
 #endif
     }
-    else		    /* remove mapped characters at the start only */
-    {
-	typebuf.tb_off += typebuf.tb_maplen;
-	typebuf.tb_len -= typebuf.tb_maplen;
-    }
     typebuf.tb_maplen = 0;
     typebuf.tb_silent = 0;
     cmd_silent = FALSE;
@@ -1858,6 +1859,7 @@
  * Check if a character is available, such that vgetc() will not block.
  * If the next character is a special character or multi-byte, the returned
  * character is not valid!.
+ * Returns NUL if no character is available.
  */
     int
 vpeekc(void)
@@ -1956,7 +1958,8 @@
  *	KeyTyped is set to TRUE in the case the user typed the key.
  *	KeyStuffed is TRUE if the character comes from the stuff buffer.
  * if "advance" is FALSE (vpeekc()):
- *	just look whether there is a character available.
+ *	Just look whether there is a character available.
+ *	Return NUL if not.
  *
  * When "no_mapping" is zero, checks for mappings in the current mode.
  * Only returns one byte (of a multi-byte character).
@@ -2084,7 +2087,7 @@
 			c = ESC;
 		    else
 			c = Ctrl_C;
-		    flush_buffers(TRUE);	/* flush all typeahead */
+		    flush_buffers(FLUSH_INPUT);	// flush all typeahead
 
 		    if (advance)
 		    {
@@ -2510,7 +2513,7 @@
 				redrawcmdline();
 			    else
 				setcursor();
-			    flush_buffers(FALSE);
+			    flush_buffers(FLUSH_MINIMAL);
 			    mapdepth = 0;	/* for next one */
 			    c = -1;
 			    break;
diff --git a/src/memline.c b/src/memline.c
index f7a3d06..0881e6c 100644
--- a/src/memline.c
+++ b/src/memline.c
@@ -4522,7 +4522,7 @@
 
 			// If vimrc has "simalt ~x" we don't want it to
 			// interfere with the prompt here.
-			flush_buffers(TRUE);
+			flush_buffers(FLUSH_TYPEAHEAD);
 		    }
 
 #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
diff --git a/src/message.c b/src/message.c
index c7ecb61..c2318bd 100644
--- a/src/message.c
+++ b/src/message.c
@@ -688,8 +688,8 @@
 	if (p_eb)
 	    beep_flush();		/* also includes flush_buffers() */
 	else
-	    flush_buffers(FALSE);	/* flush internal buffers */
-	did_emsg = TRUE;		/* flag for DoOneCmd() */
+	    flush_buffers(FLUSH_MINIMAL);  // flush internal buffers
+	did_emsg = TRUE;		   // flag for DoOneCmd()
 #ifdef FEAT_EVAL
 	did_uncaught_emsg = TRUE;
 #endif
diff --git a/src/misc1.c b/src/misc1.c
index 34b4134..820f8f9 100644
--- a/src/misc1.c
+++ b/src/misc1.c
@@ -3825,7 +3825,7 @@
 {
     if (emsg_silent == 0)
     {
-	flush_buffers(FALSE);
+	flush_buffers(FLUSH_MINIMAL);
 	vim_beep(BO_ERROR);
     }
 }
diff --git a/src/proto/getchar.pro b/src/proto/getchar.pro
index aac522f..0733662 100644
--- a/src/proto/getchar.pro
+++ b/src/proto/getchar.pro
@@ -5,7 +5,7 @@
 int stuff_empty(void);
 int readbuf1_empty(void);
 void typeahead_noflush(int c);
-void flush_buffers(int flush_typeahead);
+void flush_buffers(flush_buffers_T flush_typeahead);
 void ResetRedobuff(void);
 void CancelRedo(void);
 void saveRedobuff(save_redo_T *save_redo);
diff --git a/src/version.c b/src/version.c
index 9f4991a..c416032 100644
--- a/src/version.c
+++ b/src/version.c
@@ -793,6 +793,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    466,
+/**/
     465,
 /**/
     464,
diff --git a/src/vim.h b/src/vim.h
index cb72711..7a66ab0 100644
--- a/src/vim.h
+++ b/src/vim.h
@@ -2108,6 +2108,13 @@
     PASTE_ONE_CHAR	/* return first character */
 } paste_mode_T;
 
+// Argument for flush_buffers().
+typedef enum {
+    FLUSH_MINIMAL,
+    FLUSH_TYPEAHEAD,	// flush current typebuf contents
+    FLUSH_INPUT		// flush typebuf and inchar() input
+} flush_buffers_T;
+
 #include "ex_cmds.h"	    /* Ex command defines */
 #include "spell.h"	    /* spell checking stuff */