#ifndef TERM_PALETTE_H #define TERM_PALETTE_H #include #include #include "term.h" /* * The colors of one terminal. base holds the colors that the theme gives; * colors holds base plus the entries that the program changed with OSC 4, * 10, 11, or 12. version changes whenever colors changes. */ struct palette { uint32_t colors[TERM_PALETTE_SIZE]; uint32_t base[TERM_PALETTE_SIZE]; struct term_theme theme; uint64_t version; }; /* Set every entry from theme. An all-zero theme selects the built-in theme. */ void term_palette_init(struct palette *p, const struct term_theme *theme); /* Change one entry (0-255, TERM_PALETTE_FG, _BG, or _CURSOR). */ void term_palette_set(struct palette *p, int slot, uint32_t argb); /* Restore one entry, or all entries, to the theme color. */ void term_palette_reset(struct palette *p, int slot); void term_palette_reset_all(struct palette *p); static inline uint32_t palette_resolve(const struct palette *p, term_color c) { return term_color_is_slot(c) ? p->colors[c & TERM_COLOR_SLOT_INDEX] : c; } #endif