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:
Paul LeoNerd Evans 2008-12-06 00:03:48 +00:00
parent 97a47e9b16
commit c10d6f02e4
1 changed files with 10 additions and 7 deletions

View File

@ -318,13 +318,6 @@ static void eat_bytes(termkey_t *tk, size_t count)
tk->buffstart += 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)
@ -444,6 +437,16 @@ static termkey_result getkey(termkey_t *tk, termkey_key *key, int force)
#ifdef DEBUG
print_key(tk, key); fprintf(stderr, "\n");
#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 */
case TERMKEY_RES_EOF:
return ret;