diff options
Diffstat (limited to 'termkey.c')
| -rw-r--r-- | termkey.c | 19 | 
1 files changed, 17 insertions, 2 deletions
| @@ -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"); | 
