it-swarm.com.de

Gnome-Terminal verwenden helle Farben für Fettdruck

gnome-terminal wird verwendet, um Zeichen mit einer Farbe und dem Fett-Attribut in einer helleren Farbe anzuzeigen als Zeichen mit derselben Farbe, aber ohne Fett-Attribut, für insgesamt 16 mögliche Farben. Auf der Seite "Voreinstellungen" stehen noch 16 Farben zur Auswahl, es wird jedoch anscheinend immer die oberste Zeile verwendet, auch wenn die Zeichen fett gedruckt sind. Ich scheine nie die untere Reihe der verwendeten Farben zu sehen.

(Dies ist ein Problem beim Spielen von Nethack, da ich es gewohnt bin, die Monster und Objekte in 16 verschiedenen Farben zu sehen.)

Gibt es eine Möglichkeit, das alte Verhalten mit allen 16 Farben wieder herzustellen?

3
aschepler

Kurzversion: Bitte versuchen Sie TERM=xterm nethack, es wird höchstwahrscheinlich den Trick machen.

Lange Version:

Bitte probieren Sie die Ausgabe des Skripts aus meiner Antwort unter Drucken Sie ein 256-Farben-Testmuster im Terminal aus .

Das Attribut, über das Sie sprechen (\e[1m), hat eine Legacy-Verwirrung, ob es fett, hell oder beides bedeutet. Mit der erweiterten 256-Farben-Palette, die in so gut wie allen Terminal-Emulatoren und anschließend in einigen (einschließlich Gnome-Terminal) mit True-Color-Unterstützung angezeigt wird, wird die Tendenz zu diesem Attribut verschoben, das Fett bedeutet. Es ist offensichtlich nicht beabsichtigt, direkte RGB-Farben zu manipulieren, und es wäre auch mit der 256-Farben-Palette problematisch (würde es eine Zuordnung zwischen diesen Indizes geben oder würde dies zu Farben außerhalb der Palette führen?).

Es gibt mehrere Möglichkeiten, auf die ersten 16 Einträge der Palette zuzugreifen. Die alten Escape-Sequenzen mit den Nummern 30–37 (Vordergrund) und 40–47 (Hintergrund) stehen für die ersten 8. Die Vordergrundsequenzen aktivieren in Kombination mit dem Modus 1 (fett/hell) immer noch ihre hellen Gegenstücke, um die Kompatibilität mit früheren Versionen zu gewährleisten Gründe (zB dafür, dass nethack immer noch so aussieht, wie es vorher ausgesehen hat ... seufz).

Die Codes 90–97 (fg) und 100–107 (bg) stehen für die nächsten 8 Paletteneinträge, die ohnehin die hellsten sind.

Die neuen Escape-Sequenzen der 256-Farben-Palette (38; 5; 0 - 38; 5; 255 für fg, 48; 5; 0 - 48; 5; 255 für bg) verhalten sich jedoch anders (entsprechend dem Verhalten von xterm): Hier die 1 Das Attribut (fett/hell) aktiviert nur die Fettschrift und ändert die Farbe nicht.

In Ihrem Fall liegt der Unterschied wahrscheinlich darin, dass Ihre App die altmodischen Escape-Sequenzen ausgegeben hat, jetzt jedoch die neuen (256-Farben-Palette), die sich auf die Farben derselben Palette beziehen. Der einzige Unterschied besteht darin dieser modus 1 funktioniert anders: bedeutet nur hier fett und nicht fett und hell.

Dies wird wahrscheinlich durch die TERM-Umgebungsvariable verursacht, die standardmäßig xterm-256color verwendet, anstatt wie zuvor xterm. Versuchen Sie, diese Variable zurückzusetzen, und sehen Sie, wie sich dies auf Ihre App auswirkt.

Etwas, das ich nicht verstehe, ohne es zu untersuchen (und das ich aus Zeit- und Interessensgründen nicht untersuchen werde): nethack scheint ncurses zu verwenden. ncurses erlaubt der App nicht zu entscheiden, welche Art von Escape-Sequenzen verwendet werden sollen, es bietet nur Zugriff auf 256 Farben und es ist das private Geschäft von ncurses, welche Escape-Sequenz es für die ersten 16 verwendet. Wie aus der Ausgabe von tput setaf und tput setab codieren in einer seltsamen Syntax einen if-else-Zweig für die Intervalle 0–7, 8–15 und 16–255, das heißt, soweit ich weiß, dass er ausgegeben werden soll Die alten Escape-Sequenzen für die ersten 16 Farben, was in Ihrem Fall bedeuten sollte, dass sich das Verhalten auch bei TERM = xterm-256color nicht im Vergleich zu TERM = xterm ändern sollte. Ich würde Sie von hier aus weiter untersuchen lassen, wenn Sie die Eingaben, die Sie bisher erhalten haben, z. Verwenden Sie script, um die Ausgabe von nethack aufzuzeichnen, und überprüfen Sie mit einem Text-Viewer, welche Arten von Escape-Sequenzen ausgegeben werden.

6
egmont