aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--termkey.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/termkey.c b/termkey.c
index f7087e0..6c246a4 100644
--- a/termkey.c
+++ b/termkey.c
@@ -8,6 +8,11 @@
#include <stdio.h>
+static struct termkey_driver *drivers[] = {
+ &termkey_driver_csi,
+ NULL,
+};
+
termkey_t *termkey_new_full(int fd, int flags, size_t buffsize, int waittime)
{
termkey_t *tk = malloc(sizeof(*tk));
@@ -59,9 +64,19 @@ termkey_t *termkey_new_full(int fd, int flags, size_t buffsize, int waittime)
for(i = 0; i < tk->nkeynames; i++)
tk->keynames[i] = NULL;
- tk->driver = termkey_driver_csi;
+ for(i = 0; drivers[i]; i++) {
+ void *driver_info = (*drivers[i]->new_driver)(tk);
+ if(!driver_info)
+ continue;
+
+ tk->driver = *(drivers[i]);
+ tk->driver_info = driver_info;
+ }
- tk->driver_info = (*tk->driver.new_driver)(tk);
+ if(!tk->driver_info) {
+ fprintf(stderr, "Unable to find a terminal driver\n");
+ return NULL;
+ }
// Special built-in names
termkey_register_keyname(tk, TERMKEY_SYM_NONE, "NONE");