2 Punkte von GN⁺ 2024-10-04 | 1 Kommentare | Auf WhatsApp teilen
  • 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 ngrok treten 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, unbuffer sowie 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}m eine Vordergrund-Farbnummer angegeben werden.
  • 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 ls fü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 TERM den 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
  • fd verwendet 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.
  • bat verwendet 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, bat und delta unterstü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 ansi verwendet bat die 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 ls für Verzeichnisse und ausführbare Dateien helle Farben verwendet, können diese grau erscheinen.
  • 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-shell setzt die Farben 16 bis 21, um base16-vim zusätzliche Farben bereitzustellen.
    • Wenn ngrok versucht, 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.

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 TERM nicht unterstützt, funktionieren Farben möglicherweise nicht korrekt.
  • Systeme verwenden die terminfo-Datenbank. Fehlt der TERM-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 ssh statt nur ssh vor.
  • Beim Verbinden von Befehlen per Pipe werden Farben manchmal deaktiviert.
    • fd | less kann ohne Farben ausgegeben werden.
    • Wenn die Ausgabe etwa an Tools wie grep weitergereicht wird, ist reiner Text ohne Escape-Codes oft nützlich.
  • Wenn man Farben beibehalten möchte, kann man unbuffer fd | less -r verwenden.
    • 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=always immer Farben ausgeben, etwa fd.

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=never kann man Farben deaktivieren.
    • Über die Umgebungsvariable LS_COLORS lassen sich die von ls verwendeten Farben anpassen.
    • Einige Programme unterstützen NO_COLOR=true; eine Liste gibt es auf no-color.org.
  • 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" ls die 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 termguicolors standardmäß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-shell für die Vim-Integration die Farben 16 bis 21 speziell setzt.
    • Wenn man diesen Teil entfernt, lassen sich Konflikte wie der orangefarbene Hintergrund von ngrok vermeiden.

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 .vimrc einige 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-vim mehr 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

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 ngrok kann 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

 
GN⁺ 2024-10-04
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 fd oder exa/lsd/whatever unangenehm oder praktisch unbenutzbar werden, besonders wenn man Letzteres auf ls gemappt 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 :D
    Edit: 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

    • Dass helle Themes von Bildschirm zu Bildschirm subtiler unterschiedlich wirken, überrascht mich nicht. Ich mache analoge Schwarzweiß-Abzüge auf Film, und es ist bekannt, dass das menschliche Auge feine Tonwertänderungen in den hellen Bereichen eines Abzugs deutlich besser wahrnimmt als in den dunklen Bereichen.
      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.
    • Normalerweise sollte man sich auf eine korrekt gesetzte TERM-Variable verlassen können, und Kommandozeilen-Utilities sollten die Funktionen respektieren, die sich aus der TERM-Variable ableiten lassen.
      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...
    • Ich habe kürzlich in einem Excel-Diagramm versucht, eine große Anzahl von Datenreihen in unterschiedlichen Farben darzustellen, und die beste Wahl, um viele Farben leicht unterscheiden zu können, war ein einfarbiges Spektrum aus Regenbogenfarben auf schwarzem Hintergrund.
      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.
    • Selbst mit einer tollen Schriftart und einem gut aussehenden Farb-Theme kann ein einziger Hintergrund, der bestimmte Zeichen schwer lesbar macht, alles ruinieren
  • 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.

    • Das berührt die Frage nach guten Defaults. Wenn Nutzer etwas konfigurieren müssen, müssen sie zuerst wissen, dass es konfigurierbar ist, und es dann auch tatsächlich konfigurieren. Das ist eine hohe Hürde, die nur sehr wenige Nutzer nehmen.
      Ü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.
    • Besonders Solarized Dark eignet sich nicht gut für die Terminal-Nutzung. Der Autor hat „bright black“ nämlich auf eine Farbe gesetzt, die fast identisch mit dem Hintergrund ist.
      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.
    • Selbst wenn es ein Theme gibt, bei dem jede Farbe auf dem Standardhintergrund lesbar ist, gibt es Anwendungen, die sowohl Text- als auch Hintergrundfarbe festlegen.
      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.
    • Man sollte zuerst fragen: „Was ist die beste Art, damit umzugehen?“ Dabei muss man definieren, was gut bedeutet. Persönlich bevorzuge ich das Prinzip, dass benutzerspezifische Einstellungen an einer Stelle liegen sollten und die Auswirkungen auf Programme, etwa gemessen an Codezeilen, minimal sein sollten.
      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 ff0000 verwenden, 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.
    • Ich frage mich, wie schwierig es in der Praxis ist, Kommandozeilen-Tools zu meiden, die standardmäßig 8-Bit- oder 24-Bit-Farb-Escape-Sequenzen verwenden.
      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.

    • Meine aktuelle Terminal-Farbpalette habe ich selbst so abgestimmt, weil ich kein fertiges Theme finden konnte, das für alle ANSI-Farben meine persönlichen Kontrastanforderungen erfüllt.
  • 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 off ist 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 Helligkeit
    • Wenn man sich an ein monochromes Terminal gewöhnt hat, empfindet man die meisten Farben irgendwann als unruhig und ablenkend
      Ich 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
    • Farbsequenzen sind nicht portabel und bekanntermaßen problematisch. Zum Beispiel können farbige pytest-Berichte eine Jupyter-Session zum Absturz bringen
      Wenn man Ausgaben per Pipe weitergibt, werden Farben ohne jeglichen Nutzen nur zu einer Last. Im Kern geht es eher um Wahlfreiheit
    • Ich gehöre auch zu dieser Fraktion. Besonders beim Coden finde ich fast jede Einfärbung ablenkend und kontraproduktiv
      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 Verhaltensweisen
    • Ich bewege mich auch in diese Richtung. Ich habe mir zenbones angesehen und bin am Ende bei https://github.com/savq/melange-nvim gelandet
      Es 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 :)

    • Für Menschen mit Aberrationen höherer Ordnung des Sehens ist Dark Mode von vornherein keine Option. Umgekehrt kann das für manche Menschen mit Katarakt für den hellen Modus gelten
      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-color setzen
      Edit: Ich habe gerade xtermcontrol entdeckt; damit kann man die Hintergrundabfrage in Skripten abstrahieren, und es ist in allen großen Paketmanagern enthalten
    • Eine Zeit lang habe ich mich als 16-Farben-Terminal ohne 256-Farben-Unterstützung ausgegeben, um dieser Konfigurationshölle zu entgehen. Weil ich fand, keine Farben seien besser als schlechte Farben, habe ich auch https://no-color.org/ ausprobiert
      Heutzutage 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
    • Viele Terminals, zum Beispiel konsole aus trinity/tde3, erlauben es, die Standardfarben direkt anzupassen, was hilfreich ist
    • Unter macOS hatte ich mit iTerm und den Programmen, die ich nutze, zum Beispiel neovim, keine Probleme; schon im Auslieferungszustand sah es in Ordnung aus
  • In Emacs gibt es das schwer zu entdeckende frame-background-mode[0], das faktisch entweder light oder dark ist
    Wenn 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...

    • Das Grundproblem liegt oft darin, dass das Terminal die Variable COLORFGBG nicht setzt
      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'
    • Besserer Link: <https://www.gnu.org/software/emacs/manual/html_node/emacs/Fa...>
  • 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

    • Sieht ähnlich aus wie das One Dark-Theme, das meines Wissens aus dem Atom-Editor stammt
      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, etwa python3 als REPL für Berechnungen oder Tests mit Hexadezimal-/Binärwerten, starte ich trotzdem noch Apple Terminal.

    • iTerm hat genau diese Funktion.
    • Seltsam. Ich habe Apple Terminal sehr schnell zugunsten von iTerm2 aufgegeben, gerade wegen der Unterstützung für „new tab with profile“.
    • Ich nutze Wezterm weiter aus zwei Gründen: Die Konfiguration lässt sich leicht über mehrere Plattformen hinweg teilen, und die Konfigurationssprache ist Lua.
      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-n so eingestellt habe, dass ein neues Fenster im Standardverzeichnis statt im aktuellen Verzeichnis geöffnet wird, bin ich zufrieden damit.
    • Wenn man in WezTerm „New Window with Profile...“ hinzufügen möchte, könnte man vermutlich etwas in launch_menu [1], das eine andere Shell startet, oder in augment-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.
    • Konsole, das KDE-Terminal, unterstützt das. Entweder über das Menü oder indem man lange auf das Symbol für einen neuen Tab drückt. Soweit ich weiß, kann man es auch unter macOS verwenden.
  • 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.