Have 'termkey_advisereadable' return a value indicating if it's likely useful to call it again
This commit is contained in:
parent
b3647c4861
commit
c71e1928a2
13
termkey.c
13
termkey.c
|
@ -444,6 +444,7 @@ termkey_result termkey_getkey(termkey_t *tk, termkey_key *key)
|
||||||
|
|
||||||
case TERMKEY_RES_NONE:
|
case TERMKEY_RES_NONE:
|
||||||
case TERMKEY_RES_EOF:
|
case TERMKEY_RES_EOF:
|
||||||
|
case TERMKEY_RES_AGAIN:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -569,17 +570,21 @@ void termkey_pushinput(termkey_t *tk, unsigned char *input, size_t inputlen)
|
||||||
tk->buffcount += inputlen;
|
tk->buffcount += inputlen;
|
||||||
}
|
}
|
||||||
|
|
||||||
void termkey_advisereadable(termkey_t *tk)
|
termkey_result termkey_advisereadable(termkey_t *tk)
|
||||||
{
|
{
|
||||||
unsigned char buffer[64]; // Smaller than the default size
|
unsigned char buffer[64]; // Smaller than the default size
|
||||||
size_t len = read(tk->fd, buffer, sizeof buffer);
|
size_t len = read(tk->fd, buffer, sizeof buffer);
|
||||||
|
|
||||||
if(len == -1 && errno == EAGAIN)
|
if(len == -1 && errno == EAGAIN)
|
||||||
return;
|
return TERMKEY_RES_NONE;
|
||||||
else if(len < 1)
|
else if(len < 1) {
|
||||||
tk->is_closed = 1;
|
tk->is_closed = 1;
|
||||||
else
|
return TERMKEY_RES_NONE;
|
||||||
|
}
|
||||||
|
else {
|
||||||
termkey_pushinput(tk, buffer, len);
|
termkey_pushinput(tk, buffer, len);
|
||||||
|
return TERMKEY_RES_AGAIN;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *termkey_describe_sym(termkey_t *tk, termkey_keysym code)
|
const char *termkey_describe_sym(termkey_t *tk, termkey_keysym code)
|
||||||
|
|
|
@ -73,6 +73,7 @@ typedef enum {
|
||||||
TERMKEY_RES_NONE,
|
TERMKEY_RES_NONE,
|
||||||
TERMKEY_RES_KEY,
|
TERMKEY_RES_KEY,
|
||||||
TERMKEY_RES_EOF,
|
TERMKEY_RES_EOF,
|
||||||
|
TERMKEY_RES_AGAIN,
|
||||||
} termkey_result;
|
} termkey_result;
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
|
@ -114,7 +115,7 @@ termkey_result termkey_waitkey(termkey_t *tk, termkey_key *key);
|
||||||
|
|
||||||
void termkey_pushinput(termkey_t *tk, unsigned char *input, size_t inputlen);
|
void termkey_pushinput(termkey_t *tk, unsigned char *input, size_t inputlen);
|
||||||
|
|
||||||
void termkey_advisereadable(termkey_t *tk);
|
termkey_result termkey_advisereadable(termkey_t *tk);
|
||||||
|
|
||||||
// Registration of keys and names
|
// Registration of keys and names
|
||||||
termkey_keysym termkey_register_keyname(termkey_t *tk, termkey_keysym code, const char *name);
|
termkey_keysym termkey_register_keyname(termkey_t *tk, termkey_keysym code, const char *name);
|
||||||
|
|
Loading…
Reference in New Issue