getchar: Handle incomplete <Paste> in typeahead buffer #10311

<Paste> is a 3-byte sequence and the beginning one or two bytes can appear at
the very end of the typeahead buffer. When this happens, we were exiting from
`vgetorpeek()` instead of reading more characters to see the complete sequence.

I think this should fix #7994 -- at least partially. Before this change, when I
paste exactly 64 characters into a freshly booted instance, I get what I pasted
plus the literal text "<Paste>" at the end. Nvim also stays in nopaste mode.
The attached test case fails in this manner without the code change.

Fix #7994
This commit is contained in:
Alan Wu
2019-06-23 18:28:04 -04:00
committed by Justin M. Keyes
parent 0bdeec8ef0
commit 9fd4a0b526
2 changed files with 17 additions and 1 deletions

View File

@@ -1936,7 +1936,8 @@ static int vgetorpeek(int advance)
}
if ((mp == NULL || max_mlen >= mp_match_len)
&& keylen != KEYLEN_PART_MAP) {
&& keylen != KEYLEN_PART_MAP
&& !(keylen == KEYLEN_PART_KEY && c1 == ui_toggle[0])) {
// No matching mapping found or found a non-matching mapping that
// matches at least what the matching mapping matched
keylen = 0;