mirror of
https://github.com/vim/vim.git
synced 2025-09-26 04:04:07 -04:00
patch 8.1.0466: autocmd test fails
Problem: Autocmd test fails. Solution: Do call inchar() when flushing typeahead.
This commit is contained in:
@@ -438,7 +438,7 @@ typeahead_noflush(int c)
|
|||||||
* flush all typeahead characters (used when interrupted by a CTRL-C).
|
* flush all typeahead characters (used when interrupted by a CTRL-C).
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
flush_buffers(int flush_typeahead)
|
flush_buffers(flush_buffers_T flush_typeahead)
|
||||||
{
|
{
|
||||||
init_typebuf();
|
init_typebuf();
|
||||||
|
|
||||||
@@ -446,15 +446,21 @@ flush_buffers(int flush_typeahead)
|
|||||||
while (read_readbuffers(TRUE) != NUL)
|
while (read_readbuffers(TRUE) != NUL)
|
||||||
;
|
;
|
||||||
|
|
||||||
if (flush_typeahead) /* remove all typeahead */
|
if (flush_typeahead == FLUSH_MINIMAL)
|
||||||
{
|
{
|
||||||
/*
|
// remove mapped characters at the start only
|
||||||
* We have to get all characters, because we may delete the first part
|
typebuf.tb_off += typebuf.tb_maplen;
|
||||||
* of an escape sequence.
|
typebuf.tb_len -= typebuf.tb_maplen;
|
||||||
* In an xterm we get one char at a time and we have to get them all.
|
}
|
||||||
*/
|
else
|
||||||
while (inchar(typebuf.tb_buf, typebuf.tb_buflen - 1, 10L) != 0)
|
{
|
||||||
;
|
// 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_off = MAXMAPLEN;
|
||||||
typebuf.tb_len = 0;
|
typebuf.tb_len = 0;
|
||||||
#if defined(FEAT_CLIENTSERVER) || defined(FEAT_EVAL)
|
#if defined(FEAT_CLIENTSERVER) || defined(FEAT_EVAL)
|
||||||
@@ -463,11 +469,6 @@ flush_buffers(int flush_typeahead)
|
|||||||
typebuf_was_filled = FALSE;
|
typebuf_was_filled = FALSE;
|
||||||
#endif
|
#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_maplen = 0;
|
||||||
typebuf.tb_silent = 0;
|
typebuf.tb_silent = 0;
|
||||||
cmd_silent = FALSE;
|
cmd_silent = FALSE;
|
||||||
@@ -1858,6 +1859,7 @@ plain_vgetc(void)
|
|||||||
* Check if a character is available, such that vgetc() will not block.
|
* 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
|
* If the next character is a special character or multi-byte, the returned
|
||||||
* character is not valid!.
|
* character is not valid!.
|
||||||
|
* Returns NUL if no character is available.
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
vpeekc(void)
|
vpeekc(void)
|
||||||
@@ -1956,7 +1958,8 @@ vungetc(int c)
|
|||||||
* KeyTyped is set to TRUE in the case the user typed the key.
|
* KeyTyped is set to TRUE in the case the user typed the key.
|
||||||
* KeyStuffed is TRUE if the character comes from the stuff buffer.
|
* KeyStuffed is TRUE if the character comes from the stuff buffer.
|
||||||
* if "advance" is FALSE (vpeekc()):
|
* 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.
|
* When "no_mapping" is zero, checks for mappings in the current mode.
|
||||||
* Only returns one byte (of a multi-byte character).
|
* Only returns one byte (of a multi-byte character).
|
||||||
@@ -2084,7 +2087,7 @@ vgetorpeek(int advance)
|
|||||||
c = ESC;
|
c = ESC;
|
||||||
else
|
else
|
||||||
c = Ctrl_C;
|
c = Ctrl_C;
|
||||||
flush_buffers(TRUE); /* flush all typeahead */
|
flush_buffers(FLUSH_INPUT); // flush all typeahead
|
||||||
|
|
||||||
if (advance)
|
if (advance)
|
||||||
{
|
{
|
||||||
@@ -2510,7 +2513,7 @@ vgetorpeek(int advance)
|
|||||||
redrawcmdline();
|
redrawcmdline();
|
||||||
else
|
else
|
||||||
setcursor();
|
setcursor();
|
||||||
flush_buffers(FALSE);
|
flush_buffers(FLUSH_MINIMAL);
|
||||||
mapdepth = 0; /* for next one */
|
mapdepth = 0; /* for next one */
|
||||||
c = -1;
|
c = -1;
|
||||||
break;
|
break;
|
||||||
|
@@ -4522,7 +4522,7 @@ findswapname(
|
|||||||
|
|
||||||
// If vimrc has "simalt ~x" we don't want it to
|
// If vimrc has "simalt ~x" we don't want it to
|
||||||
// interfere with the prompt here.
|
// interfere with the prompt here.
|
||||||
flush_buffers(TRUE);
|
flush_buffers(FLUSH_TYPEAHEAD);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
|
#if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
|
||||||
|
@@ -688,8 +688,8 @@ emsg(char_u *s)
|
|||||||
if (p_eb)
|
if (p_eb)
|
||||||
beep_flush(); /* also includes flush_buffers() */
|
beep_flush(); /* also includes flush_buffers() */
|
||||||
else
|
else
|
||||||
flush_buffers(FALSE); /* flush internal buffers */
|
flush_buffers(FLUSH_MINIMAL); // flush internal buffers
|
||||||
did_emsg = TRUE; /* flag for DoOneCmd() */
|
did_emsg = TRUE; // flag for DoOneCmd()
|
||||||
#ifdef FEAT_EVAL
|
#ifdef FEAT_EVAL
|
||||||
did_uncaught_emsg = TRUE;
|
did_uncaught_emsg = TRUE;
|
||||||
#endif
|
#endif
|
||||||
|
@@ -3825,7 +3825,7 @@ beep_flush(void)
|
|||||||
{
|
{
|
||||||
if (emsg_silent == 0)
|
if (emsg_silent == 0)
|
||||||
{
|
{
|
||||||
flush_buffers(FALSE);
|
flush_buffers(FLUSH_MINIMAL);
|
||||||
vim_beep(BO_ERROR);
|
vim_beep(BO_ERROR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -5,7 +5,7 @@ char_u *get_inserted(void);
|
|||||||
int stuff_empty(void);
|
int stuff_empty(void);
|
||||||
int readbuf1_empty(void);
|
int readbuf1_empty(void);
|
||||||
void typeahead_noflush(int c);
|
void typeahead_noflush(int c);
|
||||||
void flush_buffers(int flush_typeahead);
|
void flush_buffers(flush_buffers_T flush_typeahead);
|
||||||
void ResetRedobuff(void);
|
void ResetRedobuff(void);
|
||||||
void CancelRedo(void);
|
void CancelRedo(void);
|
||||||
void saveRedobuff(save_redo_T *save_redo);
|
void saveRedobuff(save_redo_T *save_redo);
|
||||||
|
@@ -792,6 +792,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
466,
|
||||||
/**/
|
/**/
|
||||||
465,
|
465,
|
||||||
/**/
|
/**/
|
||||||
|
@@ -2108,6 +2108,13 @@ typedef enum {
|
|||||||
PASTE_ONE_CHAR /* return first character */
|
PASTE_ONE_CHAR /* return first character */
|
||||||
} paste_mode_T;
|
} 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 "ex_cmds.h" /* Ex command defines */
|
||||||
#include "spell.h" /* spell checking stuff */
|
#include "spell.h" /* spell checking stuff */
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user