256 biblioteca terminal de cor para Ruby?
Pergunta
Existe uma jóia como ' Term :: ANSIColor ', que trabalha com 256 terminais de cor ? O script perl 256colors2.pl funciona muito bem em minha terminal, e eu gostaria de usar alguns dessas cores em meus scripts ruby ??sem inserir manualmente os códigos ANSI.
Solução
Aqui está uma adaptação do roteiro 256colors2.pl de rubi, com alguma ajuda de este guia . Ele define um método print_color(text, foreground, background)
que deve ser facilmente aplicável a seus projetos. Ela imprime a corda na cor, e em seguida, redefine a cor para o padrão terminal. Deve ser fácil o suficiente para ignorar o reset se você preferir isso.
def rgb(red, green, blue)
16 + (red * 36) + (green * 6) + blue
end
def gray(g)
232 + g
end
def set_color(fg, bg)
print "\x1b[38;5;#{fg}m" if fg
print "\x1b[48;5;#{bg}m" if bg
end
def reset_color
print "\x1b[0m"
end
def print_color(txt, fg, bg)
set_color(fg, bg)
print txt
reset_color
end
# convenience method
def rgb_cube
for green in 0..5 do
for red in 0..5 do
for blue in 0..5 do
yield [red, green, blue]
end
print " "
end
puts
end
end
# rgb list on black bg
rgb_cube do |red, green, blue|
print_color("%d%d%d " % [red, green, blue], rgb(red, green, blue), nil)
end
puts
# rgb list on white bg
rgb_cube do |red, green, blue|
print_color("%d%d%d " % [red, green, blue], rgb(red, green, blue), 15)
end
puts
# system palette:
print "System colors:\n";
(0..7).each do |color|
print_color(" ", nil, color)
end
puts
(8..15).each do |color|
print_color(" ", nil, color)
end
puts
puts
# color cube
print "Color cube, 6x6x6:\n"
rgb_cube do |red, green, blue|
print_color(" ", nil, rgb(red, green, blue))
end
puts
# grayscale ramp
print "Grayscale ramp:\n"
for g in (0..23) do
print_color(" ", nil, gray(g))
end
puts
puts
Outras dicas
Esta jóia deve lidar com o que você precisa: arco-íris
Aqui está um que suporta 256 cores -
Paint administra cores terminais e efeitos para você. Ele combina os pontos fortes de jóias como prazo-ansicolor ou arco-íris em um simples de usar e colorizer flexível.
Eu brinquei um pouco com a resposta mais cedo e tem alguma coisa que eu achei um pouco mais divertido para trabalhar.
LIB
def gray(g); 232 + g; end
def rgb(red, green, blue); 16 + (red * 36) + (green * 6) + blue; end
def green; rgb(0,5,0); end
def red; rgb(5,0,0); end
def c( fg, bg = nil ); "#{fg ? "\x1b[38;5;#{fg}m" : ''}#{bg ? "\x1b[48;5;#{bg}m" : ''}" end
def ec; "\x1b[0m"; end
Exemplo de Uso
BASE_DIR = File.expand_path( File.join( File.dirname(__FILE__), '..' ) )
def status( sDaemon )
b = File.exist?( File.join( BASE_DIR, 'pids', "#{sDaemon}.pid" ) )
puts c( b ? green : red ) + sDaemon + ( b ? ' RUNNING' : ' STOPPED' ) + ec
end
%w{ backuper emailSpamChecker indexer log2email orderManager sitemapProducer }.each { |s| status s }
Não é uma jóia chamado Term :: ANSIColor em Rubyforge ... :)
Não faço ideia como é bom embora.