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.

Foi útil?

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.

Pinte

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.

http://rubyforge.org/projects/term-ansicolor/

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top