From patchwork Mon Feb 27 09:55:27 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Petr Vorel X-Patchwork-Id: 732743 X-Patchwork-Delegate: shemminger@vyatta.com Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3vWyH14Lknz9sN8 for ; Mon, 27 Feb 2017 21:14:05 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751908AbdB0KNx (ORCPT ); Mon, 27 Feb 2017 05:13:53 -0500 Received: from mx2.suse.de ([195.135.220.15]:46419 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751863AbdB0KNv (ORCPT ); Mon, 27 Feb 2017 05:13:51 -0500 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay1.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 7D45FABF9; Mon, 27 Feb 2017 09:56:13 +0000 (UTC) From: Petr Vorel To: netdev@vger.kernel.org Cc: Petr Vorel , Mathias Nyman , Yegor Yefremov Subject: [iproute PATCH v2 1/1] color: use "light" colors for dark background Date: Mon, 27 Feb 2017 10:55:27 +0100 Message-Id: <20170227095527.31134-1-pvorel@suse.cz> X-Mailer: git-send-email 2.11.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org 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 --- 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 #include +#include +#include #include #include #include @@ -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]);