diff --git a/termkey-internal.h b/termkey-internal.h index 5494cf6..9f0904a 100644 --- a/termkey-internal.h +++ b/termkey-internal.h @@ -10,6 +10,8 @@ struct termkey_driver { void *(*new_driver)(termkey_t *tk, const char *term); void (*free_driver)(void *); + void (*start_driver)(termkey_t *tk); + void (*stop_driver)(termkey_t *tk); termkey_result (*getkey)(termkey_t *tk, termkey_key *key, int force); }; diff --git a/termkey.c b/termkey.c index a1904b6..8f55dd3 100644 --- a/termkey.c +++ b/termkey.c @@ -185,6 +185,9 @@ termkey_t *termkey_new_full(int fd, int flags, size_t buffsize, int waittime) } } + if(tk->driver.start_driver) + (*tk->driver.start_driver)(tk); + return tk; abort_free_keynames: @@ -217,6 +220,9 @@ void termkey_free(termkey_t *tk) void termkey_destroy(termkey_t *tk) { + if(tk->driver.stop_driver) + (*tk->driver.stop_driver)(tk); + if(tk->restore_termios_valid) tcsetattr(tk->fd, TCSANOW, &tk->restore_termios);