Anda perlu menampilkan kode warna ANSI. Perhatikan bahwa tidak semua terminal mendukung ini; jika urutan warna tidak didukung, sampah akan muncul.
Contoh:
cout << "\033[1;31mbold red text\033[0m\n";
Di sini, \033
adalah karakter ESC, ASCII 27. Diikuti dengan [
, lalu nol angka atau lebih yang dipisahkan oleh ;
, dan terakhir huruf m
. Angka-angka menjelaskan warna dan format untuk beralih dari titik itu dan seterusnya.
Kode untuk warna latar depan dan latar belakang adalah:
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
Selain itu, Anda dapat menggunakan ini:
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
Lihat tabel di Wikipedia untuk kode lain yang kurang didukung secara luas.
Untuk menentukan apakah terminal Anda mendukung rangkaian warna, baca nilai TERM
variabel lingkungan. Itu harus menentukan jenis terminal tertentu yang digunakan (mis. vt100
, gnome-terminal
, xterm
, screen
, ...). Kemudian cari di database terminfo; centang colors
kemampuan.
Sebelum Anda menampilkan warna apa pun yang Anda butuhkan, pastikan Anda berada di terminal:
[ -t 1 ] && echo 'Yes I am in a terminal' # isatty(3) call in C
Maka Anda perlu memeriksa kemampuan terminal jika mendukung warna
pada sistem dengan terminfo
(berbasis Linux) Anda dapat memperoleh jumlah warna yang didukung sebagai
Number_Of_colors_Supported=$(tput colors)
pada sistem dengan termcap
(berbasis BSD) Anda dapat memperoleh jumlah warna yang didukung sebagai
Number_Of_colors_Supported=$(tput Co)
Kemudian buat keputusan Anda:
[ ${Number_Of_colors_Supported} -ge 8 ] && {
echo 'You are fine and can print colors'
} || {
echo 'Terminal does not support color'
}
BTW, jangan gunakan pewarnaan seperti yang disarankan sebelumnya dengan karakter ESC.Gunakan kemampuan standar panggilan ke terminal yang akan memberi Anda warna BENAR yang didukung oleh terminal tertentu.
Berbasis BSDfg_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)"
Berbasis Linuxfg_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)"
Gunakan Sebagaiecho -e "${fg_red} Red ${fg_green} Bull ${reset}"
Dasar-dasar
Saya telah menulis kelas C++ yang dapat digunakan untuk mengatur warna latar depan dan latar belakang keluaran. Contoh program ini berfungsi sebagai contoh pencetakan This ->word<- is red.
dan memformatnya sehingga warna latar depan word
berwarna merah.
#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;
}
Sumber
#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";
}
};
}
Lanjutan
Anda mungkin ingin menambahkan fitur tambahan ke kelas. Misalnya, dimungkinkan untuk menambahkan warna magenta dan bahkan gaya seperti huruf tebal . Untuk melakukan ini, cukup masukan lagi ke Code
pencacahan. Ini referensi yang bagus.