echte Farben in der Bash-Eingabeaufforderung?

726
ronakg

Ist es möglich, echte Farben in der Bash-Eingabeaufforderung zu verwenden? Ich verwende iTerm2 unter MacOS, das echte Farben unterstützt. Aber nicht sicher, wie ich echte Farben für meine Bash-Eingabeaufforderung verwende.

Im Moment verwende ich tput af <number>in meinem Bash-Prompt, um Farben zu bekommen.

4
Es kann davon abhängen, welche Terminals iTerm2 emulieren soll und ob diese Terminals 24-Bit-Farbe verarbeiten können. Es kann auch davon abhängen, was die termcap- oder terminfo-Datenbank für diese Terminals sagt. Spiff vor 6 Jahren 0

1 Antwort auf die Frage

1
Peter Westmacott

Dies scheint möglich zu sein. z.B:

export PS1="\[$(printf "\x1b[48;2;15;100;50m\]A nice dark green [rgb(15,100,50)]:\[\x1b[0m")\] "

export PS1="\[$(printf "\x1b[38;2;255;100;250m\]A lovely shade of pink [rgb(255,100,250)]:\[\x1b[0m")\] "

Es gibt einen schöneren Weg als nach $ (printf ...) zu rufen. Ich hoffe das gibt es, aber ich weiß es nicht. Der Schlüssel ist es, alle ‚meta‘ Material zu umwickeln (aber nicht der eigentliche Inhalt) in \[und um \]die Schale zu verhindern, sie als Teil der Eingabeaufforderung Länge Zählen, so dass es gut spielt, wenn neu gezeichnet zu sein (z. B., wenn durch die Geschichte Radfahren.)

Die letzten drei Zahlen in jedem \x1b[...mAusdruck stehen für die gewünschten Werte für Rot, Grün und Blau (von 0 bis 255).

Die erste Zahl setzt den Hintergrund (48) oder den Vordergrund (38). Ich weiß nicht, was die andere Zahl macht, aber das Herumspielen mit einem Zusatz \x1b[38;4mscheint den Text unterstrichen zu setzen.

Sie können möglicherweise weitere Informationen aus dieser Liste erhalten: https://gist.github.com/XVilka/8346728