aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.bzrignore1
-rw-r--r--Makefile14
-rw-r--r--demo-glib.c65
3 files changed, 79 insertions, 1 deletions
diff --git a/.bzrignore b/.bzrignore
index 3333951..030eb3c 100644
--- a/.bzrignore
+++ b/.bzrignore
@@ -1,6 +1,7 @@
termkey.h
demo
demo-async
+demo-glib
termkey_getkey.3
termkey_waitkey.3
*.lo
diff --git a/Makefile b/Makefile
index 472bada..14efe91 100644
--- a/Makefile
+++ b/Makefile
@@ -32,6 +32,12 @@ endif
OBJECTS=termkey.lo driver-csi.lo driver-ti.lo
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)
TESTFILES=$(TESTSOURCES:.c=.t)
@@ -49,7 +55,7 @@ MANDIR=$(PREFIX)/share/man
MAN3DIR=$(MANDIR)/man3
MAN7DIR=$(MANDIR)/man7
-all: $(LIBRARY) demo demo-async
+all: $(LIBRARY) $(DEMOS)
%.lo: %.c termkey.h termkey-internal.h
$(LIBTOOL) --mode=compile --tag=CC gcc $(CFLAGS) -o $@ -c $<
@@ -63,6 +69,12 @@ demo: $(LIBRARY) demo.lo
demo-async: $(LIBRARY) demo-async.lo
$(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
$(LIBTOOL) --mode=link --tag=CC gcc -o $@ $^
diff --git a/demo-glib.c b/demo-glib.c
new file mode 100644
index 0000000..7dc8d87
--- /dev/null
+++ b/demo-glib.c
@@ -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);
+}