From ed7213a8bf111f0bbeb904e03168bf306f10ebb8 Mon Sep 17 00:00:00 2001 From: nick black Date: Thu, 9 Dec 2021 19:49:44 -0500 Subject: [PATCH] [terminfo] store initial palette in termdesc #2435 --- src/lib/in.c | 7 +++---- src/lib/in.h | 1 + src/lib/termdesc.c | 1 + src/lib/termdesc.h | 1 + 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/lib/in.c b/src/lib/in.c index 28bc61a22..6e9523e4e 100644 --- a/src/lib/in.c +++ b/src/lib/in.c @@ -1279,14 +1279,13 @@ palette_cb(inputctx* ictx){ if(ictx->initdata){ unsigned idx = amata_next_numeric(&ictx->amata, "\x1b]4;", ';'); char* str = amata_next_string(&ictx->amata, "rgb:"); - if(idx > NCPALETTESIZE){ + if(idx > sizeof(ictx->initdata->palette.chans) / sizeof(*ictx->initdata->palette.chans)){ logerror("invalid index %u\n", idx); }else if(str == NULL){ logerror("empty palette string\n"); }else{ - uint32_t color; - if(get_default_color(str, &color) == 0){ - loginfo("index %u 0x%06x\n", idx, color); + if(get_default_color(str, &ictx->initdata->palette.chans[idx]) == 0){ + loginfo("index %u 0x%06x\n", idx, ictx->initdata->palette.chans[idx]); } free(str); } diff --git a/src/lib/in.h b/src/lib/in.h index 97f1abc0b..bc232a84b 100644 --- a/src/lib/in.h +++ b/src/lib/in.h @@ -77,6 +77,7 @@ struct initial_responses { int sixelx; // maximum sixel width char* version; // version string, heap-allocated unsigned kbdlevel; // enabled kitty keyboard functions + ncpalette palette; // palette entries }; // Blocking call. Waits until the input thread has processed all responses to diff --git a/src/lib/termdesc.c b/src/lib/termdesc.c index 43e3cb602..620c1a1f8 100644 --- a/src/lib/termdesc.c +++ b/src/lib/termdesc.c @@ -1233,6 +1233,7 @@ int interrogate_terminfo(tinfo* ti, FILE* out, unsigned utf8, ti->dimy = iresp->dimy; ti->dimx = iresp->dimx; } + memcpy(&ti->originalpalette, &iresp->palette, sizeof(ti->originalpalette)); if(iresp->rgb){ ti->caps.rgb = true; } diff --git a/src/lib/termdesc.h b/src/lib/termdesc.h index 67f0cfb05..4b199e457 100644 --- a/src/lib/termdesc.h +++ b/src/lib/termdesc.h @@ -184,6 +184,7 @@ typedef struct tinfo { int default_rows; // LINES environment var / lines terminfo / 24 int default_cols; // COLUMNS environment var / cols terminfo / 80 + ncpalette originalpalette; // palette as read from initial queries pthread_t gpmthread; // thread handle for GPM watcher int gpmfd; // connection to GPM daemon char mouseproto; // DECSET level (100x, '0', '2', '3')