mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
Merge #9098 'vim-patch:8.1.{459,463,466}'
This commit is contained in:
commit
85e8fd96f4
@ -420,7 +420,7 @@ void typeahead_noflush(int c)
|
|||||||
* typeahead buffer (used in case of an error). If "flush_typeahead" is true,
|
* typeahead buffer (used in case of an error). If "flush_typeahead" is true,
|
||||||
* flush all typeahead characters (used when interrupted by a CTRL-C).
|
* flush all typeahead characters (used when interrupted by a CTRL-C).
|
||||||
*/
|
*/
|
||||||
void flush_buffers(int flush_typeahead)
|
void flush_buffers(flush_buffers_T flush_typeahead)
|
||||||
{
|
{
|
||||||
init_typebuf();
|
init_typebuf();
|
||||||
|
|
||||||
@ -428,22 +428,24 @@ void 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 {
|
||||||
*/
|
// remove typeahead
|
||||||
while (inchar(typebuf.tb_buf, typebuf.tb_buflen - 1, 10L) != 0) {
|
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;
|
||||||
// Reset the flag that text received from a client or from feedkeys()
|
// Reset the flag that text received from a client or from feedkeys()
|
||||||
// was inserted in the typeahead buffer.
|
// was inserted in the typeahead buffer.
|
||||||
typebuf_was_filled = false;
|
typebuf_was_filled = false;
|
||||||
} 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;
|
||||||
@ -1538,6 +1540,7 @@ int 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 vpeekc(void)
|
int vpeekc(void)
|
||||||
{
|
{
|
||||||
@ -1602,7 +1605,8 @@ vungetc ( /* unget one character (can only be done once!) */
|
|||||||
/// 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` (global) is zero, checks for mappings in the current mode.
|
/// When `no_mapping` (global) 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).
|
||||||
@ -1709,7 +1713,7 @@ static int vgetorpeek(int advance)
|
|||||||
} 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) {
|
||||||
/* Also record this character, it might be needed to
|
/* Also record this character, it might be needed to
|
||||||
@ -1970,8 +1974,8 @@ static int 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;
|
||||||
}
|
}
|
||||||
|
@ -16,6 +16,13 @@ enum {
|
|||||||
REMAP_SKIP = -3, ///< No remapping for first char.
|
REMAP_SKIP = -3, ///< No remapping for first char.
|
||||||
} RemapValues;
|
} RemapValues;
|
||||||
|
|
||||||
|
// Argument for flush_buffers().
|
||||||
|
typedef enum {
|
||||||
|
FLUSH_MINIMAL,
|
||||||
|
FLUSH_TYPEAHEAD, // flush current typebuf contents
|
||||||
|
FLUSH_INPUT // flush typebuf and inchar() input
|
||||||
|
} flush_buffers_T;
|
||||||
|
|
||||||
#define KEYLEN_PART_KEY -1 /* keylen value for incomplete key-code */
|
#define KEYLEN_PART_KEY -1 /* keylen value for incomplete key-code */
|
||||||
#define KEYLEN_PART_MAP -2 /* keylen value for incomplete mapping */
|
#define KEYLEN_PART_MAP -2 /* keylen value for incomplete mapping */
|
||||||
#define KEYLEN_REMOVED 9999 /* keylen value for removed sequence */
|
#define KEYLEN_REMOVED 9999 /* keylen value for removed sequence */
|
||||||
|
@ -49,6 +49,7 @@
|
|||||||
#include "nvim/buffer.h"
|
#include "nvim/buffer.h"
|
||||||
#include "nvim/cursor.h"
|
#include "nvim/cursor.h"
|
||||||
#include "nvim/eval.h"
|
#include "nvim/eval.h"
|
||||||
|
#include "nvim/getchar.h"
|
||||||
#include "nvim/fileio.h"
|
#include "nvim/fileio.h"
|
||||||
#include "nvim/func_attr.h"
|
#include "nvim/func_attr.h"
|
||||||
#include "nvim/main.h"
|
#include "nvim/main.h"
|
||||||
@ -3358,12 +3359,16 @@ static char *findswapname(buf_T *buf, char **dirp, char *old_fname,
|
|||||||
choice = do_swapexists(buf, (char_u *) fname);
|
choice = do_swapexists(buf, (char_u *) fname);
|
||||||
|
|
||||||
if (choice == 0) {
|
if (choice == 0) {
|
||||||
/* Show info about the existing swap file. */
|
// Show info about the existing swap file.
|
||||||
attention_message(buf, (char_u *) fname);
|
attention_message(buf, (char_u *)fname);
|
||||||
|
|
||||||
/* We don't want a 'q' typed at the more-prompt
|
// We don't want a 'q' typed at the more-prompt
|
||||||
* interrupt loading a file. */
|
// interrupt loading a file.
|
||||||
got_int = FALSE;
|
got_int = false;
|
||||||
|
|
||||||
|
// If vimrc has "simalt ~x" we don't want it to
|
||||||
|
// interfere with the prompt here.
|
||||||
|
flush_buffers(FLUSH_TYPEAHEAD);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (swap_exists_action != SEA_NONE && choice == 0) {
|
if (swap_exists_action != SEA_NONE && choice == 0) {
|
||||||
|
@ -552,7 +552,7 @@ int emsg(const 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()
|
||||||
}
|
}
|
||||||
|
@ -2548,7 +2548,7 @@ void msgmore(long n)
|
|||||||
void beep_flush(void)
|
void 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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -873,7 +873,7 @@ func Test_Executable()
|
|||||||
call assert_equal(1, executable('win.ini'))
|
call assert_equal(1, executable('win.ini'))
|
||||||
elseif has('unix')
|
elseif has('unix')
|
||||||
call assert_equal(1, executable('cat'))
|
call assert_equal(1, executable('cat'))
|
||||||
call assert_equal(0, executable('dog'))
|
call assert_equal(0, executable('nodogshere'))
|
||||||
endif
|
endif
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user