From a22e941b5e398a9670da0c0ee83ff4ec3d54a94b Mon Sep 17 00:00:00 2001 From: nick black Date: Sat, 12 Jun 2021 15:16:29 -0400 Subject: [PATCH] ncinputlayer_init: prep for terminal detection end sequene --- src/lib/input.c | 6 +++++- src/lib/internal.h | 7 ++++++- src/lib/termdesc.c | 2 +- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/lib/input.c b/src/lib/input.c index 6ae173659..f01a23c34 100644 --- a/src/lib/input.c +++ b/src/lib/input.c @@ -616,7 +616,8 @@ void ncinputlayer_stop(ncinputlayer* nilayer){ input_free_esctrie(&nilayer->inputescapes); } -int ncinputlayer_init(ncinputlayer* nilayer, FILE* infp){ +int ncinputlayer_init(tinfo* tcache, FILE* infp){ + ncinputlayer* nilayer = &tcache->input; setbuffer(infp, NULL, 0); nilayer->inputescapes = NULL; nilayer->infd = fileno(infp); @@ -628,5 +629,8 @@ int ncinputlayer_init(ncinputlayer* nilayer, FILE* infp){ nilayer->inputbuf_valid_starts = 0; nilayer->inputbuf_write_at = 0; nilayer->input_events = 0; + if(nilayer->ttyfd >= 0){ + // FIXME complete terminal detection + } return 0; } diff --git a/src/lib/internal.h b/src/lib/internal.h index 2a052c0b4..856c0578f 100644 --- a/src/lib/internal.h +++ b/src/lib/internal.h @@ -1493,7 +1493,12 @@ cellcmp_and_dupfar(egcpool* dampool, nccell* damcell, return 1; } -int ncinputlayer_init(ncinputlayer* nilayer, FILE* infp); +// sets up the input layer, building a trie of escape sequences and their +// nckey equivalents. if we are connected to a tty, this also completes the +// terminal detection sequence (we ought have already written our initial +// queries, ideally as early as possible). +int ncinputlayer_init(tinfo* tcache, FILE* infp); + void ncinputlayer_stop(ncinputlayer* nilayer); // FIXME absorb into ncinputlayer_init() diff --git a/src/lib/termdesc.c b/src/lib/termdesc.c index 0f55f26a0..cef2b518e 100644 --- a/src/lib/termdesc.c +++ b/src/lib/termdesc.c @@ -421,7 +421,7 @@ int interrogate_terminfo(tinfo* ti, int fd, const char* termname, unsigned utf8, goto err; } } - if(ncinputlayer_init(&ti->input, stdin)){ + if(ncinputlayer_init(ti, stdin)){ return -1; } if(apply_term_heuristics(ti, termname, fd)){