Ruby的256色终端库?

12

有没有像 'Term::ANSIColor' 这样的宝石能够在256色的终端中使用? Perl 脚本 256colors2.pl 在我使用的终端 my terminal 中非常好用,我想在我的 Ruby 脚本中使用一些这些颜色,而不需要手动插入 ANSI 代码。

5个回答

12

这是一个从256colors2.pl脚本改编成Ruby的版本,并参考了这个指南。它定义了一个print_color(text, foreground, background)方法,可以轻松应用到您的项目中。它会以彩色打印字符串,然后将颜色重置为终端默认值。如果你愿意,跳过重置操作也很容易。

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

8
这个宝石应该能够满足你的需求:Rainbow

在Windows上似乎没有显示任何彩色内容。 - ashes999

3
这里有一个支持256种颜色的工具 -
Paint可以为您管理终端颜色和效果。它将像term-ansicolor或rainbow这样的gems的优点结合到一个易于使用且灵活的着色器中。
Paint链接:https://github.com/janlelis/paint

1

我对之前的答案进行了一些尝试,并得到了一些更有趣的东西可以使用。

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 

使用示例

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 }   

-3

2
那是他在问题中链接的那一个。 - sepp2k
为了澄清所提到的 gem 提供 8 种颜色 ANSI 支持。我正在寻找同样类型的东西,但希望有更多的颜色。 - brianegge

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接