代码之家  ›  专栏  ›  技术社区  ›  brianegge

256色Ruby终端库?

  •  12
  • brianegge  · 技术社区  · 15 年前

    有像这样的宝石吗? Term::ANSIColor “哪个适用于256色终端?Perl脚本 256colors2.pl 伟大的作品 my terminal 我想在我的Ruby脚本中使用其中的一些颜色,而不需要手动插入ansi代码。

    5 回复  |  直到 13 年前
        1
  •  11
  •   Martin DeMello    15 年前

    下面是256colors2.pl脚本对Ruby的改编,在Ruby的帮助下 this guide . 它定义了一个 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
    
        2
  •  8
  •   madh    15 年前

    这个宝石应该能满足你的需要: Rainbow

        3
  •  2
  •   thegreendroid    13 年前

    这是一款支持256色的-

    绘制为您管理终端颜色和效果。它结合了宝石的优势,如术语ansicolor或彩虹成一个简单易用和灵活的着色。

    Paint

        4
  •  1
  •   Peder    15 年前

    我在前面的答案中玩了一会儿,得到了一些我觉得更有趣的东西。

    国际清算银行

    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 }   
    
        5
  •  -3
  •   gaqzi    15 年前

    在rubyforge上有一种宝石叫做term::ansicolor…:)
    不知道有多好。

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