ログを画面に出力するコマンドラインプログラムがあります。
エラー行を赤で表示したい。テキストの色を赤に切り替えてから白に戻すために出力できる特殊文字コードはありますか?
私はルビーを使用していますが、これは他の言語でも同じだと思います。
何かのようなもの:
red = "\0123" # character code
white = "\0223"
print "#{red} ERROR: IT BROKE #{white}"
print "other stuff"
ログを画面に出力するコマンドラインプログラムがあります。
エラー行を赤で表示したい。テキストの色を赤に切り替えてから白に戻すために出力できる特殊文字コードはありますか?
私はルビーを使用していますが、これは他の言語でも同じだと思います。
何かのようなもの:
red = "\0123" # character code
white = "\0223"
print "#{red} ERROR: IT BROKE #{white}"
print "other stuff"
Windows では、次の 3 つの方法で簡単に実行できます。
require 'win32console'
puts "\e[31mHello, World!\e[0m"
これで、 String と呼ばれる小さなメソッドで拡張できますred
require 'win32console'
class String
def red
"\e[31m#{self}\e[0m"
end
end
puts "Hello, World!".red
また、次のように String を拡張して、より多くの色を取得することもできます。
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
または、gem をインストールできる場合:
gem install term-ansicolor
そしてあなたのプログラムでは:
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
詳細と使用方法については、term/ansicolor のドキュメントを参照してください。
Win32 コンソール APIにアクセスする必要があります。残念ながら、Ruby からそれを行う方法がわかりません。Perl では、Win32::Consoleモジュールを使用します。Windows コンソールは ANSI エスケープ コードに応答しません。
artur02 が言及した Ruby 出力のカラー化に関する記事によると、win32console gem をインストールしてロードする必要があります。
あなたはここで良いイラスト付きの記事を読むことができます:http: //kpumuk.info/ruby-on-rails/colorizing-console-ruby-script-output/
コンソールのテキストの色の設定は、かなり言語固有だと思います。これは、MSDNのC#の例です。
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は、テキストの色を設定するためのプロパティです。
ANSIエスケープシーケンスを使用することもできますが、それは最新バージョンのWindowsでは希望どおりに機能しません。ウィキペディアには非常に有益な記事があります:
http://en.wikipedia.org/wiki/ANSI_escape_code
したがって、元の質問に対する答えはほぼ確実に「いいえ」です。ただし、たとえばWin32 API関数を呼び出すことにより、エスケープシーケンスを記述せずに前景色を変更できます。Rubyでこの種のことを頭のてっぺんから行う方法はわかりませんが、他の誰かが管理しているようです。
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/241925
濃い赤には4、明るい赤には12、デフォルトの色に戻すには7を使用したいと思います。
お役に立てれば!
color [background][foreground]
色は次のように定義されています。
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
たとえば、背景を青に、前景をグレーに変更するには、次のように入力します。
color 18
ANSI エスケープ コード:
32 ビット文字モード (サブシステム:コンソール) Windows アプリケーションは、ANSI エスケープ シーケンスをコンソールに書き込みません。
エスケープ コード アクションを解釈し、代わりにネイティブ コンソール API を呼び出す必要があります。
ありがとうマイクロソフト:-(
私は、MRI と JRuby の両方の下で、Windows または POSIX システム上でシームレスに動作する小さなクロスプラットフォームの gem を作成しました。
依存関係はなく、POSIX システムでは ANSI コードを使用し、Windows では FFI (JRuby) または Fiddler (MRI) を使用します。
使用するには、次のようにします。
gem install color-console
ColorConsole は、Console.write および 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
詳細については、プロジェクトのホームページ ( https://github.com/agardiner/color-console)にアクセスしてください。
私の知る限り、コマンドラインでは不可能ですが、それは1色だけです...
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();
}
}
}
簡単なC#プログラムを使用して色を変更できます。http://powerof2games.com/node/31では、コンソール出力をラップして効果を実現する方法について説明しています。
ANSIエスケープコードが必要です。
コマンドラインに出力するための標準のC/C ++仕様では、コンソールウィンドウの色を変更する機能は指定されていません。とは言うものの、Win32にはそのようなことを行うための多くの機能があります。
Win32コンソールの色を変更する最も簡単な方法は、iostream.hのシステムコマンドを使用することです。この関数はDOSコマンドを呼び出します。色を変更するには、それを使用してcolorコマンドを呼び出します。たとえばsystem("Color F1");
、コンソールを白地にダークブルーにします。
DOSカラー
コマンドで使用できる色は、それぞれ16進数で表される16のDOS色です。1つ目は背景で、2つ目は前景です。
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
このほんの少しの色で、コンソールプログラムがより視覚的に心地よくなります。ただし、[色]コマンドを使用すると、コンソール全体の色が変更されます。個々のセルを制御するには、windows.hの関数を使用する必要があります。
SetConsoleAttribute
関数を使用する必要があることを行います
最終的には、 SetConsoleTextAttributeを呼び出す必要があります。GetStdHandleからコンソール画面のバッファハンドルを取得できます。
私は、UNIX テール コマンドの Windows 対応バージョンを実行できるようにする、baretail (google it) と呼ばれるフリーウェアの Windows テール プログラムを何年も使用してきました。定義したキーワードに応じて、行に色を付けることができます。ソリューションとして優れているのは、特定の言語や設定などに縛られていないことです。配色を定義するだけで、ドンキー コングのようになります。私の個人的なトップ 10 のフリーウェア ヘルパーです!