66 lines
1.2 KiB
C
66 lines
1.2 KiB
C
|
#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);
|
||
|
}
|