vtgl

terminal emulator implemented in OpenGL
git clone anongit@rnpnr.xyz:vtgl.git
Log | Files | Refs | Feed | LICENSE

Commit: b9f18b0baef0e92d2f6cc1e96fbc2b7782559ca2
Parent: 7deeb70cf86620e1730ba033ae13625249e51849
Author: Randy Palamar
Date:   Sat,  6 Jul 2024 15:27:31 -0600

base 16 colours

Diffstat:
Mconfig.def.h | 27+++++++++++++++++++++++++++
Mterminal.c | 19+++++++++++++++----
Mvtgl.c | 3+--
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); }