allow configuration of the whole palette

This commit is contained in:
Daniel Micay 2012-06-25 16:05:23 -04:00
parent a1d588981d
commit f89df13e5a
2 changed files with 49 additions and 29 deletions

View File

@ -400,32 +400,44 @@ static void load_config(GtkWindow *window, VteTerminal *vte,
vte_terminal_set_opacity(vte, (guint16)(0xffff * (1 - cfgdouble)));
}
static const long palette_size = 24;
static const long palette_size = 255;
GdkColor color, palette[palette_size];
static const char * const colors[8] = {"black", "red", "green", "yellow",
"blue", "magenta", "cyan", "white"};
char color_key[] = "color000";
bool success = true;
for (unsigned i = 0; success && i < 8; i++) {
GError *error = NULL;
gsize length;
char **triplet = g_key_file_get_string_list(config, "colors", colors[i], &length, &error);
success = false;
if (error) {
g_error_free(error);
} else if (length != 3) {
g_printerr("%s is not set to a triplet of color strings\n", colors[i]);
} else if (!gdk_color_parse(triplet[0], &palette[i])) {
g_printerr("invalid color string: %s\n", triplet[0]);
} else if (!gdk_color_parse(triplet[1], &palette[i+8])) {
g_printerr("invalid color string: %s\n", triplet[1]);
} else if (!gdk_color_parse(triplet[2], &palette[i+16])) {
g_printerr("invalid color string: %s\n", triplet[2]);
for (unsigned i = 0; success && i < palette_size; i++) {
snprintf(color_key, sizeof color_key, "color%u", i);
if (get_config_string(config, "colors", color_key, &cfgstr)) {
if (!gdk_color_parse(cfgstr, &palette[i])) {
g_printerr("invalid color string: %s\n", cfgstr);
success = false;
}
} else {
success = true;
if (i < 16) {
palette[i].blue = (i & 4) ? 0xc000 : 0;
palette[i].green = (i & 2) ? 0xc000 : 0;
palette[i].red = (i & 1) ? 0xc000 : 0;
if (i > 7) {
palette[i].blue += 0x3fff;
palette[i].green += 0x3fff;
palette[i].red += 0x3fff;
}
}
else if (i < 232) {
unsigned j = i - 16;
unsigned r = j / 36, g = (j / 6) % 6, b = j % 6;
unsigned red = (r == 0) ? 0 : r * 40 + 55;
unsigned green = (g == 0) ? 0 : g * 40 + 55;
unsigned blue = (b == 0) ? 0 : b * 40 + 55;
palette[i].red = red | red << 8 ;
palette[i].green = green | green << 8;
palette[i].blue = blue | blue << 8;
} else if (i < 256) {
unsigned shade = 8 + (i - 232) * 10;
palette[i].red = palette[i].green = palette[i].blue = shade | shade << 8;
}
}
g_strfreev(triplet);
}
if (success) {

View File

@ -36,12 +36,20 @@ foreground_bold = #ffffff
background = #3f3f3f
#cursor = #dcdccc
# color = normal;bold;dim
black = #3f3f3f;#709080;#3f3f3f
red = #705050;#dca3a3;#705050
green = #60b48a;#c3bf9f;#60b48a
yellow = #dfaf8f;#f0dfaf;#dfaf8f
blue = #506070;#94bff3;#506070
magenta = #dc8cc3;#ec93d3;#dc8cc3
cyan = #8cd0d3;#93e0e3;#8cd0d3
white = #dcdccc;#ffffff;#dcdccc
# colors from color0 to color254 can be set
color0 = #3f3f3f
color1 = #705050
color2 = #60b48a
color3 = #dfaf8f
color4 = #506070
color5 = #dc8cc3
color6 = #8cd0d3
color7 = #dcdccc
color8 = #709080
color9 = #dca3a3
color10 = #c3bf9f
color11 = #f0dfaf
color12 = #94bff3
color13 = #ec93d3
color14 = #93e0e3
color15 = #ffffff