Skip to content

Commit 2157d2a

Browse files
committed
Add text color options with black background.
1 parent ab834f3 commit 2157d2a

File tree

1 file changed

+45
-17
lines changed

1 file changed

+45
-17
lines changed

Diff for: src/textcolor.c

+45-17
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,13 @@
8989

9090
#if __WIN32__
9191

92+
// For Windows platform:
93+
// -t 0 disables color
94+
// -t 1 enables with white background (default)
95+
// -t 2 enables with black background
96+
9297
#define BACKGROUND_WHITE (BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE | BACKGROUND_INTENSITY)
98+
#define FOREGROUND_WHITE (FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY)
9399

94100
#else /* Linux, BSD, Mac OSX */
95101

@@ -133,18 +139,28 @@
133139
// In recent tests, background is always gray, not white like it should be.
134140

135141

136-
#define MAX_T 4
142+
// Alternative 5:
143+
144+
// This uses the 8-color foreground colors like alternative 2, but with a reset background color.
145+
// For people that prefer dark backgrounds or use terminals with color theming.
146+
147+
148+
// Alternative 6:
149+
150+
// This uses the RGB color setting like alternative 1, but with a black background.
137151

138-
static const char *t_background_white[MAX_T+1] = { "", "\e[48;2;255;255;255m", "\e[48;2;255;255;255m", "\e[5;47m", "\e[1;47m" };
152+
#define MAX_T 6
139153

140-
static const char *t_black[MAX_T+1] = { "", "\e[38;2;0;0;0m", "\e[0;30m" "\e[48;2;255;255;255m", "\e[0;30m" "\e[5;47m", "\e[0;30m" "\e[1;47m" };
141-
static const char *t_red[MAX_T+1] = { "", "\e[38;2;255;0;0m", "\e[1;31m" "\e[48;2;255;255;255m", "\e[1;31m" "\e[5;47m", "\e[1;31m" "\e[1;47m" };
142-
static const char *t_green[MAX_T+1] = { "", "\e[38;2;0;255;0m", "\e[1;32m" "\e[48;2;255;255;255m", "\e[1;32m" "\e[5;47m", "\e[1;32m" "\e[1;47m" };
143-
static const char *t_dark_green[MAX_T+1]= { "", "\e[38;2;0;192;0m", "\e[0;32m" "\e[48;2;255;255;255m", "\e[0;32m" "\e[5;47m", "\e[0;32m" "\e[1;47m" };
144-
static const char *t_yellow[MAX_T+1] = { "", "\e[38;2;255;255;0m", "\e[1;33m" "\e[48;2;255;255;255m", "\e[1;33m" "\e[5;47m", "\e[1;33m" "\e[1;47m" };
145-
static const char *t_blue[MAX_T+1] = { "", "\e[38;2;0;0;255m", "\e[1;34m" "\e[48;2;255;255;255m", "\e[1;34m" "\e[5;47m", "\e[1;34m" "\e[1;47m" };
146-
static const char *t_magenta[MAX_T+1] = { "", "\e[38;2;255;0;255m", "\e[1;35m" "\e[48;2;255;255;255m", "\e[1;35m" "\e[5;47m", "\e[1;35m" "\e[1;47m" };
147-
static const char *t_cyan[MAX_T+1] = { "", "\e[38;2;0;255;255m", "\e[0;36m" "\e[48;2;255;255;255m", "\e[0;36m" "\e[5;47m", "\e[0;36m" "\e[1;47m" };
154+
static const char *t_background_white[MAX_T+1] = { "", "\e[48;2;255;255;255m", "\e[48;2;255;255;255m", "\e[5;47m", "\e[1;47m", "\e[0;49m" , "\e[48;2;0;0;0m" };
155+
156+
static const char *t_black[MAX_T+1] = { "", "\e[38;2;0;0;0m", "\e[0;30m" "\e[48;2;255;255;255m", "\e[0;30m" "\e[5;47m", "\e[0;30m" "\e[1;47m", "\e[0;49m" "\e[0;39m", "\e[38;2;255;255;255m" };
157+
static const char *t_red[MAX_T+1] = { "", "\e[38;2;255;0;0m", "\e[1;31m" "\e[48;2;255;255;255m", "\e[1;31m" "\e[5;47m", "\e[1;31m" "\e[1;47m", "\e[0;49m" "\e[1;31m", "\e[38;2;255;0;0m"};
158+
static const char *t_green[MAX_T+1] = { "", "\e[38;2;0;255;0m", "\e[1;32m" "\e[48;2;255;255;255m", "\e[1;32m" "\e[5;47m", "\e[1;32m" "\e[1;47m", "\e[0;49m" "\e[1;32m", "\e[38;2;0;255;0m"};
159+
static const char *t_dark_green[MAX_T+1]= { "", "\e[38;2;0;192;0m", "\e[0;32m" "\e[48;2;255;255;255m", "\e[0;32m" "\e[5;47m", "\e[0;32m" "\e[1;47m", "\e[0;49m" "\e[0;32m", "\e[38;2;0;192;0m"};
160+
static const char *t_yellow[MAX_T+1] = { "", "\e[38;2;255;255;0m", "\e[1;33m" "\e[48;2;255;255;255m", "\e[1;33m" "\e[5;47m", "\e[1;33m" "\e[1;47m", "\e[0;49m" "\e[1;33m", "\e[38;2;255;255;0m"};
161+
static const char *t_blue[MAX_T+1] = { "", "\e[38;2;0;0;255m", "\e[1;34m" "\e[48;2;255;255;255m", "\e[1;34m" "\e[5;47m", "\e[1;34m" "\e[1;47m", "\e[0;49m" "\e[1;34m", "\e[38;2;0;0;255m"};
162+
static const char *t_magenta[MAX_T+1] = { "", "\e[38;2;255;0;255m", "\e[1;35m" "\e[48;2;255;255;255m", "\e[1;35m" "\e[5;47m", "\e[1;35m" "\e[1;47m", "\e[0;49m" "\e[1;35m", "\e[38;2;255;0;255m"};
163+
static const char *t_cyan[MAX_T+1] = { "", "\e[38;2;0;255;255m", "\e[0;36m" "\e[48;2;255;255;255m", "\e[0;36m" "\e[5;47m", "\e[0;36m" "\e[1;47m", "\e[0;49m" "\e[0;36m", "\e[38;2;0;255;255m"};
148164

