2 Punkte von GN⁺ 2024-01-31 | 1 Kommentare | Auf WhatsApp teilen

Ich wollte Emacs nur hübsch machen — 24-Bit-Farben im Terminal verwenden

  • Die Emacs-Community ist aktiv, und über LSP werden moderne Autovervollständigung sowie Inline-Typprüfung bereitgestellt.
  • In grafischen Umgebungen unterstützt Emacs automatisch 24-Bit-Farben, im Terminal jedoch nicht.

ANSI-Escape-Codes

  • Frühe Hardware-Terminals boten untereinander inkompatible Steuerzeichen, und ANSI standardisierte diese.
  • Mit SGR (Select Graphics Rendition) lassen sich verschiedene Darstellungsattribute für Zeichen festlegen.

3-, 4- und 8-Bit-Farben

  • Als Farben eingeführt wurden, gab es acht Grundfarben; später kamen helle Farben hinzu, sodass es insgesamt 16 Farben wurden.
  • 1999 fügte Todd Larason xterm per Patch Unterstützung für 256 Farben hinzu.

Woher kommt die Unterstützung für 24-Bit-Farben?

  • Wie 8-Bit- und 24-Bit-Farben an kompatible Terminals gesendet werden, ist gut dokumentiert.
  • Im ANSI-Standardisierungsprozess der 70er Jahre und später in ISO 8613-6 (ITU T.416) der 90er wurden 38 und 48 als erweiterte Modi für Vorder- und Hintergrundfarben definiert.

Terminfo

  • Terminfo stellt eine Datenbank mit Terminal-Fähigkeiten bereit, und über die Umgebungsvariable TERM wird Programmen mitgeteilt, welchen Terminfo-Eintrag sie verwenden sollen.
  • xterm-256color und xterm-direct unterstützen jeweils 256 Farben bzw. RGB-Farben.

TERM-Konfiguration: das Semikolon-Problem

  • Da viele Terminals nur die Semikolon-Syntax unterstützen, sollte geprüft werden, ob TERM korrekt gesetzt ist.

Emacs-Konfiguration

  • Emacs dokumentiert, wie sich die Unterstützung für True Color erkennen lässt.
  • RGB ist die grundlegende Farbfunktion von Emacs und sucht zunächst nach den Strings setf24 und setb24.

Verschachtelte Terminals

  • Ein typischer Workflow verwendet mehrere ineinander verschachtelte Terminals.
  • Alle Ebenen müssen 24-Bit-Farben verstehen und korrekt umsetzen.

Grafische Terminal-Emulatoren

  • Die meisten Terminals setzen TERM auf einen sinnvollen Standardwert oder erlauben dessen Überschreibung.

ssh

  • ssh überträgt den TERM-Wert an den entfernten Host.

tmux

  • Innerhalb von tmux sollte ein TERM wie tmux-direct gesetzt werden.

Meinung von GN⁺

  • Das Wichtigste an diesem Artikel ist der Wunsch von Nutzern, auch in Terminal-Umgebungen hochwertige Farben zu verwenden, sowie die technischen Fortschritte, die das ermöglichen.
  • Die Unterstützung für 24-Bit-Farben ist eine wichtige Funktion, mit der Entwickler eine bessere User Experience bieten können, besonders bei Tools wie Code-Editoren, wo sie den visuellen Komfort deutlich verbessert.
  • Dieser Artikel dürfte für Terminal- und Emacs-Nutzer interessant und hilfreich sein und liefert nützliche Informationen für alle, die auch in einer terminalbasierten Arbeitsumgebung ein hervorragendes visuelles Erlebnis anstreben.

