2008-09-16 50 views
12

Tôi có chương trình dòng lệnh, kết quả này sẽ xuất nhật ký vào màn hình.Làm cách nào để thay đổi màu văn bản trong lời nhắc lệnh của cửa sổ

Tôi muốn các dòng lỗi hiển thị màu đỏ. Có một số mã ký tự đặc biệt mà tôi có thể xuất ra để chuyển đổi màu văn bản sang màu đỏ, sau đó chuyển nó về màu trắng?

Tôi đang sử dụng ruby ​​nhưng tôi cho rằng điều này sẽ giống nhau ở bất kỳ ngôn ngữ nào khác.

Cái gì như:

red = "\0123" # character code 
white = "\0223" 

print "#{red} ERROR: IT BROKE #{white}" 
print "other stuff" 

Trả lời

6

Bạn cần truy cập vào [Win32 bảng điều khiển API] (http://msdn.microsoft.com/en-us/library/ms682073(VS.85%29.aspx). Thật không may, tôi không biết làm thế nào bạn muốn làm điều đó từ ruby. Trong Perl, tôi muốn sử dụng các mô-đun Win32::Console. Windows giao diện điều khiển không đáp ứng với mã thoát ANSI.

Theo article on colorizing Ruby output rằng artur02 đề cập, bạn cần phải cài đặt & tải ngọc win32console.

0

Theo như tôi biết nó không phải là có thể với một dòng lệnh, nó chỉ là một màu ...

0
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace Console_Test 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Console.ForegroundColor = ConsoleColor.DarkRed; 
      Console.WriteLine("Hello World"); 
      Console.ReadKey(); 
     } 
    } 
} 

Bạn có thể thay đổi màu sắc bằng cách sử dụng chương trình C# đơn giản, http://powerof2games.com/node/31 mô tả cách bạn có thể kết nối đầu ra bàn điều khiển để đạt được hiệu quả.

0

Bạn muốn ANSI escape codes.

+2

Mã thoát ANSI không có sẵn trên Windows Command Prompt, nguyên bản. –

0

