Ich bin dabei, meine Terminals einzufärben PS1
.
Ich setze Farbvariablen mit tput
; Zum Beispiel ist hier lila:
PURPLE=$(tput setaf 125)
Frage:
Wie finde ich die Farbcodes (zB 125
) anderer Farben?
Gibt es irgendwo einen Farbtabellenführer / Spickzettel?
Ich bin mir nur nicht sicher, was 125
ist ... Gibt es eine Möglichkeit, eine Hex-Farbe zu nehmen und in eine Zahl umzuwandeln, setaf
die verwendet werden kann?
Antworten:
Die Anzahl der Farben, die für die Eingabe verfügbar sind, wird durch angegeben
tput colors
.So zeigen Sie die grundlegenden 8 Farben an (wie sie
setf
im urxvt-Terminal undsetaf
im xterm-Terminal verwendet werden):Und normalerweise so benannt:
So zeigen Sie die erweiterten 256 Farben an (wie
setaf
in urxvt verwendet):Wenn Sie Zahlen und eine geordnete Ausgabe wünschen:
Die 16 Millionen Farben benötigen eine Menge Code (einige Konsolen können dies nicht anzeigen).
Die Grundlagen sind:
fb
istfront/back
oder3/4
.Ein einfacher Test Ihrer Konsolenkapazität, um so viele Farben darzustellen, ist:
Es wird eine rote Linie mit einer sehr kleinen Änderung des Tons von links nach rechts angezeigt. Wenn diese kleine Änderung sichtbar ist, unterstützt Ihre Konsole 16 Millionen Farben.
Jeder
r
,g
undb
ist ein Wert von 0 bis 255 für RGB (Rot, Grün, Blau).Wenn Ihr Konsolentyp dies unterstützt, erstellt dieser Code eine Farbtabelle:
So konvertieren Sie einen hexadezimalen Farbwert in einen (nächsten) 0-255-Farbindex:
Verwenden Sie es als:
So ermitteln Sie die im HTML- Farbformat verwendete Farbnummer :
Verwenden Sie es als ("basic" sind die ersten 16 Farben, "color" ist die Hauptgruppe, "grey" ist die letzte graue Farbe):
quelle
fromhex
. Danke noch einmal! Außerdem habe ich einen Scheck für das hinzugefügt#
. Feedback?hex=${1#"#"}
. Es wird nichts entfernen, wenn$1
es kein a gibt#
, und es entfernen, wenn es existiert. Siehe meinen aktualisierten Code.\e[0;%s8;2;%s;%s;%sm
nicht 16 Millionen Farben zur Verfügung stehen, sondern nur die Farbe in der 240-Farben-Palette, die dem angeforderten RGB am nächsten kommt.Die kurze Antwort lautet, dass Sie in den Web-Tabellen Farbtabellen finden und diese mit der Farbnummer abgleichen können.
Die lange Antwort ist, dass die korrekte Zuordnung vom Terminal abhängt -
Dies
125
ist ein Parameter für eine Escape-Sequenz, auf diesetaf
in der Terminalbeschreibung verwiesen wird .tput
misst der Zahl keine besondere Bedeutung bei. Das hängt tatsächlich vom jeweiligen Terminalemulator ab.Vor einiger Zeit definierte ANSI Codes für 8 Farben, und es gab zwei Schemata, um diese zu nummerieren. Die beiden sind in einigen Terminalbeschreibungen als die Paare
setf/setb
oder zu sehensetaf/setab
. Da letztere die Konnotation "ANSI-Farben" hat, werden Sie feststellen, dass diese häufiger verwendet werden. Ersteres (setf / setb) hat die Reihenfolge für Rot / Blau geändert, wie in den ncurses FAQ angegeben. Warum sind Rot / Blau vertauscht? In beiden Fällen wurde das Schema nur für die Nummerierung der Farben festgelegt. Es gibt keine vordefinierte Beziehung zwischen diesen Zahlen und dem RGB-Inhalt.Für bestimmte Terminal-Emulatoren gibt es vordefinierte Farbpaletten, die sich leicht aufzählen lassen - und mit diesen Escape-Sequenzen programmieren lassen. Es gibt keine relevanten Standards, und Sie werden Unterschiede zwischen Terminalemulatoren feststellen, wie in den xterm-FAQ vermerkt. Ich mag diesen Blauton nicht .
Konventionen werden jedoch oft mit Standards verwechselt. Bei der Entwicklung von xterm in den letzten 20 Jahren wurden ANSI (8)
aixterm
-Farben verwendet, die Feature (16) -Farben angepasst und Erweiterungen für 88- und 256-Farben hinzugefügt. Ein Großteil davon wurde von anderen Entwicklern für verschiedene Terminalemulatoren übernommen. Das ist in den xterm FAQ zusammengefasst. Warum wird "xterm" nicht gleich "xterm-256color" gesetzt? .Der xterm-Quellcode enthält Skripte zum Demonstrieren der Farben, z. B. unter Verwendung derselben Escape-Sequenzen,
tput
die verwendet würden.Diese Frage / Antwort ist möglicherweise auch hilfreich: RGB-Werte der Farben im erweiterten Ansi-Farbindex (17-255)
quelle
Das
tput
Dienstprogramm verwendet eine 256-Farben-Lookup-Tabelle zum Drucken von 8-Bit-ANSI-Escape-Sequenzen (beginnend mit Escund[
), wobei Terminalfunktionen verwendet werden , sodass diese Steuersequenzen als Farben interpretiert werden können. Hierbei handelt es sich um einen vordefinierten Satz von 256 Farben, die üblicherweise für Grafikkarten verwendet werden.Verwenden Sie den folgenden Einzeiler, um alle 256 Farben im Terminal zu drucken:
Hinweis: An Spaltenliste
| column
anhängen.Diese 256-Farben-Nachschlagetabelle finden Sie auch auf der Wikipedia-Seite wie folgt:
quelle
Mit zsh und in einem
xterm
-ähnlichen Terminal (xterm
undvte
-basierten Endgeräten wiegnome-terminal
,xfce4-terminal
... zumindest), können Sie tun:Das Bash-Äquivalent:
(Sie möchten, dass die Escape-Sequenz die Farbe abfragt, die gesendet werden soll, nachdem die Terminaldisziplin
echo
deaktiviert wurde (mit-s
). Andernfalls wird die Antwort die Hälfte der Zeit von der Liniendisziplin angezeigt, daher wird sie als Teil derread
Eingabeaufforderung gesendet (var?prompt
in zsh) wie in ksh,-p prompt
in bash)).um die Definition von Farbe 125 zu erhalten (hier als RGB-Spezifikation, wobei jede Zahl die Intensität der Rot-, Grün- und Blau-Komponenten als Hex-Zahl zwischen 0 und FFFF darstellt).
Sie können dasselbe für die ersten 16 Farben mit dem
xtermcontrol
Befehl tun :quelle
tput colors
Berichte nur8
, wenn das Terminal 256 Farben darstellen kann. Außerdemtput colors
meldet die xterm-color (Konsole) nur,8
wenn dieses Terminal 16 Millionen Farben (und natürlich alle 256 Farben) vollständig darstellen kann. Und nein, kein tmux oder Bildschirm, der "färben" kann :-) (das ist ändern) die Ergebnisse (mir war dieses Detail bekannt). Kurz gesagt: Ihr Code kann in einigen Terminals / Konsolen fehlschlagen.ANSI-Farben auf Konsolenebene
Abhängig davon, welches Protokoll Ihre Konsole verwendet, könnte die Reihenfolge wie folgt lauten:
\e[38;5;XXXm
oder\e[3XXXm
woXXX
entspricht die Ansi-Nummer?Um sicherzustellen, dass Sie die richtige ANSI-Sequenz verwenden, müssen Sie verwenden
tput
.In Bezug auf den ANSI-Escape-Code von Wikipedia habe ich Folgendes geschrieben:
Könnte so etwas rendern wie:
... Dann, weil ich es hasse, mehr als 200 Gabeln in einem kleinen Skript laufen zu lassen, schrieb ich Folgendes:
Mit nur 1 Gabel! Gleiches Ergebnis, aber viel schneller!
quelle