* [iproute PATCH v2 1/1] color: use "light" colors for dark background
@ 2017-02-27 9:55 Petr Vorel
2017-03-01 18:01 ` Stephen Hemminger
0 siblings, 1 reply; 2+ messages in thread
From: Petr Vorel @ 2017-02-27 9:55 UTC (permalink / raw)
To: netdev; +Cc: Petr Vorel, Mathias Nyman, Yegor Yefremov
COLORFGBG environment variable is used to detect dark background.
Idea and a bit of code is borrowed from Vim, thanks.
Signed-off-by: Petr Vorel <pvorel@suse.cz>
---
Changes v1->V2:
* Rename function and enum values
* Add missing bold white enum + it's code.
---
include/color.h | 1 +
lib/color.c | 45 ++++++++++++++++++++++++++++++++++++++++++++-
2 files changed, 45 insertions(+), 1 deletion(-)
diff --git a/include/color.h b/include/color.h
index c1c29831..ba0b237e 100644
--- a/include/color.h
+++ b/include/color.h
@@ -12,6 +12,7 @@ enum color_attr {
};
void enable_color(void);
+void set_color_palette(void);
int color_fprintf(FILE *fp, enum color_attr attr, const char *fmt, ...);
enum color_attr ifa_family_color(__u8 ifa_family);
enum color_attr oper_state_color(__u8 state);
diff --git a/lib/color.c b/lib/color.c
index 95596be2..c048c76e 100644
--- a/lib/color.c
+++ b/lib/color.c
@@ -1,5 +1,7 @@
#include <stdio.h>
#include <stdarg.h>
+#include <stdlib.h>
+#include <string.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <linux/if.h>
@@ -14,6 +16,13 @@ enum color {
C_MAGENTA,
C_CYAN,
C_WHITE,
+ C_BOLD_RED,
+ C_BOLD_GREEN,
+ C_BOLD_YELLOW,
+ C_BOLD_BLUE,
+ C_BOLD_MAGENTA,
+ C_BOLD_CYAN,
+ C_BOLD_WHITE,
C_CLEAR
};
@@ -25,25 +34,59 @@ static const char * const color_codes[] = {
"\e[35m",
"\e[36m",
"\e[37m",
+ "\e[1;31m",
+ "\e[1;32m",
+ "\e[1;33m",
+ "\e[1;34m",
+ "\e[1;35m",
+ "\e[1;36m",
+ "\e[1;37m",
"\e[0m",
NULL,
};
static enum color attr_colors[] = {
+ /* light background */
C_CYAN,
C_YELLOW,
C_MAGENTA,
C_BLUE,
C_GREEN,
C_RED,
+ C_CLEAR,
+
+ /* dark background */
+ C_BOLD_CYAN,
+ C_BOLD_YELLOW,
+ C_BOLD_MAGENTA,
+ C_BOLD_BLUE,
+ C_BOLD_GREEN,
+ C_BOLD_RED,
C_CLEAR
};
+static int is_dark_bg;
static int color_is_enabled;
void enable_color(void)
{
color_is_enabled = 1;
+ set_color_palette();
+}
+
+void set_color_palette(void)
+{
+ char *p = getenv("COLORFGBG");
+
+ /*
+ * COLORFGBG environment variable usually contains either two or three
+ * values separated by semicolons; we want the last value in either case.
+ * If this value is 0-6 or 8, background is dark.
+ */
+ if (p && (p = (char *)strrchr(p, ';')) != NULL
+ && ((p[1] >= '0' && p[1] <= '6') || p[1] == '8')
+ && p[2] == '\0')
+ is_dark_bg = 1;
}
int color_fprintf(FILE *fp, enum color_attr attr, const char *fmt, ...)
@@ -58,7 +101,7 @@ int color_fprintf(FILE *fp, enum color_attr attr, const char *fmt, ...)
goto end;
}
- ret += fprintf(fp, "%s", color_codes[attr_colors[attr]]);
+ ret += fprintf(fp, "%s", color_codes[attr_colors[is_dark_bg ? attr + 7 : attr]]);
ret += vfprintf(fp, fmt, args);
ret += fprintf(fp, "%s", color_codes[C_CLEAR]);
--
2.11.0
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [iproute PATCH v2 1/1] color: use "light" colors for dark background
2017-02-27 9:55 [iproute PATCH v2 1/1] color: use "light" colors for dark background Petr Vorel
@ 2017-03-01 18:01 ` Stephen Hemminger
0 siblings, 0 replies; 2+ messages in thread
From: Stephen Hemminger @ 2017-03-01 18:01 UTC (permalink / raw)
To: Petr Vorel; +Cc: netdev, Mathias Nyman, Yegor Yefremov
On Mon, 27 Feb 2017 10:55:27 +0100
Petr Vorel <pvorel@suse.cz> wrote:
> +void set_color_palette(void)
> +{
> + char *p = getenv("COLORFGBG");
> +
> + /*
> + * COLORFGBG environment variable usually contains either two or three
> + * values separated by semicolons; we want the last value in either case.
> + * If this value is 0-6 or 8, background is dark.
> + */
> + if (p && (p = (char *)strrchr(p, ';')) != NULL
Cast here is unnecessary. strrchr is defined as:
char *strrchr(const char *s, int c);
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2017-03-01 18:56 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-02-27 9:55 [iproute PATCH v2 1/1] color: use "light" colors for dark background Petr Vorel
2017-03-01 18:01 ` Stephen Hemminger
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).