util: move the ansi color escape sequences into a separate header

Make the default set an enum with an array to access the codes. Additionally
provide a true RBG escape sequence, all modern terminals support that anyway.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
Peter Hutterer 2020-08-20 14:09:49 +10:00
parent 91c4bc2a93
commit b00fe9ed99
3 changed files with 76 additions and 15 deletions

View file

@ -24,6 +24,7 @@ lib_util = static_library('util',
'src/util-logger.h',
'src/util-logger.c',
'src/util-macros.h',
'src/util-color.h',
'src/util-object.h',
'src/util-sources.h',
'src/util-sources.c',

75
src/util-color.h Normal file
View file

@ -0,0 +1,75 @@
/*
* Copyright © 2020 Red Hat, Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice (including the next
* paragraph) shall be included in all copies or substantial portions of the
* Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*/
/* ANSI color codes for terminal colors */
#pragma once
#include "config.h"
#define COLOR_SET \
X(RESET, "\x1B[0m") \
X(BLACK, "\x1B[0;30m") \
X(RED, "\x1B[0;31m") \
X(GREEN, "\x1B[0;32m") \
X(YELLOW, "\x1B[0;33m") \
X(BLUE, "\x1B[0;34m") \
X(MAGENTA, "\x1B[0;35m") \
X(CYAN, "\x1B[0;36m") \
X(WHITE, "\x1B[0;37m") \
X(BRIGHT_RED, "\x1B[0;31;1m") \
X(BRIGHT_GREEN, "\x1B[0;32;1m") \
X(BRIGHT_YELLOW, "\x1B[0;33;1m") \
X(BRIGHT_BLUE, "\x1B[0;34;1m") \
X(BRIGHT_MAGENTA, "\x1B[0;35;1m") \
X(BRIGHT_CYAN, "\x1B[0;36;1m") \
X(BRIGHT_WHITE, "\x1B[0;37;1m") \
X(HIGHLIGHT, "\x1B[0;1;39m") \
/**
* Expands into
* enum Color {
* RESET,
* RED,
* ...
* }
*/
enum AnsiColor {
#define X(name, code) name,
COLOR_SET
#undef X
};
/**
* Expands into an array usable via: colorcode[RED], etc.
*/
static const char * const ansi_colorcode[]
__attribute__((unused)) = {
#define X(name, code) code,
COLOR_SET
#undef X
};
/* ANSI escape sequence for true RBB colors */
#define ANSI_FG_RGB(r, g, b) "\x1B[38;2;" #r ";" #g ";" #b "m"
#define ANSI_BG_RGB(r, g, b) "\x1B[48;2;" #r ";" #g ";" #b "m"

View file

@ -36,21 +36,6 @@
#define min(a, b) (((a) < (b)) ? (a) : (b))
#define max(a, b) (((a) > (b)) ? (a) : (b))
#define ANSI_HIGHLIGHT "\x1B[0;1;39m"
#define ANSI_RED "\x1B[0;31m"
#define ANSI_GREEN "\x1B[0;32m"
#define ANSI_YELLOW "\x1B[0;33m"
#define ANSI_BLUE "\x1B[0;34m"
#define ANSI_MAGENTA "\x1B[0;35m"
#define ANSI_CYAN "\x1B[0;36m"
#define ANSI_BRIGHT_RED "\x1B[0;31;1m"
#define ANSI_BRIGHT_GREEN "\x1B[0;32;1m"
#define ANSI_BRIGHT_YELLOW "\x1B[0;33;1m"
#define ANSI_BRIGHT_BLUE "\x1B[0;34;1m"
#define ANSI_BRIGHT_MAGENTA "\x1B[0;35;1m"
#define ANSI_BRIGHT_CYAN "\x1B[0;36;1m"
#define ANSI_NORMAL "\x1B[0m"
#define ANSI_UP "\x1B[%dA"
#define ANSI_DOWN "\x1B[%dB"
#define ANSI_RIGHT "\x1B[%dC"