Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

256 color terminal library for Ruby?

Is there a gem like 'Term::ANSIColor' which works with 256 color terminals? The perl script 256colors2.pl works great in my terminal, and I'd like to use some of these colors in my ruby scripts without manually inserting the ANSI codes.

like image 933
brianegge Avatar asked Sep 10 '09 04:09

brianegge


3 Answers

Here's an adaptation of the 256colors2.pl script to ruby, with some help from this guide. It defines a print_color(text, foreground, background) method that should be easily applicable to your projects. It prints the string in colour, and then resets the colour to the terminal default. Should be easy enough to skip the reset if you'd prefer that.

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
like image 118
Martin DeMello Avatar answered Nov 16 '22 11:11

Martin DeMello


This gem should handle what you need: Rainbow

like image 8
madh Avatar answered Nov 16 '22 12:11

madh


Here's one that supports 256-colours -

Paint manages terminal colors and effects for you. It combines the strengths of gems like term-ansicolor or rainbow into a simple to use and flexible colorizer.

Paint

like image 3
thegreendroid Avatar answered Nov 16 '22 12:11

thegreendroid