Terminalfarben sind knifflig
(jvns.ca)- Probleme mit Terminalfarben sind weniger Geschmackssache als eine Frage von fehlenden Standards und Implementierungsunterschieden. Dadurch kann dieselbe Befehlsausgabe je nach Kombination aus Terminal, Theme und App schwer lesbar werden.
- Die grundlegenden 16 ANSI-Farben, 256 Farben und 24-Bit-Hex-Farben werden parallel verwendet, aber welche tatsächliche Farbe eine Farbnummer darstellt, hängt vom jeweiligen Terminal-Emulator ab.
- Kontrastkonflikte wie blaue Schrift auf schwarzem Hintergrund, helles Gelb auf weißem Hintergrund, die graue Zuordnung in Solarized oder die Hintergrundfarbe von
ngroktreten auf, wenn die Annahmen eines Programms nicht zum Theme des Nutzers passen. - Gegenmaßnahmen verteilen sich auf mehrere Ebenen: Palette zurücksetzen,
base16-shell,LS_COLORS,NO_COLOR=true,--color=always,unbuffersowie 24-Bit-Farbunterstützung in Vim/Neovim. - Die minimum contrast-Funktion in iTerm2, tabby, kitty, Ghostty und Windows Terminal ist keine perfekte Lösung, kann aber das Risiko unlesbarer Ausgabe verringern.
ANSI-Farben und Unterschiede zwischen Terminals
- Terminals haben normalerweise 16 ANSI-Farben: Schwarz, Rot, Grün, Gelb, Blau, Magenta, Cyan und Weiß sowie jeweils eine helle Variante davon.
- Programme geben ANSI-Escape-Codes aus, um Farben festzulegen.
- Zum Beispiel kann mit
\033[38;5;{num}meine Vordergrund-Farbnummer angegeben werden.
- Zum Beispiel kann mit
- Das Problem ist, dass es keinen einheitlichen Standard dafür gibt, welcher Hex-Farbe eine ANSI-Farbnummer tatsächlich entspricht.
- Terminal-Emulatoren wählen die Farben selbst.
- Auch in der Farbtabellenübersicht für ANSI-Escape-Codes auf Wikipedia gibt es große Unterschiede zwischen Implementierungen.
- Durch diese Unterschiede kann das von
lsfür Verzeichnisse verwendete Blau auf schwarzem Hintergrund schlecht sichtbar sein. - Auch die Kombination aus hellem Gelb und weißem Hintergrund ist fast unlesbar, und ähnliche Probleme können bei anderen Farben wie hellem Grün auftreten.
So setzt man die Farbpalette zurück
- Wenn einem die Standard-ANSI-Farben nicht gefallen oder es Kontrastprobleme gibt, kann man mit einem Zurücksetzen der Palette gegensteuern.
-
Einstellung im Terminal-Emulator
- Die meisten modernen Terminal-Emulatoren bieten eine Funktion zum Neusetzen der Farben.
- Manche bringen bereits integrierte Themes mit.
- Je populärer ein Terminal-Emulator ist, desto größer ist oft die Auswahl an verfügbaren Themes.
-
Einstellung per Shell-Skript
- Durch Ausgabe von ANSI-Escape-Codes kann die Farbpalette des Terminal-Emulators verändert werden.
- Das Solarized-Light-Skript von base16-shell verwendet je nach Terminal unterschiedliche Escape-Code-Konventionen.
- Das Skript versucht, anhand der Umgebungsvariable
TERMden passenden Stil für Escape-Codes auszuwählen. - Der Ansatz per Shell-Skript erleichtert es, dieselben Farbeinstellungen auch beim Wechsel des Terminal-Emulators beizubehalten.
- Allerdings unterstützen nicht alle Terminal-Emulatoren diese Art der Palettenänderung, und selbst bei Unterstützung können die Ergebnisse leicht variieren.
256 Farben, 24-Bit-Farben und Themes pro Tool
- Viele Terminals unterstützen drei Arten der Farbangabe:
- 16 ANSI-Farben
- erweiterte 256 Farben
- 24-Bit-Hex-Farben wie
#ffea03
fdverwendet in der Ausgabe Escape-Codes wie^[[38;5;48m, um Vordergrundfarbe 48 zu setzen.- Diese Farbe kann wie ein Limettengrün wirken, das in der üblichen Terminal-Farbtabelle nicht vorkommt.
- Der Kontrast zur verwendeten Farbpalette kann schlecht sein.
batverwendet Farben auf ähnliche Weise, scheint aber standardmäßig auf Ausgabe ausgelegt zu sein, die mit verschiedenen Terminal-Themes funktionieren soll.- Einige moderne Terminal-Tools wie
fd,batunddeltaunterstützen eigene benutzerdefinierte Themes.- Das Standard-Theme kann mit dem Terminalhintergrund kollidieren.
- Dafür lässt sich das Theme der Tool-Ausgabe feiner steuern, als wenn man nur aus den 16 ANSI-Farben auswählt.
- Mit
bat --theme ansiverwendetbatdie im normalen Terminal-Farbschema gesetzten ANSI-Farben.
Konflikte mit Solarized und base16
- Bei Solarized Light kann die Zuordnung heller Farben je nach Implementierung unterschiedlich aussehen.
- Das standardmäßige Solarized-Light-Theme von iTerm ordnet die Farben 9 bis 14, also etwa „bright blue“ oder „bright red“, wie im ursprünglichen Solarized-Design Grautönen zu.
- Wenn
lsfür Verzeichnisse und ausführbare Dateien helle Farben verwendet, können diese grau erscheinen.
- Wenn
- base16 Solarized Light kann als Variante verwendet werden, die helle Farben nicht grau mappt, sondern als tatsächliche Farben beibehält.
- Dieser Unterschied scheint daraus zu resultieren, dass Solarized ursprünglich so entworfen wurde, dass das Vim-Solarized-Farbschema Grautöne verwenden kann.
base16-shellsetzt die Farben 16 bis 21, umbase16-vimzusätzliche Farben bereitzustellen.- Wenn
ngrokversucht, den Hintergrund auf Farbe 16 „black“ zu setzen, diese Farbe aber auf ein helles Orange umgemappt wurde, entsteht ein sehr merkwürdiger Hintergrund. - Solche Konflikte treten leicht auf, wenn Programme ANSI-Hintergrundfarben setzen und Nutzer diese Farben für andere Bedeutungen umgemappt haben.
- Wenn
Kontrastprobleme mit minimum contrast verringern
- Einige Terminals bieten eine minimum contrast-Funktion, die Farben automatisch anpasst, wenn der Kontrast zwischen Vorder- und Hintergrund nicht ausreicht.
- iTerm2, tabby, kittys text_fg_override_threshold, Ghostty und Windows Terminal bieten diese Funktion.
- Wenn man in iTerm den Wert für minimum contrast auf 40 setzt, wird selbst schwer lesbare Ausgabe wie bei einem
ngrok-Hintergrundkonflikt besser lesbar. - Wenn Farbeinstellungen fehlerhaft sind oder Programme mit Themes kollidieren, ist minimum contrast eine praktische Absicherung gegen versehentliche Lesbarkeitsprobleme.
TERM, Pipes und Deaktivieren von Farben
- Wenn ein per SSH erreichbares System den lokalen Wert der Umgebungsvariable
TERMnicht unterstützt, funktionieren Farben möglicherweise nicht korrekt. - Systeme verwenden die
terminfo-Datenbank. Fehlt derTERM-Wert dort, ist es schwierig zu wissen, wie farbige Ausgabe zum Terminal passt. - Es gab keine reproduzierbare Umgebung, aber eine Stack-Overflow-Antwort schlägt Formen wie
TERM=xterm sshstatt nursshvor. - Beim Verbinden von Befehlen per Pipe werden Farben manchmal deaktiviert.
fd | lesskann ohne Farben ausgegeben werden.- Wenn die Ausgabe etwa an Tools wie
grepweitergereicht wird, ist reiner Text ohne Escape-Codes oft nützlich.
- Wenn man Farben beibehalten möchte, kann man
unbuffer fd | less -rverwenden.unbufferöffnet ein tty, damit der Befehl annimmt, in ein TTY zu schreiben.- Das löst auch Probleme mit gepufferter Programmausgabe bei Verwendung in Pipes.
- Manche Befehle können mit Flags wie
--color=alwaysimmer Farben ausgeben, etwafd.
ls-Farben deaktivieren oder ändern
- Manche Nutzer möchten keine Farbausgabe von
ls.- weil Blau auf schwarzem Hintergrund schwer lesbar ist
- weil sie die Terminal-Farbpalette nicht anpassen möchten
- oder weil Farben an sich nicht hilfreich sind
- Es gibt mehrere Optionen:
- Mit
ls --color=neverkann man Farben deaktivieren. - Über die Umgebungsvariable
LS_COLORSlassen sich die vonlsverwendeten Farben anpassen. - Einige Programme unterstützen
NO_COLOR=true; eine Liste gibt es auf no-color.org.
- Mit
- Zum Beispiel kann man mit
LS_COLORS="fi=0:di=0:ln=0:pi=0:so=0:bd=0:cd=0:or=0:ex=0" lsdie Farbstile für verschiedene Dateitypen auf 0 setzen.
Veränderungen bei Vim und Neovim
- Die Farbeinstellungen in Vim waren früher oft problematisch, weil Terminal-Farbpalette und Vim-Farbschema aufeinander abgestimmt werden mussten.
- Für Farbschemata von Vim im Terminal gibt es im Wesentlichen zwei Ansätze:
- Vim-Farbklassen werden auf ANSI-Farbnummern gemappt.
- Das Farbschema verwendet direkt 24-Bit-Hex-Farben wie
#faea99.
- Vor 20 Jahren waren Terminals mit Unterstützung für 24-Bit-Hex-Farben nicht verbreitet, und auch Vim unterstützte die Verwendung von 24-Bit-Farben im Terminal nicht.
- Vim bekam 2016 Unterstützung für 24-Bit-Farben.
- Neovim 0.10 wurde im Mai 2024 veröffentlicht, und in Terminals mit 24-Bit-Farbunterstützung ist
termguicolorsstandardmäßig aktiviert. - Wenn man 2024 nicht vorhat, ein Terminal ohne 24-Bit-Farbunterstützung zu verwenden, entfällt die Pflicht, Terminal-Farbpalette und Vim-Farbschema zwingend zu synchronisieren.
- Dadurch sinkt auch die Notwendigkeit, dass
base16-shellfür die Vim-Integration die Farben 16 bis 21 speziell setzt.- Wenn man diesen Teil entfernt, lassen sich Konflikte wie der orangefarbene Hintergrund von
ngrokvermeiden.
- Wenn man diesen Teil entfernt, lassen sich Konflikte wie der orangefarbene Hintergrund von
Erfahrungen mit base16 und Grenzen
- Mit base16-shell und base16-vim zusammen lassen sich Terminal- und Vim-Farben leicht aufeinander abstimmen.
- Die Einrichtung ist möglich, indem man in die fish-Konfiguration ein paar Zeilen und in
.vimrceinige Zeilen einfügt. - base16 ist nicht für alle geeignet.
- Die Zahl integrierter Themes ist begrenzt, und möglicherweise gefällt keines davon.
- Das Solarized-base16-Theme setzt helle ANSI-Farben auf dieselben Werte wie normale Farben, was in Anwendungsfällen problematisch sein kann, in denen sich helle Farben unterscheiden sollen.
- Das Setzen der Farben 16 bis 21, um
base16-vimmehr Farben bereitzustellen, ist in Umgebungen mit ausschließlich 24-Bit-fähigen Terminals womöglich nicht nötig. - Die Einstellungen für die Farben 16 bis 21 können in Terminals ohne 256-Farben-Unterstützung wie dem Linux-Framebuffer-Terminal Probleme verursachen.
- Es gibt einen Community-Fork von base16 namens tinted-theming.
Tools für Farbschemata und beliebte Themes
- rootloops.sh ist ein Tool zum Erzeugen von Farbschemata.
- Als ergänzende Lektüre wird „let’s create a terminal color scheme” genannt.
- In Mastodon-Antworten wurden folgende beliebte Farbschemata erwähnt:
Weiterhin bestehende Probleme
- An Stellen, an denen mehrere Programme zusammenspielen, etwa bei
tmux, SSH und Vim, können zusätzliche Farbprobleme entstehen. - Schon die Wahl eines guten Farbschemas ist schwierig.
- Nutzer mit Farbsehschwäche können es schwer haben, ein passendes Farbschema zu finden.
- Wenn die Hintergrundfarbe der Cursor- oder Auswahlfarbe zu ähnlich ist, wird das Auffinden erschwert.
- Es ist schwer, Farben zu finden, die in allen Programmen gut funktionieren, und wie beim Fall
ngrokkann es zu Konflikten kommen.
- Programme wie Nethack oder Midnight Commander, die ein bestimmtes „klassisches“ Erscheinungsbild auf Basis der Standard-ANSI-Farben erwarten, können mit Themes wie Solarized ungewohnt aussehen.
- Ein möglicher Ansatz ist, die ANSI-Palette direkt vor dem Start eines Programms zu ändern.
- Vor dem Start von Nethack könnte man zum Beispiel Gelb auf ein helleres Gelb ummappen.
- Für Nutzer, die möchten, dass Farben einfach funktionieren, ist viel manuelle Konfiguration eine Belastung. Deshalb sind sinnvolle Standardwerte und Funktionen wie minimum contrast wichtig.
1 Kommentare
Meinungen auf Hacker News
Beim Versuch, ein helles Farb-Theme für das System richtig hinzubekommen, bin ich auf all diese und noch mehr Probleme gestoßen; zwei davon fand ich besonders interessant.
Rückblickend ist es offensichtlich, aber ich war überrascht, dass helle Themes je nach Bildschirm deutlich subtiler unterschiedlich wirken als dunkle Themes. Hardware- und Softwareeinstellungen führen zwar zu Unterschieden in der Farbausgabe, doch Veränderungen in hellen Bereichen werden viel stärker wahrgenommen als Veränderungen in dunklen Bereichen.
Außerdem muss man manchmal auf Umgebungen wie die Linux- oder BSD-Konsole zurück, in denen Schriftarten und Unterstützung für schicke Farben begrenzt sind. Dann können
fdoderexa/lsd/whateverunangenehm oder praktisch unbenutzbar werden, besonders wenn man Letzteres auflsgemappt hat. Nach langem Herumprobieren habe ich fbterm so eingerichtet, dass ich auch ohne X brauchbare Terminal-Funktionen habe, aber fbterm hat seine eigenen Probleme. Wenn man ein Vim-Farbschema einrichtet, sollte man ein Fallback-Theme für funktionsarme Konsolen bereithalten – oder viel üben, Vim-Befehle blind einzugeben :DEdit: Kein Setup für ernsthafte Arbeit, aber ein gestylter fbterm-Screen, der zeigt, was ohne X möglich ist: https://i.imgur.com/RbDRgtD.png
Deshalb verbringe ich beim Einstellen der richtigen Belichtung und des passenden Kontrasts viel Zeit damit, die Highlights „genau richtig“ aussehen zu lassen. Digitale Abzüge mache ich nicht, aber ich vermute, dass dasselbe Prinzip gilt.
Leider neigen „moderne“ Frameworks für Kommandozeilen-Tools, die oft in JavaScript geschrieben sind, dazu, das zu ignorieren.
https://www.gnu.org/software/gettext/manual/html_node/The-TE...
Es gibt auch eine Einstellung, die Datenpunkten einen schwachen „Glow“-Effekt in derselben Farbe gibt, sodass sie wie leuchtende Punkte aussehen. Aus Sicht der Farbsättigung – also des Signal-Rausch-Verhältnisses über das gesamte Spektrum – ergibt ein schwarzer Hintergrund Sinn.
Etwa zehn verschiedene Farben lassen sich fast problemlos verwenden. Außerdem haben sie den Vorteil, Reihenfolge-/Distanzinformationen zu vermitteln: Gelb liegt zwischen Rot und Grün, Orange zwischen Rot und Gelb usw., was eine feinere Abstufung ermöglicht und es leichter macht, zu interpretieren, wie nah zwei Farben beieinanderliegen.
Eigentlich halte ich es nicht für so schwierig.
Schritt 1: Die meisten Terminal-Emulatoren haben standardmäßig miese Farbpaletten, also ändert man sie. Persönlich mag ich Solarized, besonders das dunkle Theme, aber das helle ist auch in Ordnung. Auch abseits von Solarized gibt es viele Themes, bei denen jede Farbe auf dem Standardhintergrund lesbar ist.
Schritt 2: Man sollte Kommandozeilen-Tools meiden, die standardmäßig 8-Bit- oder 24-Bit-Farb-Escape-Sequenzen verwenden. Das mag umstritten sein, aber persönlich halte ich das für nutzerfeindlich. Ich habe bereits die für meine Anforderungen an die Lesbarkeit beste Terminal-Farbpalette ausgewählt; es hilft nicht, wenn ein Entwickler sich für eine Art Pseudo-Designer hält und sie überschreibt. Ein Tool kann Optionen anbieten, um darin Themes zu aktivieren, aber das sollte optional sein, nicht der Standard.
Da ich den Großteil meines Lebens im Terminal verbringe, reichen diese beiden Regeln schon aus, um mit fast keinem Konfigurationsaufwand eine konsistente und gut lesbare Terminal-Umgebung zu schaffen. Das eigentliche Problem ist, dass wir es Entwicklern viel zu sehr durchgehen lassen, 8-Bit- und 24-Bit-Farb-Escape-Codes zu verwenden.
Über die Jahre bin ich zu dem Schluss gekommen, dass man neue Funktionen den Nutzern direkt vor Augen führen und gute Defaults entschieden durchsetzen muss. Andernfalls werden Funktionen kaum genutzt.
8-Bit- und 24-Bit-Farben sind bereits Funktionen, die optional genutzt werden und konfigurierbar sind. Ein gut funktionierendes Terminal-Programm sollte anhand der Umgebungsvariablen TERM und COLORTERM entscheiden, ob solche Farben verwendet werden.
Viele Anwendungen erwarten, dass Text in „bright black“ auf dem Hintergrund sichtbar ist. Beispiele gibt es hier reichlich: https://github.com/altercation/solarized/issues/220
Fast alle anderen Farbpaletten stellen „bright black“ als Grau dar, das auf schwarzem Hintergrund lesbar ist.
Zum Beispiel setzt pamix den Hintergrund auf Schwarz, und die tmux-Statuszeile oder ngrok machen Ähnliches. Dann rutscht man in ein Kaninchenloch, um das zu behandeln.
Beides deutet darauf hin, dass die Lösung im Terminal liegen sollte. Schon das Terminal-Programm sollte vernünftige Standardfarben haben; Blau sollte erkennbar blau sein, und häufige Formen von Farbsehschwäche sollten berücksichtigt werden. Reines Rot auf schwarzem Hintergrund ist zum Beispiel schwer zu lesen, daher sollte man nicht einfach nur
ff0000verwenden, sondern es zumindest ein wenig mischen.Wenn das Terminal vernünftige Defaults hat, können Kommandozeilenprogramme die standardmäßigen 16 Farben verwenden. Der Versuch, hier 24-Bit-Farben zu verwenden, bedeutet im Grunde: „Ich habe aufgegeben, dass die Terminal-Seite Vernunft bereitstellt“ oder „Ich weiß es am besten“, und am Ende müssen Nutzer N Programme jeweils einzeln konfigurieren. Keine Themes in Kommandozeilen-Apps zu definieren, halte ich für die beste Richtung.
Bei Websites und Schriftarten sehe ich es ähnlich. Inhalte sollten als HTML bereitgestellt werden, damit Nutzer sie so betrachten können, wie sie möchten, und das Seitenlayout sollte fließen statt wie ein Magazinlayout fest verdrahtet zu sein.
Bei Desktop-Software ist es ähnlich. Der Wayland-Compositor sollte sich Fensterpositionen merken. Dass jedes X-Programm seine eigene Fensterposition speichert und wiederherstellt, war unsinnig. Wayland sagt, Informationen über die Umgebung zu kennen sei ein Sicherheitsproblem, und dem stimme ich zu; dann ist dieses Merken aber Aufgabe der Desktop-Umgebung. So könnte man diesen Code auch aus allen Apps entfernen.
Die Frage „Wo im Software-Stack sollte das behandelt werden?“ taucht in vielen Bereichen immer wieder auf. Wenn man entscheidet, wohin etwas gehört, muss man zuerst beantworten, was das Ziel ist; meine Antwort tendiert immer zu Einfachheit und Wartbarkeit.
Julias Artikel erwähnt diese Idee ebenfalls, geht aber nicht auf konkrete Mühen ein. In dem Zusammenhang frage ich mich auch, ob Terminal-Farbpaletten nur die standardmäßigen 16 Farben betreffen oder auch die RGB- und Graustufenbereiche anfassen. 8-Bit- und 16-Bit-Farben ließen sich ja ebenfalls an Anforderungen an die Lesbarkeit anpassen.
Wenn man Farben auswählt, sollte man sie mit dem neuen APCA-Algorithmus (Advanced Perception of Colour) prüfen.
APCA soll in Zukunft in WCAG 3.0 die bisherige x:y-Kontrastmethode ersetzen, auch wenn das noch einige Jahre dauern kann. Berücksichtigt werden sollen Schriftgröße, Gewicht, Vorder- und Hintergrund, sogar Umgebungslicht und Umgebung sowie der beabsichtigte Einsatzzweck.
Es wäre ziemlich gut, wenn ein Terminal-Emulator den Helligkeitssensor des Geräts nutzen könnte, um den Kontrast passend zu den Umgebungsfaktoren zu optimieren.
Es gibt auch völlige Wahnsinnige, die Farben komplett abschalten wollen[0]. Ich würde es gern selbst ausprobieren, aber ich mag auch hübsche Farben
[0] https://no-color.org/
:syntax offist meine einzige Vim-Konfiguration. Denn Terminal-Farbpaletten wurden von Computerprogrammierern, Elektroingenieuren und Leuten entworfen, die nicht wissen, dass bei Farben nicht die Farbe selbst wichtig ist, sondern die HelligkeitIch frage mich, ob es eine Korrelation gibt zwischen Leuten, die im Terminal keine Farben wollen, und Leuten, die im Browser starke Werbeblocker nutzen oder häufig den Lesemodus verwenden
Wenn man Ausgaben per Pipe weitergibt, werden Farben ohne jeglichen Nutzen nur zu einer Last. Im Kern geht es eher um Wahlfreiheit
Noch schlimmer wird es, wenn man zwischen Linux und Windows wechselt. Die Standard-Farbnutzung vieler Tools ist praktisch unbrauchbar oder macht sie tatsächlich unbenutzbar
Manche Tools bieten die Option
--color=never, und ziemlich viele respektieren NO_COLOR. Leider nicht alle, und selbst Tools, die das tun, nehmen manchmal an, dass dieser Modus nur für Pipelines oder Programmierschnittstellen gedacht ist. Daraus ergeben sich allerlei unschöne VerhaltensweisenEs gibt ein konsistentes Farbpaletten-Konzept mit sinnvoller Farbtemperatur, und es tendiert ins Warme, damit die Augen weniger ermüden, wenn man nicht so viel Blaulicht anstarrt. Eine alacritty-Farbpalette wird ebenfalls mitgeliefert
Ich wollte schon lange ein helles Theme im Terminal verwenden, habe aber immer aufgegeben, weil so viele Programme benutzerdefinierte Nicht-ANSI-Farben nutzen, die für dunkle Terminal-Hintergründe optimiert sind
Bei einigen Programmen kann man die Farben konfigurieren, aber jedes einzelne Programm einzeln einzustellen, fühlte sich viel zu umständlich an. Deshalb nutze ich jetzt einen dunklen Terminal-Hintergrund, habe mir aber selbst ein ANSI-Theme ausgesucht, bei dem alle Farben nach meinen Maßstäben ausreichend Kontrast haben und auch die APCA/WCAG-3-Kontrastprüfung bestehen. Ich bin zufrieden :)
Mit der OSC-11-Steuersequenz kann ein Programm die Hintergrundfarbe ermitteln, aber kaum ein Programm kümmert sich darum. Meistens denkt jemand, eine gelbe Warnmeldung sehe cool aus, und damit ist die Sache erledigt
Das führt zu einem weiteren Problem. Es gibt populäre Terminals, die nicht xterm-kompatibel sind, aber standardmäßig
TERM=xterm256-colorsetzenEdit: Ich habe gerade
xtermcontrolentdeckt; damit kann man die Hintergrundabfrage in Skripten abstrahieren, und es ist in allen großen Paketmanagern enthaltenHeutzutage habe ich aufgegeben und konfiguriere die meisten Apps manuell so, dass sie ANSI-Farben verwenden. Bei fzf zum Beispiel gibt es dafür Kommandozeilen-Schalter. Nur Vim und Emacs lasse ich als Nicht-ANSI-Apps und passe sie an die Farbpalette an, die ich im übrigen Terminal verwende. Wenn man will, kann man mit etwas wie vim-dim noch einen Schritt weiter gehen
In Emacs gibt es das schwer zu entdeckende
frame-background-mode[0], das faktisch entwederlightoderdarkistWenn man sich fragt, warum Emacs für bestimmte Elemente seltsame Farben gewählt hat, liegt es meistens daran, dass frame-background-mode falsch ist
[0]https://doc.endlessparentheses.com/Var/frame-background-mode...
Bei einem Terminal mit dunklem Hintergrund und weißer Schrift:
export COLORFGBG='15;0'Bei einem Terminal mit hellem Hintergrund und schwarzer Schrift:
export COLORFGBG='0;15'Ich nutze seit fast zehn Jahren eine leicht angepasste FlatUI-Farbpalette, und in der Praxis gab es nur sehr selten Situationen, in denen sie Probleme gemacht hat
PNG-Datei: https://drive.google.com/file/d/1mkMESeGf7MNdKa-rPDx7Yf9BDit...
imgur-Link: https://imgur.com/a/flatui-7mqVZAY
Grundlage: https://flatuicolors.com/palette/defo
Ich nutze mein Theme ebenfalls seit fast zehn Jahren. Es funktioniert gut in iTerm, vim, Emacs, vscode usw.
Ich nutze Apple Terminal schon lange, und früher gab es eine ordentliche Sammlung von Farbschemata namens „Terminal Fructose“, sodass ich je nach Aufgabe unterschiedliche Hintergrundfarben verwendet habe. Apple hat das irgendwann auch als Themes eingebaut.
Allerdings hat Apple die Unterstützung für Terminal vernachlässigt; es unterstützt nicht mehr als 256 Farben und es fehlen auch modernere Funktionen. Mit meiner Neovim+LazyVim-Konfiguration passt es ebenfalls nicht gut zusammen.
Auf der Suche nach einem besseren Terminal bin ich zwischen iTerm2, Kitty, Alacritty und Wezterm hin und her gewechselt. Sie sind zwar alle moderner, aber eine grundlegende Option „New Window with Profile ...“, um schnell Fenster mit unterschiedlichen Hintergrundfarben/Themes zu öffnen, schien keiner davon zu haben. Zumindest nicht ohne etwas Gefrickel.
Inzwischen bin ich bei Wezterm geblieben, vor allem weil es auch unter Windows läuft und ich die
wezterm.lua-Konfiguration teilen kann. Nebenbei: Windows Terminal ist tatsächlich ziemlich gut. Für schnelle Aufgaben, etwapython3als REPL für Berechnungen oder Tests mit Hexadezimal-/Binärwerten, starte ich trotzdem noch Apple Terminal.Ein paar Funktionen aus iTerm2 vermisse ich zwar, aber die meisten davon haben mit der Maus zu tun. Ansonsten habe ich es an ein paar Abenden so eingerichtet, wie ich es wollte, und seit ich
cmd-nso eingestellt habe, dass ein neues Fenster im Standardverzeichnis statt im aktuellen Verzeichnis geöffnet wird, bin ich zufrieden damit.launch_menu[1], das eine andere Shell startet, oder inaugment-command-palette[2], das Einträge zur Command Palette hinzufügt, hineinfrickeln.[1] https://wezfurlong.org/wezterm/config/lua/config/launch_menu...
[2] https://wezfurlong.org/wezterm/config/lua/window-events/augm...
Stimmt, es braucht etwas Gefrickel. Aber eine sehr konkrete Funktion genau so zu programmieren, wie man sie haben will, ist der Gipfel der WezTerm-typischen Erfahrung.
Nicht nur in Terminals, auch bei Neon- oder LED-Schildern ist Blau nachts für die Augen am anstrengendsten.
Aus der Ferne wirkt es immer verschwommen und unscharf. Wenn ich sehe, wie große Unternehmen riesige Schilder mit blauem Licht aufhängen, wundere ich mich, dass sie viel Geld ausgeben, ohne zu merken, dass die Leute sie gar nicht lesen können.
Ich habe auf meinem Laptop den automatischen Wechsel zwischen hellem und dunklem Modus passend zum Tageslichtzyklus aktiviert, und es ist erstaunlich, wie viele Anwendungen mit Farbausgabe kaputtgehen, wenn auf dunkle Schrift auf hellem Hintergrund umgestellt wird.
Wenn man ein Kommandozeilen-Tool baut und unbedingt Farben verwenden muss, sollte man nur die ANSI-16-Farben nutzen oder Endnutzer das Farbschema ändern lassen.