From f3377fd818e6d39da8a586c77a671f8b7636cb0c Mon Sep 17 00:00:00 2001 From: nick black Date: Sat, 2 Oct 2021 23:23:18 -0400 Subject: [PATCH] [automaton] handle XTGETTCAP, decoding MLterm and old Kitty #2225 --- src/lib/in.c | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/src/lib/in.c b/src/lib/in.c index 30a353672..6f2be26d1 100644 --- a/src/lib/in.c +++ b/src/lib/in.c @@ -765,21 +765,28 @@ xtversion_cb(inputctx* ictx){ static int tcap_cb(inputctx* ictx){ char* str = amata_next_string(&ictx->amata, "\x1bP1+r"); - if(str){ - loginfo("TCAP: %s\n", str); + if(str == NULL){ + return 2; + } + loginfo("xtgettcap [%s]\n", str); + if(ictx->initdata == NULL){ free(str); + return 2; } - /* FIXME - if(cap == 0x544e){ // 'TN' terminal name - loginfo("got TN capability %d\n", val); - if(strcmp(ictx->runstring, "xterm-kitty") == 0){ - inits->qterm = TERMINAL_KITTY; - }else if(strcmp(ictx->runstring, "mlterm") == 0){ - // MLterm prior to late 3.9.1 only reports via XTGETTCAP - inits->qterm = TERMINAL_MLTERM; - } - break; - */ + // 'TN' (Terminal Name) + if(strncasecmp(str, "544e=", 5) == 0){ + const char* tn = str + 5; + if(strcasecmp(tn, "6D6C7465726D") == 0){ + ictx->initdata->qterm = TERMINAL_MLTERM; + }else if(strcasecmp(tn, "787465726d2d6b69747479") == 0){ + ictx->initdata->qterm = TERMINAL_KITTY; + }else{ + logdebug("unknown terminal name %s\n", tn); + } + }else{ + logdebug("unknown capability=val %s\n", str); + } + free(str); return 2; }