2009-09-10 16 views

Trả lời

11

Dưới đây là một sự thích nghi của kịch bản 256colors2.pl ruby, với một số sự giúp đỡ từ this guide. Nó định nghĩa một phương thức print_color(text, foreground, background) nên dễ dàng áp dụng cho các dự án của bạn. Nó in chuỗi màu, và sau đó đặt lại màu cho thiết bị đầu cuối mặc định. Nên đủ dễ dàng để bỏ qua việc đặt lại nếu bạn muốn điều đó.

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 
-3

Có một viên ngọc được gọi là Thuật ngữ :: ANSIColor trên Rubyforge ... :)
Không biết nó tốt đến mức nào.

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

+2

Đó là mối liên kết của anh ấy trong câu hỏi của anh ấy. – sepp2k

+0

Để làm rõ rằng đá quý đã đề cập cung cấp hỗ trợ ANSI 8 màu. Tôi đang tìm kiếm một thứ tương tự, với nhiều màu sắc hơn. – brianegge

1

Tôi đã chơi xung quanh một chút với câu trả lời trước đó và có thứ gì đó mà tôi thấy thú vị hơn một chút để làm việc.

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 

VÍ DỤ SỬ DỤNG

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 } 
8

đá quý này nên xử lý những gì bạn cần: Rainbow

+0

Nó dường như không hiển thị bất cứ điều gì trong màu sắc trên Windows. – ashes999

2

Dưới đây là một hỗ trợ 256 màu sắc -

Sơn quản lý màu sắc thiết bị đầu cuối và hiệu ứng cho bạn. Nó kết hợp sức mạnh của đá quý như term-ansicolor hoặc cầu vồng vào một bộ chỉnh màu đơn giản để sử dụng và linh hoạt.

Paint