Created a demo to show libtermkey in a GLib-based program
This commit is contained in:
parent
6070de26f1
commit
a29d9f0f3c
|
@ -1,6 +1,7 @@
|
||||||
termkey.h
|
termkey.h
|
||||||
demo
|
demo
|
||||||
demo-async
|
demo-async
|
||||||
|
demo-glib
|
||||||
termkey_getkey.3
|
termkey_getkey.3
|
||||||
termkey_waitkey.3
|
termkey_waitkey.3
|
||||||
*.lo
|
*.lo
|
||||||
|
|
14
Makefile
14
Makefile
|
@ -32,6 +32,12 @@ endif
|
||||||
OBJECTS=termkey.lo driver-csi.lo driver-ti.lo
|
OBJECTS=termkey.lo driver-csi.lo driver-ti.lo
|
||||||
LIBRARY=libtermkey.la
|
LIBRARY=libtermkey.la
|
||||||
|
|
||||||
|
DEMOS=demo demo-async
|
||||||
|
|
||||||
|
ifeq ($(shell pkg-config glib-2.0 && echo 1),1)
|
||||||
|
DEMOS+=demo-glib
|
||||||
|
endif
|
||||||
|
|
||||||
TESTSOURCES=$(wildcard t/[0-9]*.c)
|
TESTSOURCES=$(wildcard t/[0-9]*.c)
|
||||||
TESTFILES=$(TESTSOURCES:.c=.t)
|
TESTFILES=$(TESTSOURCES:.c=.t)
|
||||||
|
|
||||||
|
@ -49,7 +55,7 @@ MANDIR=$(PREFIX)/share/man
|
||||||
MAN3DIR=$(MANDIR)/man3
|
MAN3DIR=$(MANDIR)/man3
|
||||||
MAN7DIR=$(MANDIR)/man7
|
MAN7DIR=$(MANDIR)/man7
|
||||||
|
|
||||||
all: $(LIBRARY) demo demo-async
|
all: $(LIBRARY) $(DEMOS)
|
||||||
|
|
||||||
%.lo: %.c termkey.h termkey-internal.h
|
%.lo: %.c termkey.h termkey-internal.h
|
||||||
$(LIBTOOL) --mode=compile --tag=CC gcc $(CFLAGS) -o $@ -c $<
|
$(LIBTOOL) --mode=compile --tag=CC gcc $(CFLAGS) -o $@ -c $<
|
||||||
|
@ -63,6 +69,12 @@ demo: $(LIBRARY) demo.lo
|
||||||
demo-async: $(LIBRARY) demo-async.lo
|
demo-async: $(LIBRARY) demo-async.lo
|
||||||
$(LIBTOOL) --mode=link --tag=CC gcc -o $@ $^
|
$(LIBTOOL) --mode=link --tag=CC gcc -o $@ $^
|
||||||
|
|
||||||
|
demo-glib.lo: demo-glib.c termkey.h
|
||||||
|
$(LIBTOOL) --mode=compile --tag=CC gcc -o $@ -c $< $(shell pkg-config glib-2.0 --cflags)
|
||||||
|
|
||||||
|
demo-glib: $(LIBRARY) demo-glib.lo
|
||||||
|
$(LIBTOOL) --mode=link --tag=CC gcc -o $@ $^ $(shell pkg-config glib-2.0 --libs)
|
||||||
|
|
||||||
t/%.t: t/%.c $(LIBRARY) t/taplib.lo
|
t/%.t: t/%.c $(LIBRARY) t/taplib.lo
|
||||||
$(LIBTOOL) --mode=link --tag=CC gcc -o $@ $^
|
$(LIBTOOL) --mode=link --tag=CC gcc -o $@ $^
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,65 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <glib.h>
|
||||||
|
|
||||||
|
#include "termkey.h"
|
||||||
|
|
||||||
|
static TermKey *tk;
|
||||||
|
static int timeout_id;
|
||||||
|
|
||||||
|
static void on_key(TermKey *tk, TermKeyKey *key)
|
||||||
|
{
|
||||||
|
char buffer[50];
|
||||||
|
termkey_strfkey(tk, buffer, sizeof buffer, key, TERMKEY_FORMAT_VIM);
|
||||||
|
printf("%s\n", buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean key_timer(gpointer data)
|
||||||
|
{
|
||||||
|
TermKeyKey key;
|
||||||
|
|
||||||
|
if(termkey_getkey_force(tk, &key) == TERMKEY_RES_KEY)
|
||||||
|
on_key(tk, &key);
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean stdin_io(GIOChannel *source, GIOCondition condition, gpointer data)
|
||||||
|
{
|
||||||
|
if(condition && G_IO_IN) {
|
||||||
|
if(timeout_id)
|
||||||
|
g_source_remove(timeout_id);
|
||||||
|
|
||||||
|
termkey_advisereadable(tk);
|
||||||
|
|
||||||
|
TermKeyResult ret;
|
||||||
|
TermKeyKey key;
|
||||||
|
while((ret = termkey_getkey(tk, &key)) == TERMKEY_RES_KEY) {
|
||||||
|
on_key(tk, &key);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(ret == TERMKEY_RES_AGAIN)
|
||||||
|
timeout_id = g_timeout_add(termkey_get_waittime(tk), key_timer, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
TERMKEY_CHECK_VERSION;
|
||||||
|
|
||||||
|
tk = termkey_new(0, 0);
|
||||||
|
|
||||||
|
if(!tk) {
|
||||||
|
fprintf(stderr, "Cannot allocate termkey instance\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
GMainLoop *loop = g_main_loop_new(NULL, FALSE);
|
||||||
|
|
||||||
|
g_io_add_watch(g_io_channel_unix_new(0), G_IO_IN, stdin_io, NULL);
|
||||||
|
|
||||||
|
g_main_loop_run(loop);
|
||||||
|
|
||||||
|
termkey_destroy(tk);
|
||||||
|
}
|
Loading…
Reference in New Issue