Muitas vezes queremos tornar nossas aplicações do terminal mais recheada de detalhes e cores são importantes.
É meio estranho ficar digitando toda hora vários caracteres somente para gerar cores, então é legal já ter uma lib
pra isso.
Nesse cpp::daily de hoje vou mostrar uma dica simples, mas que pode ser usada de serventia para diversas outras situações.
No terminal UNIX-Like as cores são separadas pelos números:
COR | NÚMERO |
---|---|
cinza | 30 |
vermelho | 31 |
verde | 32 |
amarelo | 33 |
azul | 34 |
roxo | 35 |
ciano | 36 |
branco | 37 |
Bem como também o estilo pode ser customizado, por exemplo:
0
normal1
negrito2
tom fraco3
itálico4
sublinhado5
6
NULL7
cor de fundo8
NULL9
Podemos declarar os tipos como constante até por questões de desempenho e usar palavrar em inglês que são mais curtas, exemplo:
const char * red = "31";
É legal também informar o estilo com uma única letra ao final do nome da cor para ficar simples a implementação, exemplo: redn
(red negrito), reds
(sublinhado) e assim por diantes, em resumo seria:
red = "\033[31;10m", // normal
redn = "\033[31;1m", // negrito
redf = "\033[31;2m", // fraco
redi = "\033[31;3m", // itálico
reds = "\033[31;4m", // sublinhado
redp = "\033[31;5m", // piscando
redb = "\033[31;7m", // background
redc = "\033[31;9m", // cancelado
Usar um namespace
em um arquivo colors.hpp
, curto para ocupar menos espaço, exemplo: hey
e criar um off
para desligar as cores:
std::cout << hey::red << "Olá, mundo!" << hey::off << '\n';
E sempre que quisermos usar basta incluir nossa lib
, exemplo:
#include <iostream>
#include "colors.hpp"
int main( int argc , char **argv ){
std::cout << hey::blue << "Terminal Root" << hey::off << '\n';
return 0;
}
Saída:
Para exemplo para todas as cores e estilos seria:
#include <iostream>
#include "colors.hpp"
int main( int argc , char **argv ){
std::cout << hey::gray << "Terminal Root" << hey::off << '\n';
std::cout << hey::redn << "Terminal Root" << hey::off << '\n';
std::cout << hey::greenf << "Terminal Root" << hey::off << '\n';
std::cout << hey::yellowi << "Terminal Root" << hey::off << '\n';
std::cout << hey::blues << "Terminal Root" << hey::off << '\n';
std::cout << hey::purplep << "Terminal Root" << hey::off << '\n';
std::cout << hey::cyanb << "Terminal Root" << hey::off << '\n';
std::cout << hey::whitec << "Terminal Root" << hey::off << '\n';
return 0;
}
Saída:
Lembrando que se você alterou o tema de cores do seu terminal, pode ser que haja algumas alterações na exibição das cores, no meu exemplo:
Resumindo o código final seria assim:
Usei
std::string
pois condiz mais com nosso caso.
Arquivo vim colors.hpp
#ifndef COLORS_H
#define COLORS_H
#include <iostream>
namespace hey {
const std::string gray = "\033[30;10m", // normal
grayn = "\033[30;1m", // negrito
grayf = "\033[30;2m", // fraco
grayi = "\033[30;3m", // itálico
grays = "\033[30;4m", // sublinhado
grayp = "\033[30;5m", // piscando
grayb = "\033[30;7m", // background
grayc = "\033[30;9m", // cancelado
red = "\033[31;10m", // normal
redn = "\033[31;1m", // negrito
redf = "\033[31;2m", // fraco
redi = "\033[31;3m", // itálico
reds = "\033[31;4m", // sublinhado
redp = "\033[31;5m", // piscando
redb = "\033[31;7m", // background
redc = "\033[31;9m", // cancelado
green = "\033[32;10m", // normal
greenn = "\033[32;1m", // negrito
greenf = "\033[32;2m", // fraco
greeni = "\033[32;3m", // itálico
greens = "\033[32;4m", // sublinhado
greenp = "\033[32;5m", // piscando
greenb = "\033[32;7m", // background
greenc = "\033[32;9m", // cancelado
yellow = "\033[33;10m", // normal
yellown = "\033[33;1m", // negrito
yellowf = "\033[33;2m", // fraco
yellowi = "\033[33;3m", // itálico
yellows = "\033[33;4m", // sublinhado
yellowp = "\033[33;5m", // piscando
yellowb = "\033[33;7m", // background
yellowc = "\033[33;9m", // cancelado
blue = "\033[34;10m", // normal
bluen = "\033[34;1m", // negrito
bluef = "\033[34;2m", // fraco
bluei = "\033[34;3m", // itálico
blues = "\033[34;4m", // sublinhado
bluep = "\033[34;5m", // piscando
blueb = "\033[34;7m", // background
bluec = "\033[34;9m", // cancelado
purple = "\033[35;10m", // normal
purplen = "\033[35;1m", // negrito
purplef = "\033[35;2m", // fraco
purplei = "\033[35;3m", // itálico
purples = "\033[35;4m", // sublinhado
purplep = "\033[35;5m", // piscando
purpleb = "\033[35;7m", // background
purplec = "\033[35;9m", // cancelado
cyan = "\033[36;10m", // normal
cyann = "\033[36;1m", // negrito
cyanf = "\033[36;2m", // fraco
cyani = "\033[36;3m", // itálico
cyans = "\033[36;4m", // sublinhado
cyanp = "\033[36;5m", // piscando
cyanb = "\033[36;7m", // background
cyanc = "\033[36;9m", // cancelado
white = "\033[38;10m", // normal
whiten = "\033[38;1m", // negrito
whitef = "\033[38;2m", // fraco
whitei = "\033[38;3m", // itálico
whites = "\033[38;4m", // sublinhado
whitep = "\033[38;5m", // piscando
whiteb = "\033[38;7m", // background
whitec = "\033[38;9m", // cancelado
off = "\033[m"; // desliga
}
#endif
Lembrando que já existem bibliotecas que fazem isso, exemplos:
O código pode ser que esteja um pouco mais complicado, talvez para não parecer simples pra você, mas o resultado final é o mesmo!
Legal, né?!
Então se inscreva nos nossos Cursos de C++ Moderno . Você aprender criar:
Acesse o endereço: