
Ich versuche, mithilfe von ANSI-Escape-Codes eine farbige Zeichenfolge auf einem Gnome-Terminal auszugeben. Dies funktioniert jedoch nicht mit RGB-Codes, obwohl dies bei benutzerdefinierten Farben oder sogar den 256 zusätzlichen Farben funktioniert.
Vereinfacht ausgedrückt:
cout << "\033[33m" << '.' << "\033[0m"; # prints with color
cout << "\033[38;5;135m" << '.' << "\033[0m"; # prints with color
cout << "\033[38;2;0;135;0m" << '.' << "\033[0m"; # doesn't work, prints with default color
Wie kann ich im Gnome-Terminal etwas mit einem RGB-Farbcode ausgeben?
Für die Ausgaben folge ich diesem Link:Wikipedia ANSI-Escapecode.
Ich fügte hinzu:
$ export TERM=xterm-256color
Zu meiner .bashrc-Datei zur Unterstützung von 256 Farben und:
$ tput colors
Gibt 256 aus, falls das wichtig ist.
Antwort1
Aus folgenden Gründen können RGB-Farben im Terminal nicht verwendet werden:
- Bash wählt die Befehlszeilenfarben nicht aus.
- Bash kann nur ANSI-Farben angeben.
Die beiden oben genannten Gründe hängen eng miteinander zusammen. Die meisten davon hängen von Ihrem Bildschirm und der ANSI-Farbspezifikation ab. Wenn Sie einen guten Terminalemulator verwenden, können Sie möglicherweise benutzerdefinierte RGB-Farben für bestimmte ANSI-Farbcodes festlegen.
Bash als Shell ist machtlos, was der Bildschirm mit Anzeigen machen kann. Es überträgt nur die Wörter auf dem Terminal an Ihren Bildschirm. Der Bildschirm kann entscheiden, was damit gemacht wird. Der Bildschirm kann entscheiden, welche Farben die ANSI-Escape-Codes darstellen (falls das Terminal überhaupt Farben zulässt).
Eine Problemumgehung besteht darin, die Farbspezifikationen des Terminals zu ändern. Allerdings erlauben nur sehr wenige (ich kenne keine) das Ändern der Farben.
Antwort2
Damit True Colors im Gnome-Terminal funktioniert, benötigen Sie vte >= 0,36. Stellen Sie sicher, dass Ihr vte aktuell genug ist, dann sollte Ihr Code funktionieren.
(Hinweis: Wenn Sie fest codierte Zeichenfolgen ausgeben, wie Sie es in Ihrer Beispielanwendung tun, ist der Wert von $TERM zwangsläufig absolut irrelevant. Er spielt nur dann eine Rolle, wenn Sie Bibliotheken verwenden, deren Verhalten davon abhängt, wie z. B. ncurses.)