Frage

Ich habe ein Kommandozeilenprogramm, das die Protokollierung auf dem Bildschirm ausgibt.

Ich möchte, dass Fehlerzeilen rot angezeigt werden.Gibt es spezielle Zeichencodes, die ich ausgeben kann, um die Textfarbe auf Rot und dann wieder auf Weiß umzustellen?

Ich verwende Ruby, aber ich kann mir vorstellen, dass dies in jeder anderen Sprache dasselbe wäre.

Etwas wie:

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

print "#{red} ERROR: IT BROKE #{white}"
print "other stuff"
War es hilfreich?

Lösung

Sie müssen den [Win32-Konsole-API] ( Win32 :: Console Modul. die Konsole von Windows nicht reagiert auf ANSI-Escape-Codes.

Nach dem Artikel auf Einfärben Ruby-Ausgabe dass artur02 erwähnt, müssen Sie das win32console Juwel installieren und laden.

Andere Tipps

Unter Windows können Sie dies ganz einfach auf drei Arten tun:

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

Jetzt könnten Sie String mit einer kleinen Methode namens erweitern red

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

 puts "Hello, World!".red

Sie können String auch wie folgt erweitern, um mehr Farben zu erhalten:

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

Oder, wenn Sie Gems installieren können:

gem install term-ansicolor

Und in Ihrem Programm:

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

Weitere Informationen und mögliche Verwendungsmöglichkeiten finden Sie in den Dokumenten zu term/ansicolor.

Sie können lesen Sie hier einen guten und illustrierten Artikel: http://kpumuk.info/ruby-on-rails / Einfärben-console-Rubin-Skript-Ausgabe /

Ich denke, Handkonsole Textfarbe ist ziemlich sprachspezifisch. Hier ist ein Beispiel in C # von 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 ist die Eigenschaft für Textfarbe festlegen.

Sie könnten eine ANSI-Escape-Sequenz verwenden, aber das wird unter modernen Windows-Versionen nicht das tun, was Sie wollen.Wikipedia hat einen sehr informativen Artikel:

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

Die Antwort auf Ihre ursprüngliche Frage lautet also mit ziemlicher Sicherheit "Nein". Sie können jedoch die Vordergrundfarbe ändern, ohne eine Fluchtsequenz zu schreiben, indem Sie beispielsweise eine Win32 -API -Funktion aufrufen.Ich weiß auf Anhieb nicht, wie ich so etwas in Ruby machen soll, aber jemand anderes scheint es geschafft zu haben:

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

Ich kann mir vorstellen, dass Sie 4 für dunkles Rot oder 12 für helles Rot und 7 verwenden möchten, um die Standardfarbe wiederherzustellen.

Hoffe das hilft!

auf ANSI-Escape-Codes:

  

32-Bit-Zeichen-Modus (Subsystem: console) Windows-Anwendungen nicht schreiben ANSI-Sequenzen an die Konsole entkommen

     

Sie müssen die Escape-Code Aktionen interpretieren und die native Console API-Aufruf statt

Danke Microsoft: - (

color [background][foreground]

Wo Farben sind wie folgt definiert:

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

Zum Beispiel, um den Hintergrund zu Blau zu ändern und der Vordergrund grau, würden Sie eingeben:

color 18

Ich habe ein kleines Cross-Plattform-Juwel verfaßt, die diese nahtlos auf Windows oder POSIX-Systemen ausgeführt wird, sowohl unter MRT und JRuby behandelt.

Es hat keine Abhängigkeiten und verwendet ANSI-Codes auf POSIX-Systemen und entweder FFI (JRuby) oder Fiddler (MRI) für Windows.

Um es zu nutzen, einfach:

gem install color-console

Colorconsole stellt Methoden für die Textzeilen in verschiedenen Farben, mit den Console.Write und Console.puts Funktionen ausgegeben werden.

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

Besuchen Sie die Homepage des Projekts unter https://github.com/agardiner/color-console für weitere Details.

Soweit ich weiß, dass es mit einer Befehlszeile nicht möglich ist, es ist nur eine Farbe ...

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();
        }
    }
}

Sie können die Farbe ändern, um ein einfaches C # Programm, http://powerof2games.com/node/31 beschreibt, wie Sie die Konsolenausgabe den Effekt zu erzielen wickeln können.

Sie möchten ANSI Escape-Codes .

Die Standard-C / C ++ Spezifikation für die Kommandozeile ausgibt, legt keine Funktionen für das Ändern der Farbe des Konsolenfensters. Das heißt, es gibt viele Funktionen in Win32 für so etwas zu tun.

Der einfachste Weg, um die Farbe der Win32-Konsole zu ändern, ist durch den Systembefehl in iostream.h. Diese Funktion ruft einen DOS-Befehl. Um Farben zu ändern, werden wir es verwenden, um die Farbe Befehl aufzurufen. Zum Beispiel system("Color F1"); werden die Konsole schwarz auf weiß machen.

DOS Farben

Die verfügbaren Farben für die Verwendung mit dem Befehl sind die sechzehn DOS Farben mit jeweils einem Hexadezimalzeichens vertreten. Das erste ist der Hintergrund und die zweite der Vordergrund.

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

Gerade dieser kleine Hauch von Farbe macht Konsolenprogramme mehr optisch ansprechend. Allerdings wird der Befehl Farbe der Farbe der gesamten Konsole ändern. Um einzelne Zellen zu steuern, müssen wir Funktionen von windows.h verwenden.

Sie tun, dass Sie die SetConsoleAttribute Funktion verwenden müssen

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

Viele der alten ANSI Farbcodes Arbeit. Der Code für einen roten Vordergrund ist so etwas wie Flucht- [31m. Escape ist Charakter 27, so dass das, "\ 033 [31m" oder "\ x1B [31m", abhängig von Ihrer Flucht Schema.

[39m ist der Code zur Standardfarbe zurückzukehren.

Es ist auch möglich, mehrere Codes auf einmal setzen Vorder- und Hintergrundfarbe gleichzeitig angeben.

Sie müssen möglicherweise ansi.sys laden, finden Sie unter diese .

Schließlich müssen Sie rufen SetConsoleTextAttribute . Sie können eine Konsole Bildschirmpuffer Griff bekommen von GetStdHandle .

Ich habe mit einem Freeware-Fenster Schwanz Programm namens BareTail (Google es) für Kinder ab, die Sie tun, um eine Windows-appified Version von Unix-Befehl tail läßt. Es lässt Sie Linien kolorieren abhängig von was auch immer Keywords, die Sie definieren. Was ist es schön ist, als eine Lösung für eine bestimmte Sprache oder Setup, etc. sein nicht gebunden ist, definieren Sie einfach Ihr Farbschema und seine auf wie Donkey Kong. In meiner persönlichen Top 10 Freeware-Helfer!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top