Jak to zrobić: podkreślenie, pogrubienie, kursywa, przekreślenie i kolor w Gnome Terminal?
Pogrubienie
italski
podkreślać
s̶t̶r̶i̶k̶e̶ ̶i̶t̶ ̶l̶i̶k̶̶e̶ ̶i̶t̶s̶ ̶h̶o̶t
background
font
<(mono, jeśli nie możesz powiedzieć)
Jak to zrobić: podkreślenie, pogrubienie, kursywa, przekreślenie i kolor w Gnome Terminal?
Pogrubienie
italski
podkreślać
s̶t̶r̶i̶k̶e̶ ̶i̶t̶ ̶l̶i̶k̶̶e̶ ̶i̶t̶s̶ ̶h̶o̶t
background
font
<(mono, jeśli nie możesz powiedzieć)
Odpowiedzi:
Terminale ANSI / VT100 i emulatory terminali nie tylko wyświetlają czarno-biały tekst; mogą wyświetlać kolory i sformatowane teksty dzięki sekwencjom zmiany znaczenia. Sekwencje te składają się ze znaku Escape (często reprezentowanego przez „^ [” lub „Esc”), a następnie kilku innych znaków: „Esc [FormatCodem”.
W Bash znak można uzyskać za pomocą następujących składni:
\e
\033
\x1B
Polecenia (dla łatwego kopiowania-wklejania):
echo -e "\e[1mbold\e[0m"
echo -e "\e[3mitalic\e[0m"
echo -e "\e[4munderline\e[0m"
echo -e "\e[9mstrikethrough\e[0m"
echo -e "\e[31mHello World\e[0m"
echo -e "\x1B[31mHello World\e[0m"
Źródło (w tym wszystkie typy kodów kolorów pierwszego planu / tła): http://misc.flogisoft.com/bash/tip_colors_and_formatting
/apps/gnome-terminal/profiles/Default/font
)
PS1
(właściwie w gnome-terminalu), ponieważ podkreślam rodzaj wklejony w tekście poniżej, co utrudnia czytanie, i oczywiście przekreślenie wyglądało po prostu źle. Posiadanie linii ułatwiłoby wykrycie poprzednich poleceń podczas przewijania w górę (podobnie jak kolor).
Aby rozszerzyć odpowiedź Sylvaina, niektóre funkcje pomocnicze:
ansi() { echo -e "\e[${1}m${*:2}\e[0m"; }
bold() { ansi 1 "$@"; }
italic() { ansi 3 "$@"; }
underline() { ansi 4 "$@"; }
strikethrough() { ansi 9 "$@"; }
red() { ansi 31 "$@"; }
Następnie
Coś, co nie zostało jeszcze uwzględnione, to połączenie dwóch lub trzech parametrów, np. Pogrubienie i podkreślenie , we wstępnie zdefiniowanym kolorze. Osiąga się to dzięki składni trójdrożnej, na przykład:
~$ printf "\e[3;4;33mthis is a test\n\e[0m"
spowoduje wydrukowanie „to jest test” w kolorze żółtym ( 33m
), kursywą ( 3m
) ORAZ podkreślonym ( 4m
).
Pamiętaj, że powtarzanie za każdym razem nie jest konieczne \e[
.
Zauważ też, że (podobnie jak Sylvain) dodałem również za \e[0m
każdym razem ustawienia resetowania, ponieważ w przeciwnym razie żółty kolor i styl czcionki pozostaną aktywne w terminalu! Nie trzeba dodawać, że absolutnie musisz uważać, aby zresetować je w skryptach, ponieważ użytkownicy, którzy używają twoich skryptów, mogą go nie lubić, jeśli skrypt na stałe zmodyfikuje swoje ustawienia koloru + stylu w terminalu!
Terminal GNOME 3.28 (VTE 0.52), debiutujący w Ubuntu 18.04 LTS, dodaje obsługę kilku innych stylów, w tym kręconych i kolorowych podkreśleń widocznych w Kitty, podkreślenia widocznych w Konsole, a na koniec również bardzo lubianego lub znienawidzonego atrybutu mrugania.
Działają one również automatycznie w dowolnym innym emulatorze terminali opartym na VTE (np. Tilix, Terminator, Xfce4-terminal, Guake itp.), Biorąc pod uwagę, że VTE jest co najmniej w wersji 0.52.
Oto lista pokazująca standardowe sekwencje specjalne, a także dodatki GNOME Terminal (VTE). Zauważ, że dla każdej sekwencji otwierającej pokazuję również sekwencję zamykającą tej właściwości, a nie rodzajową \e[m
lub \e[0m
wyłącza wszystkie tryby specjalne.
echo -e '\e[1mbold\e[22m'
echo -e '\e[2mdim\e[22m'
echo -e '\e[3mitalic\e[23m'
echo -e '\e[4munderline\e[24m'
echo -e '\e[4:1mthis is also underline (new in 0.52)\e[4:0m'
echo -e '\e[21mdouble underline (new in 0.52)\e[24m'
echo -e '\e[4:2mthis is also double underline (new in 0.52)\e[4:0m'
echo -e '\e[4:3mcurly underline (new in 0.52)\e[4:0m'
echo -e '\e[5mblink (new in 0.52)\e[25m'
echo -e '\e[7mreverse\e[27m'
echo -e '\e[8minvisible\e[28m <- invisible (but copy-pasteable)'
echo -e '\e[9mstrikethrough\e[29m'
echo -e '\e[53moverline (new in 0.52)\e[55m'
echo -e '\e[31mred\e[39m'
echo -e '\e[91mbright red\e[39m'
echo -e '\e[38:5:42m256-color, de jure standard (ITU-T T.416)\e[39m'
echo -e '\e[38;5;42m256-color, de facto standard (commonly used)\e[39m'
echo -e '\e[38:2::240:143:104mtruecolor, de jure standard (ITU-T T.416) (new in 0.52)\e[39m'
echo -e '\e[38:2:240:143:104mtruecolor, rarely used incorrect format (might be removed at some point)\e[39m'
echo -e '\e[38;2;240;143;104mtruecolor, de facto standard (commonly used)\e[39m'
echo -e '\e[46mcyan background\e[49m'
echo -e '\e[106mbright cyan background\e[49m'
echo -e '\e[48:5:42m256-color background, de jure standard (ITU-T T.416)\e[49m'
echo -e '\e[48;5;42m256-color background, de facto standard (commonly used)\e[49m'
echo -e '\e[48:2::240:143:104mtruecolor background, de jure standard (ITU-T T.416) (new in 0.52)\e[49m'
echo -e '\e[48:2:240:143:104mtruecolor background, rarely used incorrect format (might be removed at some point)\e[49m'
echo -e '\e[48;2;240;143;104mtruecolor background, de facto standard (commonly used)\e[49m'
echo -e '\e[21m\e[58:5:42m256-color underline (new in 0.52)\e[59m\e[24m'
echo -e '\e[21m\e[58;5;42m256-color underline (new in 0.52)\e[59m\e[24m'
echo -e '\e[4:3m\e[58:2::240:143:104mtruecolor underline (new in 0.52) (*)\e[59m\e[4:0m'
echo -e '\e[4:3m\e[58:2:240:143:104mtruecolor underline (new in 0.52) (might be removed at some point) (*)\e[59m\e[4:0m'
echo -e '\e[4:3m\e[58;2;240;143;104mtruecolor underline (new in 0.52) (*)\e[59m\e[4:0m'
(*) Wartości Truecolor dla podkreśleń są nieco przybliżone.
I nieco dziwne, które nie pasuje do tego obrazu, ponieważ jest bardziej funkcjonalne niż stylowe, ale prawdopodobnie warto tutaj wspomnieć, jest wsparcie hiperłącza współprojektowane z iTerm2, dostępne od GNOME Terminal 3.26 (VTE 0.50) :
echo -e '\e]8;;http://askubuntu.com\e\\hyperlink\e]8;;\e\\'
Zastąp te zakodowane sekwencje:
tput smul # set underline
tput rmul # remove underline
tput smso # set bold on
tput rmso # remove bold
tput setaf 1 #red
tput setaf 2 #green
...
tput cup 0 0 # move to pos 0,0
Pełne opisy tych poleceń znajdują się w „man terminfo” i „man tput”.
Przykład:
function f_help
{
c_green=$(tput setaf 2 2>/dev/null)
c_reset=$(tput sgr0 2>/dev/null)
c_bold=$(tput smso 2>/dev/null)
echo "${c_bold}DESCRIPTION${c_reset} : .... ${c_green}My green text${c_reset}My plain text"
}