Colorindo a saída do console em Ruby
É uma situação que as seqüências escapes ANSI podem ajudar. Suportado nas maioria dos terminais, incluindo VT100 (o BTW, console da família de Windows NT não o suporta, mas existe um contorno que será explicado mais a frente).
Para o começar, vamos examinar a estrutura da seqüência de escape ANSI. A seqüência dever sempre começar com o símbolo ESC (código 27 da tabela ASCII) seguindo pela abertura de um ([) colchete. Há um ou mais número separado por (;) ponto-e-vírgula com uma letra na extremidade.
Não descreverei todos os códigos possíveis, qualquer um pode encontrá-los no Wikipédia ou Google. A seqüência com a letra ‘m’ na extremidade é usada mudar a cor do primeiro plano e a cor do fundo. Em geral é parecido com: ESC [31m, onde o 31 define a cor de primeiro plano (texto) como vermelha.
Segue abaixo uma tabela com códigos suportados na maioria dos terminais:
Código | Efeito |
0 | desativa todos os atributos |
1 | ativa o modo brilho |
4 | ativa o modo sublinhado |
5 | ativa o modo pisca-pisca |
7 | troca a cor do primeiro plano pela cor de fundo |
8 | oculta o texto (cor do texto igual ao do fundo) |
30 | texto na cor preta |
31 | texto na cor vermelha |
32 | texto na cor verde |
33 | texto na cor amarela |
34 | texto na cor azul |
35 | texto na cor magenta |
36 | texto na cor ciano |
37 | texto na cor branca |
39 | texto na cor padrão |
40 | fundo na cor preta |
41 | fundo na cor vermelha |
42 | fundo na cor verde |
43 | fundo na cor amarela |
44 | fundo na cor azul |
45 | fundo na cor magenta |
46 | fundo na cor ciano |
47 | fundo na cor branca |
49 | fundo na cor padrão |
Como você pode observar na tabela, podemos definir a cor do texto e a cor de fundo separadamente ou combiná-las em uma única seqüência, por exemplo: ESC[1;33;44m - amarelo brilhante com fundo azul.
ATENÇÃO: Não esqueça de desativar todos os atributos antes de finalizar, senão todos os textos seguintes serão exibidos com os atributos que você acabou de definir, a não ser que essa seja sua intenção.
Chega de teoria, vamos a parte prática:
Utilizando o IRB vamos executar o seguinte trecho de código
#Imprimindo uma mensagem de sucesso em verde puts "Importando categorias [ \e[32mOK\e[0m ]" # Impriminido uma mensagem de falha em vermelho puts "Importando tags [\e[31mFALHOU\e[0m]" |
Como resultado você obterá:
Você poderá criar alguns helpers que facilitarão os trabalhos futuros, como exemplo:
def colorize(text, color_code) "#{color_code}#{text}\e[0m" end def red(text); colorize(text, "\e[31m"); end def green(text); colorize(text, "\e[32m"); end # Imprimindo uma mensagem de sucesso em verde puts "Importando categorias [ #{green('OK')} ]" # Impriminido uma mensagem de falha em vermelho puts "Importando tags [#{red('FALHOU')}]" |
Recomendo você utilizar desta forma para ser DRY, claro que talvez seja possível melhorar mais ainda, mas este não é objetivo deste post.
Como dito acima, o Windows não suporta seqüências escapes ANSI, mas você pode resolver isso lendo o artigo Command Interpreter Ansi Support, ou com as próprias facilidade do Ruby:
Primeiro instale o win32console:
gem install win32console |
Agora adicione o código abaixo no inicio de seu script:
begin require 'Win32/Console/ANSI' if PLATFORM =~ /win32/ rescue LoadError raise 'Voce deve instalar o gem win32console para utilizar cores no Windows' end |
Pronto, a saída de seu script será colorida tanto no Windows como no Unix.
Para finalizar, veja a tabela completa com diferentes códigos, a qual você poderá usar em seus scripts:
A tabela acima pode ser obtida através do script:
#!/usr/bin/ruby [0, 1, 4, 5, 7].each do |attr| puts '----------------------------------------------------------------' puts "ESC[#{attr};Texto;Fundo" 30.upto(37) do |fg| 40.upto(47) do |bg| print "\033[#{attr};#{fg};#{bg}m #{fg};#{bg} " end puts "\033[0m" end end |
Fonte: kpumuk.info
- dezembro 31, 2007
- por Anderson
- 3 comentários
3 Comentários para “Colorindo a saída do console em Ruby”
Deixe uma resposta