Added asynchronous demo which uses poll()
This commit is contained in:
parent
c2496a38be
commit
9df6f621b9
5
Makefile
5
Makefile
|
@ -15,11 +15,14 @@ ifeq ($(DEBUG),1)
|
||||||
CFLAGS_DEBUG=-ggdb -DDEBUG
|
CFLAGS_DEBUG=-ggdb -DDEBUG
|
||||||
endif
|
endif
|
||||||
|
|
||||||
all: demo
|
all: demo demo-async
|
||||||
|
|
||||||
demo: libtermkey.so demo.c
|
demo: libtermkey.so demo.c
|
||||||
$(CC) $(CFLAGS) $(CFLAGS_DEBUG) -o $@ $^
|
$(CC) $(CFLAGS) $(CFLAGS_DEBUG) -o $@ $^
|
||||||
|
|
||||||
|
demo-async: libtermkey.so demo-async.c
|
||||||
|
$(CC) $(CFLAGS) $(CFLAGS_DEBUG) -o $@ $^
|
||||||
|
|
||||||
libtermkey.so: termkey.o driver-csi.o driver-ti.o
|
libtermkey.so: termkey.o driver-csi.o driver-ti.o
|
||||||
$(LD) -shared -soname=$(SONAME) -o $@ $^ -lncurses
|
$(LD) -shared -soname=$(SONAME) -o $@ $^ -lncurses
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,58 @@
|
||||||
|
#include <poll.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include "termkey.h"
|
||||||
|
|
||||||
|
void on_key(termkey_t *tk, termkey_key *key)
|
||||||
|
{
|
||||||
|
char buffer[50];
|
||||||
|
termkey_snprint_key(tk, buffer, sizeof buffer, key, TERMKEY_FORMAT_VIM);
|
||||||
|
printf("%s\n", buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char *argv[]) {
|
||||||
|
termkey_t *tk = termkey_new(0, 0);
|
||||||
|
|
||||||
|
if(!tk) {
|
||||||
|
fprintf(stderr, "Cannot allocate termkey instance\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
struct pollfd fd;
|
||||||
|
|
||||||
|
fd.fd = 0; /* the file descriptor we passed to termkey_new() */
|
||||||
|
fd.events = POLLIN;
|
||||||
|
|
||||||
|
termkey_result ret;
|
||||||
|
termkey_key key;
|
||||||
|
|
||||||
|
int running = 1;
|
||||||
|
int nextwait = -1;
|
||||||
|
|
||||||
|
while(running) {
|
||||||
|
if(poll(&fd, 1, nextwait) == 0) {
|
||||||
|
// Timed out
|
||||||
|
if(termkey_getkey_force(tk, &key) == TERMKEY_RES_KEY)
|
||||||
|
on_key(tk, &key);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(fd.revents & (POLLIN|POLLHUP|POLLERR))
|
||||||
|
termkey_advisereadable(tk);
|
||||||
|
|
||||||
|
while((ret = termkey_getkey(tk, &key)) == TERMKEY_RES_KEY) {
|
||||||
|
on_key(tk, &key);
|
||||||
|
|
||||||
|
if(key.type == TERMKEY_TYPE_UNICODE &&
|
||||||
|
key.modifiers & TERMKEY_KEYMOD_CTRL &&
|
||||||
|
(key.code.codepoint == 'C' || key.code.codepoint == 'c'))
|
||||||
|
running = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(ret == TERMKEY_RES_AGAIN)
|
||||||
|
nextwait = termkey_getwaittime(tk);
|
||||||
|
else
|
||||||
|
nextwait = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
termkey_destroy(tk);
|
||||||
|
}
|
Loading…
Reference in New Issue