Mogę zmienić kolor za pomocą preferencji, ale jak mogę zmienić kolor tła i kolor tekstu terminala za pomocą wiersza poleceń?
dconf
. Odpowiedziałem wcześniej na podobne pytanie: askubuntu.com/a/628129/295286
\033[00;34mFOO\033[00m
Mogę zmienić kolor za pomocą preferencji, ale jak mogę zmienić kolor tła i kolor tekstu terminala za pomocą wiersza poleceń?
dconf
. Odpowiedziałem wcześniej na podobne pytanie: askubuntu.com/a/628129/295286
\033[00;34mFOO\033[00m
Odpowiedzi:
Na niektórych terminalach kompatybilnych z XTerm / ANSI (jak xterm
i gnome-terminal
) można ustawić kolory przy użyciu palety większej niż domyślna paleta 8/16 kolorów (na przykład przy użyciu palety 88 kolorów, 256 kolorów lub 16777216 kolorów (RGB) , zarówno xterm
i gnome-terminal
obsługiwać zarówno 256 kolory i kolory-16777216 (RGB) palety); pamiętaj, że powłoka może to zmienić (tak jest np. w przypadku zsh
).
Oto skrypt wyświetlający listę kolorów w palecie 256 kolorów wraz z ich kodem kolorów ANSI w terminalach kompatybilnych z XTerm / ANSI z obsługą palety 256 kolorów:
#!/bin/bash
for((i=16; i<256; i++)); do
printf "\e[48;5;${i}m%03d" $i;
printf '\e[0m';
[ ! $((($i - 15) % 6)) -eq 0 ] && printf ' ' || printf '\n'
done
W zależności od tego, czy chcesz zastosować kolor na pierwszym planie, czy na tle, użyj <fg_bg>
wartości 38
lub 48
(odpowiednio) w następującym poleceniu:
printf '\e[<fg_bg>;5;<ANSI_color_code>m'
Na przykład, aby ustawić kolor pierwszego planu ( <fg_bg>
= 38
) na czerwony ( <ANSI_color_code>
= 196
), a kolor tła ( <fg_bg>
= 48
) na czarny ( <ANSI_color_code>
= 0
):
printf '\e[38;5;196m Foreground color: red\n'
printf '\e[48;5;0m Background color: black\n'
Konieczne jest przerysowanie znaku zachęty printf '\e[K'
, aby kolor tła został zastosowany do całej linii, a kolor pierwszego planu - do kursora:
To samo można osiągnąć za pomocą wartości RGB zamiast kodów kolorów ANSI w kompatybilnym terminalu; w zależności od tego, czy chcesz zastosować kolor na pierwszym planie, czy na tle, użyj <fg_bg>
wartości 38
lub 48
(odpowiednio) w następującym poleceniu:
printf '\e[<fg_bg>;2;<R>;<G>;<B>m'
Na przykład, aby ustawić kolor pierwszego planu ( <fg_bg>
= 38
) na czerwony ( <R>
= 255
, <G>
= 0
, <B>
= 0
), a kolor tła ( <fg_bg>
= 48
) na czarny ( <R>
= 0
, <G>
= 0
, <B>
= 0
):
printf '\e[38;2;255;0;0m Foreground color: red\n'
printf '\e[48;2;0;0;0m Background color: black\n'
Ponownie konieczne jest przerysowanie znaku zachęty printf '\e[K'
, aby kolor tła został zastosowany do całej linii, a kolor pierwszego planu - do kursora:
Za pomocą jednej z metod można użyć printf '\e[0m'
do zresetowania wszystkich atrybutów:
xterm
i gnome-terminal
rozpoznaje \ e [38/48, 2, R, G; Bm prawdziwe kolorów sekwencji sterujących; jednak xterm
zaokrągla rzeczywisty kolor do najbliższej w 256-paletowej palecie kolorów. gnome-terminal
wyświetla dokładny prawdziwy kolor podany w sekwencji ucieczki.
xterm
), jeśli kursor znajduje się na bardzo prawej krawędzi (wizualnie wyświetlany w kolumnie po prawej stronie, ale logicznie już poza tym, ponieważ znak był już wydrukowany w kolumnie po prawej stronie), ostatnia litera jest usuwana. Zobacz np. Bugzilla.gnome.org/show_bug.cgi?id=740789 lub savannah.gnu.org/bugs/?36831 .
Informacje znalezione na tej stronie , z wyjątkiem kolumny podglądu:
Sekwencje składają się ze znaku Escape (często reprezentowanego przez „ ^[
” lub „ <Esc>
”), a następnie kilku innych znaków: „ ^[FCm
” (gdzie FC
jest jedną z liczb na poniższej liście punktowanej).
W bash
The Esckod może być jedną z następujących czynności:
\e
\033
(ósemkowy)\x1B
(szesnastkowy)Uwaga 1: Sekwencja „ \e[0m
” usuwa wszystkie atrybuty (formatowanie i kolory). Dobrym pomysłem może być dodanie go na końcu każdego kolorowego tekstu.
Uwaga 2: Kolory pierwszego planu i tła mogą się różnić w zależności od konfiguracji terminala i nie wszystkie kolory są obsługiwane .
0
: Resetuj / usuń wszystkie atrybuty modyfikatora, pierwszego planu i tła: echo -e "\e[0mNormal Text"
1
: Pogrubienie / Jasność: echo -e "Normal \e[1mBold"
2
: Dim: echo -e "Normal \e[2mDim"
4
: Podkreślono: echo -e "Normal \e[4mUnderlined"
5
: Miga (nie działa w większości terminali oprócz XTerm): echo -e "Normal \e[5mBlink"
7
: Odwróć / Odwróć: echo -e "Normal \e[7minverted"
8
: Ukryty (przydatny do poufnych informacji): echo -e "Normal \e[8mHidden Input"
21
: Resetuj / Usuń pogrubienie / jasne: echo -e "Normal \e[1mBold \e[21mNormal"
22
: Resetuj / Usuń dim: echo -e "Normal \e[2mDim \e[22mNormal"
24
: Resetuj / Usuń podkreślenie: echo -e "Normal \e[4mUnderlined \e[24mNormal"
25
: Resetuj / Usuń miganie: echo -e "Normal \e[5mBlink \e[25mNormal"
27
: Resetuj / Usuń bieg wsteczny / odwrócony: echo -e "Normal \e[7minverted \e[27mNormal"
28
: Resetuj / Usuń ukryty: echo -e "Normal \e[8mHidden \e[28mNormal"
39
: Domyślnie (zwykle zielony, biały lub jasnoszary): echo -e "Default \e[39mDefault"
30
Czarny: echo -e "Default \e[30mBlack"
(najlepiej w połączeniu z kolorem tła: echo -e "Default \e[30;107mBlack on white"
)31
: Czerwony (nie używaj z zielonym tłem)32
: Zielony33
: Żółty34
: Niebieski35
: Magenta / Purple36
: Cyan37
: Jasny szary90
: Ciemny szary91
: Jasnoczerwony92
: Jasnozielony93
: Jasny zółty94
: Jasny niebieski95
: Jasny magenta / różowy96
: Jasnobłękitny97
: Biały49
: Domyślny kolor tła (zwykle czarny lub niebieski)40
: Czarny41
: Czerwony42
: Zielony43
: Żółty44
: Niebieski45
: Magenta / Purple46
: Cyan47
: Jasnoszary (nie używaj z białym pierwszym planem)100
: Ciemnoszary (nie używaj z czarnym pierwszym planem)101
: Jasnoczerwony102
: Jasnozielony (nie używaj z białym pierwszym planem)103
: Jasnożółty (nie używaj z białym pierwszym planem)104
: Jasnoniebieski (nie używaj z jasnożółtym pierwszym planem)105
: Jasny magenta / różowy (nie używaj z jasnym pierwszym planem)106
: Jasnobłękitny (nie używaj z białym pierwszym planem)107
: Biały (nie używać z jasnym pierwszym planem)Aby ustawić jednocześnie kolory pierwszego planu i tła, użyj formularza echo -e "\e[S;FG;BGm"
. Na przykład: echo -e "\e[1;97;41m"
(pogrubiony biały pierwszy plan na czerwonym tle)
256 opcji kolorów można znaleźć na stronie źródłowej.
Jeśli ma to na celu przypadkową zmianę kolorów :
Możesz użyć polecenia setterm :
setterm -term linux -back <background_colour> -fore <text_color> -clear
spośród kolorów, które możesz wybrać (zarówno na przednim, jak i na tle):
black|blue|green|cyan|red|magenta|yellow|white|default
więcej opcji:
setterm -help
W 14.04 nie znalazłem opcji dconf
ustawiania kolorów ani terminala. Możesz jednak użyćgconftool
Najpierw musisz uzyskać nazwę swojego profilu:
gconftool-2 --get /apps/gnome-terminal/global/profile_list
Następnie, aby ustawić kolory tekstu swojego profilu:
gconftool-2 --set "/apps/gnome-terminal/profiles/<profile_name>/foreground_color" --type string "#FFFFFF"
na przykład, aby ustawić kolor tekstu na biały
To samo z kolorem tła:
gconftool-2 --set "/apps/gnome-terminal/profiles/<profile_name>/background_color" --type string "#000000"
na przykład, aby ustawić kolor tła na czarny
Alternatywnie, aby ustawić nazwę koloru (kolorów), możesz po prostu użyć white
lub green
z tej samej palety co polecenie setterm, np .:
gconftool-2 --set "/apps/gnome-terminal/profiles/<profile_name>/background_color" --type string black
dconf write /org/gnome/terminal/legacy/profiles:/:<profile_id>/background-color "'rgb(0,0,0)'"
udało się.
gconftool-2
(dla Ubuntu 14.04 i być może kilku kolejnych wydań) dconf
lub gsettings
w nowszych wersjach Ubuntu zmień ustawienia gnome-terminal i od razu zacznij działać na wszystkich kartach i oknach tego samego profilu. Nie sądzę, żeby OP szukał takiego zachowania.
Różne kody kolorów użyte do uzyskania kolorowych wydruków mogą być również użyte do uzyskania kolorowego tła :
40 black
41 red
42 green
43 yellow
44 blue
45 magenta
46 cyan
47 white
Dlatego następujące polecenie zmienia kolor tła na czerwony:
$ echo -e '\e[0;41m'
W zależności od powłoki, emulatora terminala itp. Może nie być potrzebny -e
.
Zobacz odpowiedź kos dotyczącą przełączania pierwszego planu lub tła na określony kolor palety, a nawet bezpośredni kolor RGB w niektórych terminalach. Efekt takiej sekwencji trwa, dopóki nie zostanie wybrany inny kolor (lub nie zostanie przywrócony domyślny).
Innym podejściem obsługiwanym przez niektóre emulatory terminali jest ponowne zdefiniowanie dokładnych wartości RGB domyślnych kolorów pierwszego planu i tła terminala przy użyciu sekwencji specjalnych OSC 10/11:
echo -ne '\e]10;#123456\e\\' # set default foreground to #123456
echo -ne '\e]11;#abcdef\e\\' # set default background to #abcdef
Prawdopodobnie potrwa to znacznie dłużej (dopóki nie zostanie zastąpione przez inny OSC 10/11 lub zresetowany przez OSC 110/111), ale w przeciwieństwie do podejścia dconf, nadal wpływa to tylko na aktualny terminal.