Wie kann ich mit Ruby Hintergrund- und Vordergrundtext für die Ausgabe im Terminal einfärben?
Ich erinnere mich, als wir Pascal programmierten, haben wir alle unsere eigenen textcolor(…)
Prozeduren geschrieben, damit unsere kleinen Bildungsprogramme hübscher und präsentativer aussehen.
Wie würde ich vorgehen, um ein Äquivalent davon in Ruby zu codieren?
ruby
colors
console-application
gmile
quelle
quelle
Antworten:
Kolorieren ist mein Lieblingsjuwel! :-)
Hör zu:
https://github.com/fazibear/colorize
Installation:
Verwendungszweck:
quelle
win32console
Gem undrequire 'win32console'
danach installierencolorize
.win32console
Juwel nicht mehr brauchen . github.com/luislavena/win32console/issues/…Wenn Sie die obigen Antworten kombinieren, können Sie etwas implementieren, das wie das Kolorieren des Edelsteins funktioniert, ohne dass eine weitere Abhängigkeit erforderlich ist.
quelle
Als String-Klassenmethoden (nur Unix):
und Verwendung:
auf meiner Konsole:
zusätzlich:
Entfernt Formatierungszeichen
Hinweis
quelle
def bold; "\e[1m#{self}\e[22m" end
cmd.exe
,puts "\e[0"
funktioniert nicht auf klares Format;puts "\e[0m"
muss verwendet werdenIch habe eine kleine Methode geschrieben, um die grundlegenden Farbmodi zu testen, basierend auf den Antworten von Erik Skoglund und anderen.
Beispielausgabe:
quelle
Sie können ANSI-Escape-Sequenzen verwenden, um dies auf der Konsole zu tun. Ich weiß, dass dies unter Linux und OSX funktioniert. Ich bin mir nicht sicher, ob die Windows-Konsole (cmd) ANSI unterstützt.
Ich habe es in Java gemacht, aber die Ideen sind die gleichen.
quelle
Während die anderen Antworten für die meisten Menschen gut funktionieren, sollte die "richtige" Unix-Methode erwähnt werden. Da alle Arten von Textterminals diese Sequenzen nicht unterstützen, können Sie die terminfo- Datenbank abfragen , eine Abstraktion über die Funktionen verschiedener Textterminals. Dies scheint größtenteils von historischem Interesse zu sein - heute verwendete Software-Terminals unterstützen im Allgemeinen die ANSI-Sequenzen -, hat jedoch (mindestens) einen praktischen Effekt: Manchmal ist es nützlich, die Umgebungsvariable so einstellen
TERM
zu könnendumb
, dass ein derartiges Styling vermieden wird. Zum Beispiel beim Speichern der Ausgabe in einer Textdatei. Es fühlt sich auch gut an, die Dinge richtig zu machen . :-)Sie können den Rubin-Terminfo- Edelstein verwenden. Für die Installation ist eine C-Kompilierung erforderlich. Ich konnte es unter meinem Ubuntu 14.10-System installieren mit:
Anschließend können Sie die Datenbank wie folgt abfragen ( eine Liste der verfügbaren Codes finden Sie auf der Terminfo-Manpage ):
Hier ist eine kleine Wrapper-Klasse, die ich zusammengestellt habe, um die Verwendung zu vereinfachen.
Verwendungszweck:
(Bearbeiten) Wenn Sie lieber keinen Edelstein benötigen, können Sie sich wie hier beschrieben auf das
tput
Programm verlassen - Ruby-Beispiel:quelle
tput
. Ich kann nicht einmal artikulieren, wie viel Haarausfalltput
mich gerettet hat.Ich habe diese Methode gemacht, die helfen könnte. Es ist keine große Sache, aber es funktioniert:
So verwenden Sie es:
Mögliche Verbesserungen könnten sein:
colors
undbgColors
werden jedes Mal definiert, wenn die Methode aufgerufen wird, und sie ändern sich nicht.bold
,underline
,dim
usw.Diese Methode funktioniert nicht für
p
, ebensop
wie eininspect
Argument. Zum Beispiel:zeigt "\ e [0; 38mHallo World \ e [0m"
Ich habe es mit
puts
,print
und dem Logger-Juwel getestet , und es funktioniert gut.Ich habe dies verbessert und eine Klasse so erstellt
colors
und binbgColors
Klassenkonstanten undcolorize
ist eine Klassenmethode:BEARBEITEN: Besserer Codestil, definierte Konstanten anstelle von Klassenvariablen, Verwendung von Symbolen anstelle von Zeichenfolgen, Hinzufügen weiterer Optionen wie Fettdruck, Kursivschrift usw.
Sie können es verwenden, indem Sie:
quelle
Folgendes habe ich getan, damit es funktioniert, ohne dass Edelsteine benötigt werden:
Dann wird nur der Text in den Anführungszeichen farbig angezeigt, und Sie kehren zu Ihrem regulären Programm zurück.
quelle
e[32mSOMETEXT
"\e(...)"
anstelle von"e\(...)"
Ich habe ein paar gefunden:
http://github.com/ssoroka/ansi/tree/master
Beispiele:
http://flori.github.com/term-ansicolor/
Beispiele:
http://github.com/sickill/rainbow
Beispiel:
Wenn Sie unter Windows arbeiten, müssen Sie möglicherweise eine "gem install win32console" ausführen, um die Unterstützung für Farben zu aktivieren.
Auch der Artikel Colorizing Console Ruby-Script-Ausgabe ist nützlich, wenn Sie Ihr eigenes Juwel erstellen müssen. Es wird erklärt, wie Sie Zeichenfolgen ANSI-Farben hinzufügen. Sie können dieses Wissen verwenden, um es in eine Klasse zu verpacken, die eine Zeichenfolge oder etwas erweitert.
quelle
Dies kann Ihnen helfen: Kolorierte Rubinausgabe
quelle
class String; def red; colorize(self, "\033[31m"); end; end
Ich fand die obigen Antworten nützlich, passte jedoch nicht zur Rechnung, wenn ich so etwas wie eine Protokollausgabe einfärben wollte, ohne Bibliotheken von Drittanbietern zu verwenden. Folgendes hat das Problem für mich gelöst:
Ich hoffe, es hilft!
quelle