【问题标题】:256 color terminal library for Ruby?Ruby 的 256 色终端库?
【发布时间】:2010-11-27 01:31:48
【问题描述】:

有没有像“Term::ANSIColor”这样的宝石,它适用于 256 色终端? perl 脚本 256colors2.plmy terminal 中效果很好,我想在我的 ruby​​ 脚本中使用其中一些颜色,而无需手动插入 ANSI 代码。

【问题讨论】:

    标签: ruby ansi gem xterm 256color


    【解决方案1】:

    这是 256colors2.pl 脚本对 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】:

      这个 gem 应该能满足你的需求:Rainbow

      【讨论】:

      • 在 Windows 上似乎没有任何颜色显示。
      【解决方案3】:

      这是一个支持 256 色的 -

      Paint 为您管理终端颜色和效果。它将术语 ansicolor 或 Rainbow 等宝石的优点结合到一个简单易用且灵活的着色器中。

      Paint

      【讨论】:

        【解决方案4】:

        我对较早的答案进行了一些尝试,并得到了一些我发现使用起来更有趣的东西。

        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】:

          Rubyforge 上有一个名为 Term::ANSIColor 的 gem...:)
          不知道它有多好。

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

          【讨论】:

          • 那是他在他的问题中链接的那个。
          • 澄清提到的 gem 提供 8 色 ANSI 支持。我正在寻找同样的东西,有更多的颜色。
          猜你喜欢
          • 2014-02-25
          • 2010-11-09
          • 1970-01-01
          • 2021-03-30
          • 2021-11-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多