Commit: b9f18b0baef0e92d2f6cc1e96fbc2b7782559ca2
Parent: 7deeb70cf86620e1730ba033ae13625249e51849
Author: Randy Palamar
Date: Sat, 6 Jul 2024 15:27:31 -0600
base 16 colours
Diffstat:
3 files changed, 43 insertions(+), 6 deletions(-)
diff --git a/config.def.h b/config.def.h
@@ -1 +1,28 @@
static u8 g_tabstop = 8;
+
+static Colour base16_colours[16] = {
+ [0] = { .rgba = 0x000000ff }, /* black */
+ [1] = { .rgba = 0xaa0000ff }, /* red */
+ [2] = { .rgba = 0x00aa00ff }, /* green */
+ [3] = { .rgba = 0xaa5500ff }, /* yellow */
+ [4] = { .rgba = 0x0000aaff }, /* blue */
+ [5] = { .rgba = 0xaa00aaff }, /* magenta */
+ [6] = { .rgba = 0x00aaaaff }, /* cyan */
+ [7] = { .rgba = 0xaaaaaaff }, /* white */
+
+ /* bright colours */
+ [8] = { .rgba = 0x555555ff }, /* black */
+ [9] = { .rgba = 0xff5555ff }, /* red */
+ [10] = { .rgba = 0x55ff55ff }, /* green */
+ [11] = { .rgba = 0xffff55ff }, /* yellow */
+ [12] = { .rgba = 0x5555ffff }, /* blue */
+ [13] = { .rgba = 0xff55ffff }, /* magenta */
+ [14] = { .rgba = 0x55ffffff }, /* cyan */
+ [15] = { .rgba = 0xffffffff }, /* white */
+};
+
+struct {
+ Colour *data;
+ u8 fgidx;
+ u8 bgidx;
+} g_colours = {base16_colours, 7, 0};
diff --git a/terminal.c b/terminal.c
@@ -126,8 +126,9 @@ fb_scroll_up(Term *t, u32 top, u32 n)
static void
cursor_reset(Term *t)
{
- t->cursor.state.fg = (Colour){.rgba = 0x1e9e33ff};
- t->cursor.state.bg = (Colour){.r = 20, .g = 20, .b = 20, .a = 0xff};
+ //(Colour){.rgba = 0x1e9e33ff};
+ t->cursor.state.fg = g_colours.data[g_colours.fgidx];
+ t->cursor.state.bg = g_colours.data[g_colours.bgidx];
t->cursor.state.attr = ATTR_NULL;
}
@@ -269,9 +270,19 @@ set_colours(Term *t, CSI *csi)
case 27: cs->attr &= ~ATTR_INVERSE; break;
case 28: cs->attr &= ~ATTR_INVISIBLE; break;
case 29: cs->attr &= ~ATTR_STRUCK; break;
+
+ case 39: cs->fg = g_colours.data[g_colours.fgidx]; break;
+ case 49: cs->bg = g_colours.data[g_colours.bgidx]; break;
+
default:
- fprintf(stderr, "unhandled colour arg: %d\n", csi->argv[i]);
- dump_csi(csi);
+ if (BETWEEN(csi->argv[i], 30, 37)) {
+ cs->fg = g_colours.data[csi->argv[i] - 30];
+ } else if (BETWEEN(csi->argv[i], 40, 47)) {
+ cs->bg = g_colours.data[csi->argv[i] - 40];
+ } else {
+ fprintf(stderr, "unhandled colour arg: %d\n", csi->argv[i]);
+ dump_csi(csi);
+ }
}
}
}
diff --git a/vtgl.c b/vtgl.c
@@ -27,8 +27,7 @@ normalized_colour(Colour c)
static void
clear_colour(void)
{
- v4 cc = normalized_colour((Colour){.r = 64, .g = 64, .b = 64, .a = 255});
- //v4 cc = normalized_colour((Colour){.r = 20, .g = 20, .b = 20, .a = 255});
+ v4 cc = normalized_colour(g_colours.data[g_colours.bgidx]);
glClearColor(cc.r, cc.g, cc.b, cc.a);
glClear(GL_COLOR_BUFFER_BIT);
}