Usando Ruby, como posso executar a coloração de texto em segundo plano e em primeiro plano para saída no terminal?
Lembro que, ao programar o Pascal, todos costumávamos escrever nossos próprios textcolor(…)
procedimentos para tornar nossos pequenos programas educacionais mais bonitos e de apresentação.
Como eu codificaria um equivalente ao Ruby?
ruby
colors
console-application
gmile
fonte
fonte
Respostas:
Colorize é a minha jóia favorita! :-)
Confira:
https://github.com/fazibear/colorize
Instalação:
Uso:
fonte
win32console
gema erequire 'win32console'
depoiscolorize
.win32console
jóia. github.com/luislavena/win32console/issues/…Combinando as respostas acima, você pode implementar algo que funciona como a gema colorida sem precisar de outra dependência.
fonte
Como métodos da classe String (somente unix):
e uso:
no meu console:
adicional:
remove caracteres de formatação
Nota
fonte
def bold; "\e[1m#{self}\e[22m" end
cmd.exe
,puts "\e[0"
não funciona para limpar o formato;puts "\e[0m"
deve ser utilizadoEu escrevi um pequeno método para testar os modos básicos de cores, com base nas respostas de Erik Skoglund e outros.
saída de exemplo:
fonte
Você pode usar seqüências de escape ANSI para fazer isso no console. Sei que isso funciona no Linux e OSX, não tenho certeza se o console do Windows (cmd) suporta ANSI.
Eu fiz isso em Java, mas as idéias são as mesmas.
fonte
Embora as outras respostas funcionem bem para a maioria das pessoas, a maneira "correta" de fazer isso deve ser mencionada. Como todos os tipos de terminais de texto não suportam essas seqüências, é possível consultar o banco de dados terminfo , uma abstração sobre os recursos de vários terminais de texto. Isso pode parecer principalmente de interesse histórico - terminais de software em uso hoje geralmente apoiar as seqüências ANSI - mas tem (pelo menos) um efeito prático: às vezes é útil para ser capaz de definir a variável de ambiente
TERM
paradumb
evitar todo esse estilo, por exemplo, ao salvar a saída em um arquivo de texto. Além disso, é bom fazer as coisas direito . :-)Você pode usar a gema ruby-terminfo . Ele precisa de alguma compilação C para instalar; Consegui instalá-lo no meu sistema Ubuntu 14.10 com:
Em seguida, você pode consultar o banco de dados como este (consulte a página do manual terminfo para obter uma lista de quais códigos estão disponíveis):
Aqui está uma pequena classe de wrapper que eu montei para tornar as coisas um pouco mais simples de usar.
Uso:
(edit) Finalmente, se você preferir não precisar de uma gema, pode confiar no
tput
programa, conforme descrito aqui - exemplo do Ruby:fonte
tput
. Não consigo nem articular quanta perda de cabelotput
me salvou.Eu fiz esse método que poderia ajudar. Não é grande coisa, mas funciona:
Veja como usá-lo:
As possíveis melhorias podem ser:
colors
ebgColors
estão sendo definidos cada vez que o método é chamado e eles não mudam.bold
,underline
,dim
, etc.Este método não funciona
p
, assim comop
uminspect
para seu argumento. Por exemplo:mostrará "\ e [0; 38mOlá Mundo \ e [0m"
Eu testei com
puts
,print
e a gema Logger, e funciona bem.Eu melhorei isso e fiz uma classe assim
colors
ebgColors
são constantes de classe ecolorize
é um método de classe:EDIT: Melhor estilo de código, constantes definidas em vez de variáveis de classe, usando símbolos em vez de strings, adicionando mais opções como negrito, itálico etc.
Você pode usá-lo fazendo:
fonte
Aqui está o que eu fiz para fazê-lo funcionar sem precisar de gemas:
Em seguida, apenas o texto entre aspas será colorido e você retornará ao seu programa agendado regularmente.
fonte
e[32mSOMETEXT
"\e(...)"
vez de"e\(...)"
Encontrei alguns:
http://github.com/ssoroka/ansi/tree/master
Exemplos:
http://flori.github.com/term-ansicolor/
Exemplos:
http://github.com/sickill/rainbow
Exemplo:
Se você estiver no Windows, pode ser necessário executar um "gem install win32console" para ativar o suporte a cores.
Além disso, o artigo Saída de script Ruby do console Colorizing é útil se você precisar criar sua própria gema. Explica como adicionar cores ANSI às seqüências de caracteres. Você pode usar esse conhecimento para envolvê-lo em alguma classe que estenda a string ou algo assim.
fonte
Isso pode ajudá-lo: Saída de rubi colorida
fonte
class String; def red; colorize(self, "\033[31m"); end; end
Achei as respostas acima úteis, no entanto, não se enquadravam na conta se eu quisesse colorir algo como a saída de log sem usar bibliotecas de terceiros. A seguir, resolvi o problema para mim:
Espero que ajude!
fonte