1 Kommentare

 
GN⁺ 2024-01-31
Hacker-News-Kommentare
  • Drückt Verwunderung über die Komplexität von Terminal-Anwendungen aus und bedankt sich bei den Entwicklern von Terminal-Anwendungen wie iTerm und Kitty.

    • Teilt einen Link mit einer Sammlung von Funktionen zum Setzen von Tab-Farben für iTerm und zsh.
    • Vergleicht terminfo mit Verbindungen zu HTTP oder SMTP über das altmodische telnet und weist auf die Komplexität textbasierter Schnittstellen hin.
  • Hält es persönlich für einfacher, die 16-Farben-Palette für jede Terminal-App anzupassen, als den Terminal-Code auf Anwendungsseite exakt abzustimmen.

    • Liefert Codebeispiele zum Setzen von Farben in der Datei .Xdefaults und in benutzerdefinierten Theme-Dateien mit der Endung .el.
    • Erwähnt, dass dadurch auch die Farben bei der Ausgabe von ls und Ähnlichem besser werden.
  • Vermutet, dass der Autor eine bessere Erfahrung gehabt hätte, wenn er export COLORTERM=truecolor gekannt hätte.

    • Weist darauf hin, dass dies in einer Fußnote der Emacs-Dokumentation zur Erkennung von True-Color-Unterstützung erwähnt wird und auch im Konsole-Screenshot erscheint, in den vielen Schichten eines Terminal-Multiplexers aber leicht übersehen werden kann.
    • Erklärt, dass man mit dieser Einstellung die komplizierte Konfiguration überspringen und direkt zu dem Schritt übergehen kann, bei dem Anwendungen verstehen, dass True Color gewünscht ist.
  • Betont, dass man bei der Nutzung von Emacs nicht zwingend ein Terminal verwenden muss und stattdessen einen „grafischen“ Frontend für MacOS, Windows, X.org oder Wayland nutzen kann.

    • Erwähnt, dass grafisches Emacs zwar so aussieht, als laufe es im Terminal, tatsächlich aber verschiedene Funktionen einschließlich eines Bildbetrachters besitzt.
    • Verweist darauf, dass in einer Emacs-Nutzerumfrage 80 % angaben, einen grafischen Frontend zu verwenden.
  • Weist darauf hin, dass sich die Computerwelt möglicherweise verrannt hat, indem produktive Systeme noch immer Terminal-Emulatoren, Editoren und Betriebssystemversionen aus den 1970er Jahren verwenden.

    • Kritisiert, dass Computer zwar millionenfach leistungsfähiger geworden sind, Aufgaben aber immer noch auf dieselbe Weise erledigt werden wie vor einem halben Jahrhundert.
  • Macht scherzhaft deutlich, dass er Emacs mit Cool Retro Term einfach nur cooler aussehen lassen wollte.

    • Stellt klar, dass er Cool Retro Term in Wirklichkeit nur für Präsentationen verwendet.
    • Erwähnt, entdeckt zu haben, dass sein Emacs bereits ab Werk 24-Bit-Farben unterstützt, und dass Syntax-Highlighting etwas nervig sei.
  • Stellt fest, dass im Windows-10-Kommandoprompt standardmäßige ANSI-Escape-Sequenzen funktionieren und auch 24-Bit-Farben gut unterstützt werden.

    • Liefert Beispielcode, der „Hello“ mit rotem Hintergrund ausgibt.
  • Erwähnt, dass der beste Punkt an Emacs gegenüber vim/neovim sei, dass GUI-Unterstützung als erstklassiger Bestandteil behandelt wird.

    • Sagt, dass es zwar gVim und zahlreiche unvollständige neovim-Frontends gebe, er aber bevorzuge, dass Emacs standardmäßig über eine echte GUI ausgeführt wird.
    • Weist darauf hin, dass Terminals viele historische Altlasten und Beschränkungen mit sich bringen, die heute unnötig sind.
    • Erwähnt, dass man bei Problemen mit Emacs auf entfernten Servern TRAMP und emacsclient nutzen könne (ob Letzteres über TCP funktioniert, wird in Klammern angedeutet).
  • Sagt, dass er diese Funktion nicht nutzen werde, weil seine Emacs-Konfiguration Farben nur sehr sparsam einsetzt, findet die Lektüre aber dennoch ausgesprochen angenehm.

    • Erwähnt, dass er sich an das kräftige Grün von tmux und das rostige Rotbraun der Emacs-Farben gewöhnt hat.
  • Kritisiert, dass es wirklich beschämend sei, wenn Standards an hohe Preise gebunden sind und Menschen deshalb gezwungen werden, auch ohne Kauf so weit zu gehen.

    • Sagt, Standards sollten öffentlich zugänglich sein; in der Vergangenheit sei es vielleicht nachvollziehbar gewesen, Druckkosten zu berechnen, aber ein PDF für 200 Dollar sei kaum zu glauben.