Rất nhiều tác phẩm ANSI Color Codes cũ. Mã cho tiền cảnh màu đỏ giống như Escape- [31m. Escape là ký tự 27, vì vậy đó là "\ 033 [31m" hoặc "\ x1B [31m", tùy thuộc vào sơ đồ thoát của bạn.

[39m là mã để trở về màu mặc định.

Cũng có thể chỉ định nhiều mã cùng một lúc để đặt màu nền trước và màu nền đồng thời.

Bạn có thể phải tải ANSI.sys, xem this page.

3

Bạn có thể đọc ở đây một bài viết tốt và minh họa: http://kpumuk.info/ruby-on-rails/colorizing-console-ruby-script-output/

Tôi nghĩ rằng thiết lập màu sắc giao diện điều khiển văn bản là khá ngôn ngữ cụ thể. Dưới đây là một ví dụ trong C# từ MSDN:

for (int x = 0; x < colorNames.Length; x++) 
{ 
    Console.Write("{0,2}: ", x); 
    Console.BackgroundColor = ConsoleColor.Black; 
    Console.ForegroundColor = (ConsoleColor)Enum.Parse(typeof(ConsoleColor), colorNames[x]); 
    Console.Write("This is foreground color {0}.", colorNames[x]); 
    Console.ResetColor(); 
    Console.WriteLine(); 
} 

Console.ForegroundColor là tài sản để thiết lập màu chữ.

0

Đặc tả C/C++ chuẩn để xuất ra dòng lệnh không chỉ định bất kỳ khả năng nào để thay đổi màu của cửa sổ bảng điều khiển. Điều đó nói rằng, có rất nhiều chức năng trong Win32 để làm một điều như vậy.

Cách dễ nhất để thay đổi màu của bảng điều khiển Win32 là thông qua lệnh hệ thống trong iostream.h. Hàm này gọi một lệnh DOS. Để thay đổi màu sắc, chúng ta sẽ sử dụng nó để gọi lệnh màu. Ví dụ: system("Color F1"); sẽ làm cho bảng điều khiển màu xanh lam trên nền trắng.

Màu sắc DOS

Màu sắc có sẵn để sử dụng với lệnh là mười sáu màu DOS được biểu thị bằng chữ số hex. Đầu tiên là nền và thứ hai là tiền cảnh.

0 = Black 8 = Gray 
1 = Blue  9 = Light Blue 
2 = Green A = Light Green 
3 = Aqua  B = Light Aqua 
4 = Red  C = Light Red 
5 = Purple D = Light Purple 
6 = Yellow E = Light Yellow 
7 = White F = Bright White 

Chỉ cần chút ít màu này làm cho chương trình điều khiển dễ nhìn hơn. Tuy nhiên, lệnh Color sẽ thay đổi màu của toàn bộ giao diện điều khiển. Để kiểm soát các ô riêng lẻ, chúng ta cần sử dụng các hàm từ windows.h.

Đừng làm điều đó bạn cần phải sử dụng các chức năng SetConsoleAttribute

http://msdn.microsoft.com/en-us/library/ms686047.aspx

2

Bạn có thể sử dụng trình tự thoát ANSI, nhưng điều đó sẽ không làm những gì bạn muốn trong các phiên bản Windows hiện đại. Wikipedia có một bài viết rất nhiều thông tin:

http://en.wikipedia.org/wiki/ANSI_escape_code

Vì vậy, câu trả lời cho câu hỏi ban đầu của bạn là gần như chắc chắn "không." Tuy nhiên, bạn có thể thay đổi màu nền trước mà không cần viết chuỗi thoát, ví dụ bằng cách gọi hàm Win32 API. Tôi không biết làm thế nào để làm việc này trong Ruby ra khỏi đỉnh đầu của tôi, nhưng người khác dường như đã quản lý:

http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/241925

Tôi tưởng tượng bạn muốn sử dụng 4 cho đỏ sẫm hoặc 12 cho màu đỏ tươi và 7 để khôi phục màu mặc định.

Hy vọng điều này sẽ hữu ích!

2

trên ANSI mã thoát:

32-bit character-mode (hệ thống phụ: giao diện điều khiển) các ứng dụng Windows không viết được ANSI chuỗi escape ra cửa sổ Console

Họ phải giải thích các hành động mã thoát và gọi Console API bản địa thay vì

Cảm ơn microsoft :-(

2

color [background][foreground]

đâu màu sắc được quy định như sau:

0 = Black 8 = Gray 
1 = Blue  9 = Light Blue 
2 = Green A = Light Green 
3 = Aqua  B = Light Aqua 
4 = Red  C = Light Red 
5 = Purple D = Light Purple 
6 = Yellow E = Light Yellow 
7 = White F = Bright White 

Ví dụ, để thay đổi nền sang màu xanh và foreground sang màu xám, bạn sẽ gõ:

color 18

+0

để sử dụng trong cygwin: alias color = 'cmd/c color' – zzapper

0

Tôi đã sử dụng chương trình phần mềm miễn phí của chương trình đuôi cửa sổ được gọi là baretail (google it) cho các độ tuổi cho phép bạn thực hiện một phiên bản cửa sổ được bổ trợ của lệnh unix tail. Nó cho phép bạn tô màu các dòng phụ thuộc vào bất kỳ từ khóa nào bạn xác định. Những gì tốt đẹp về nó như là một giải pháp là nó không gắn liền với một ngôn ngữ cụ thể hoặc thiết lập, vv, bạn chỉ cần xác định màu sắc của bạn và của nó trên như lừa kong. Trong 10 người trợ giúp phần mềm miễn phí hàng đầu của tôi!

24

Trên cửa sổ, bạn có thể làm điều đó một cách dễ dàng theo ba cách:

require 'win32console' 
puts "\e[31mHello, World!\e[0m" 

Bây giờ bạn có thể mở rộng chuỗi với một phương pháp nhỏ gọi là red

require 'win32console' 
class String 
    def red 
    "\e[31m#{self}\e[0m" 
    end 
end 

puts "Hello, World!".red 

Bạn cũng có thể kéo dài chuỗi như thế này để có được nhiều màu sắc hơn:

require 'win32console' 

class String 
    { :reset   => 0, 
    :bold   => 1, 
    :dark   => 2, 
    :underline  => 4, 
    :blink   => 5, 
    :negative  => 7, 
    :black   => 30, 
    :red   => 31, 
    :green   => 32, 
    :yellow   => 33, 
    :blue   => 34, 
    :magenta  => 35, 
    :cyan   => 36, 
    :white   => 37, 
    }.each do |key, value| 
    define_method key do 
     "\e[#{value}m" + self + "\e[0m" 
    end 
    end 
end 

puts "Hello, World!".red 

Hoặc, nếu bạn có thể cài đặt đá quý:

gem install term-ansicolor 

Và trong chương trình của bạn:

require 'win32console' 
require 'term/ansicolor' 

class String 
    include Term::ANSIColor 
end 

puts "Hello, World!".red 
puts "Hello, World!".blue 
puts "Annoy me!".blink.yellow.bold 

Xin vui lòng xem các tài liệu cho hạn/ansicolor để biết thêm thông tin và sử dụng tốt.

+1

Hoặc, bạn có thể sử dụng gem 'colorize'. * CHÚ Ý * trên cửa sổ bạn cần phải tự yêu cầu 'win32console' khi sử dụng nó, vì 'colorize' chỉ kiểm tra' nếu RUBY_PLATFORM = ~/win32/'và trong một số trường hợp' RUBY_PLATFORM' trả về 'i386-mingw32'. –

+0

Tôi nghĩ bạn đang thiếu một 'kết thúc' –

2

Tôi đã tạo ra một đá quý đa nền tảng nhỏ xử lý việc này liên tục chạy trên Windows hoặc các hệ thống POSIX, dưới cả MRI và JRuby.

Nó không có phụ thuộc và sử dụng mã ANSI trên hệ thống POSIX và FFI (JRuby) hoặc Fiddler (MRI) cho Windows.

Để sử dụng nó, chỉ cần:

gem install color-console 

ColorConsole cung cấp phương pháp cho xuất ra dòng văn bản trong màu sắc khác nhau, sử dụng các chức năng Console.Write và Console.puts.

require 'color-console' 

Console.puts "Some text"     # Outputs text using the current console colours 
Console.puts "Some other text", :red  # Outputs red text with the current background 
Console.puts "Yet more text", nil, :blue # Outputs text using the current foreground and a blue background 

# The following lines output BlueRedGreen on a single line, each word in the appropriate color 
Console.write "Blue ", :blue 
Console.write "Red ", :red 
Console.write "Green", :green 

Truy cập trang chủ dự án tại https://github.com/agardiner/color-console để biết thêm chi tiết.

Các vấn đề liên quan