149165

150166
/* Clear from cursor to end of screen. */
@@ -179,6 +195,7 @@ void text_color_init (int enable_color)
179195

180196
#if __WIN32__
181197

198+
g_enable_color = enable_color;
182199

183200
if (g_enable_color != 0) {
184201

@@ -189,6 +206,10 @@ void text_color_init (int enable_color)
189206
COORD coord;
190207
DWORD nwritten;
191208

209+
if (g_enable_color > 1) {
210+
attr = 0;
211+
}
212+
192213
h = GetStdHandle(STD_OUTPUT_HANDLE);
193214
if (h != NULL && h != INVALID_HANDLE_VALUE) {
194215

@@ -210,7 +231,7 @@ void text_color_init (int enable_color)
210231
for (t = 0; t <= MAX_T; t++) {
211232
text_color_init (t);
212233
printf ("-t %d", t);
213-
if (t) printf (" [white background] ");
234+
if (t < 5) printf (" [white background] ");
214235
printf ("\n");
215236
printf ("%sBlack ", t_black[t]);
216237
printf ("%sRed ", t_red[t]);
@@ -254,34 +275,41 @@ void text_color_set ( enum dw_color_e c )
254275
return;
255276
}
256277

278+
WORD info_fg = 0;
279+
WORD background = BACKGROUND_WHITE;
280+
if (g_enable_color > 1) {
281+
info_fg = FOREGROUND_WHITE;
282+
background = 0;
283+
}
284+
257285
switch (c) {
258286

259287
default:
260288
case DW_COLOR_INFO:
261-
attr = BACKGROUND_WHITE;
289+
attr = info_fg | background;
262290
break;
263291

264292
case DW_COLOR_ERROR:
265-
attr = FOREGROUND_RED | FOREGROUND_INTENSITY | BACKGROUND_WHITE;
293+
attr = FOREGROUND_RED | FOREGROUND_INTENSITY | background;
266294
break;
267295

268296
case DW_COLOR_REC:
269297
// Release 1.6. Dark green, same as for debug.
270298
// Bright green is too hard to see with white background,
271299
// attr = FOREGROUND_GREEN | FOREGROUND_INTENSITY | BACKGROUND_WHITE;
272-
attr = FOREGROUND_GREEN | BACKGROUND_WHITE;
300+
attr = FOREGROUND_GREEN | background;
273301
break;
274302

275303
case DW_COLOR_DECODED:
276-
attr = FOREGROUND_BLUE | FOREGROUND_INTENSITY | BACKGROUND_WHITE;
304+
attr = FOREGROUND_BLUE | FOREGROUND_INTENSITY | background;
277305
break;
278306

279307
case DW_COLOR_XMIT:
280-
attr = FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY | BACKGROUND_WHITE;
308+
attr = FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY | background;
281309
break;
282310

283311
case DW_COLOR_DEBUG:
284-
attr = FOREGROUND_GREEN | BACKGROUND_WHITE;
312+
attr = FOREGROUND_GREEN | background;
285313
break;
286314
}
287315

0 commit comments

Comments
 (0)