Make sure only to slide buffer down when returning a real key to the user, or else it might upset the meta-key logic when it returns
This commit is contained in:
parent
97a47e9b16
commit
c10d6f02e4
17
termkey.c
17
termkey.c
|
@ -318,13 +318,6 @@ static void eat_bytes(termkey_t *tk, size_t count)
|
||||||
|
|
||||||
tk->buffstart += count;
|
tk->buffstart += count;
|
||||||
tk->buffcount -= count;
|
tk->buffcount -= count;
|
||||||
|
|
||||||
size_t halfsize = tk->buffsize / 2;
|
|
||||||
|
|
||||||
if(tk->buffstart > halfsize) {
|
|
||||||
memcpy(tk->buffer, tk->buffer + halfsize, halfsize);
|
|
||||||
tk->buffstart -= halfsize;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline unsigned int utf8_seqlen(long codepoint)
|
static inline unsigned int utf8_seqlen(long codepoint)
|
||||||
|
@ -444,6 +437,16 @@ static termkey_result getkey(termkey_t *tk, termkey_key *key, int force)
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
print_key(tk, key); fprintf(stderr, "\n");
|
print_key(tk, key); fprintf(stderr, "\n");
|
||||||
#endif
|
#endif
|
||||||
|
// Slide the data down to stop it running away
|
||||||
|
{
|
||||||
|
size_t halfsize = tk->buffsize / 2;
|
||||||
|
|
||||||
|
if(tk->buffstart > halfsize) {
|
||||||
|
memcpy(tk->buffer, tk->buffer + halfsize, halfsize);
|
||||||
|
tk->buffstart -= halfsize;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* fallthrough */
|
/* fallthrough */
|
||||||
case TERMKEY_RES_EOF:
|
case TERMKEY_RES_EOF:
|
||||||
return ret;
|
return ret;
|
||||||
|
|
Loading…
Reference in New Issue