Sie müssen ANSI-Farbcodes ausgeben. Beachten Sie, dass dies nicht von allen Terminals unterstützt wird; Wenn Farbsequenzen nicht unterstützt werden, wird Müll angezeigt.
Beispiel:
cout << "\033[1;31mbold red text\033[0m\n";
Hier, \033
ist das ESC-Zeichen, ASCII 27. Es folgt [
, dann null oder mehr Zahlen, getrennt durch ;
, und schließlich der Buchstabe m
. Die Zahlen beschreiben die Farbe und das Format, zu denen ab diesem Zeitpunkt gewechselt werden soll.
Die Codes für Vorder- und Hintergrundfarben sind:
foreground background
black 30 40
red 31 41
green 32 42
yellow 33 43
blue 34 44
magenta 35 45
cyan 36 46
white 37 47
Zusätzlich können Sie diese verwenden:
reset 0 (everything back to normal)
bold/bright 1 (often a brighter shade of the same colour)
underline 4
inverse 7 (swap foreground and background colours)
bold/bright off 21
underline off 24
inverse off 27
Weitere, weniger weit verbreitete Codes finden Sie in der Tabelle auf Wikipedia.
Um festzustellen, ob Ihr Terminal Farbsequenzen unterstützt, lesen Sie den Wert von TERM
Umgebungsvariable. Es sollte den jeweils verwendeten Terminaltyp angeben (z. B. vt100
, gnome-terminal
, xterm
, screen
, ...). Schlagen Sie das dann in der terminfo-Datenbank nach; Überprüfen Sie die colors
Fähigkeit.
Bevor Sie eine Farbe ausgeben, stellen Sie sicher, dass Sie sich in einem Terminal befinden:
[ -t 1 ] && echo 'Yes I am in a terminal' # isatty(3) call in C
Dann müssen Sie die Terminalfähigkeit überprüfen, ob sie Farbe unterstützt
auf Systemen mit terminfo
(Linux-basiert) Sie können die Menge der unterstützten Farben als
Number_Of_colors_Supported=$(tput colors)
auf Systemen mit termcap
(BSD-basiert) Sie können die Menge der unterstützten Farben als
Number_Of_colors_Supported=$(tput Co)
Treffen Sie dann Ihre Entscheidung:
[ ${Number_Of_colors_Supported} -ge 8 ] && {
echo 'You are fine and can print colors'
} || {
echo 'Terminal does not support color'
}
Übrigens, verwenden Sie keine Farbgebung, wie sie zuvor mit ESC-Zeichen vorgeschlagen wurde. Verwenden Sie die Standardfunktion zum Aufrufen des Terminals, die Ihnen die KORREKTEN Farben zuweist, die dieses bestimmte Terminal unterstützt.
BSD-basiertfg_black="$(tput AF 0)"
fg_red="$(tput AF 1)"
fg_green="$(tput AF 2)"
fg_yellow="$(tput AF 3)"
fg_blue="$(tput AF 4)"
fg_magenta="$(tput AF 5)"
fg_cyan="$(tput AF 6)"
fg_white="$(tput AF 7)"
reset="$(tput me)"
Linux-basiertfg_black="$(tput setaf 0)"
fg_red="$(tput setaf 1)"
fg_green="$(tput setaf 2)"
fg_yellow="$(tput setaf 3)"
fg_blue="$(tput setaf 4)"
fg_magenta="$(tput setaf 5)"
fg_cyan="$(tput setaf 6)"
fg_white="$(tput setaf 7)"
reset="$(tput sgr0)"
Verwenden Sie Asecho -e "${fg_red} Red ${fg_green} Bull ${reset}"
Grundlagen
Ich habe eine C++-Klasse geschrieben, die verwendet werden kann, um die Vorder- und Hintergrundfarbe der Ausgabe festzulegen. Dieses Beispielprogramm dient als Beispiel für das Drucken von This ->word<- is red.
und so formatieren, dass die Vordergrundfarbe word
ist ist rot.
#include "colormod.h" // namespace Color
#include <iostream>
using namespace std;
int main() {
Color::Modifier red(Color::FG_RED);
Color::Modifier def(Color::FG_DEFAULT);
cout << "This ->" << red << "word" << def << "<- is red." << endl;
}
Quelle
#include <ostream>
namespace Color {
enum Code {
FG_RED = 31,
FG_GREEN = 32,
FG_BLUE = 34,
FG_DEFAULT = 39,
BG_RED = 41,
BG_GREEN = 42,
BG_BLUE = 44,
BG_DEFAULT = 49
};
class Modifier {
Code code;
public:
Modifier(Code pCode) : code(pCode) {}
friend std::ostream&
operator<<(std::ostream& os, const Modifier& mod) {
return os << "\033[" << mod.code << "m";
}
};
}
Erweitert
Möglicherweise möchten Sie der Klasse zusätzliche Funktionen hinzufügen. Es ist beispielsweise möglich, die Farbe Magenta und sogar Stile wie fett hinzuzufügen . Dazu genügt ein weiterer Eintrag unter Code
Aufzählung. Dies ist eine gute Referenz.