Jak to zrobić: podkreślenie, pogrubienie, kursywa, przekreślenie, kolor, tło i rozmiar w Gnome Terminal?

58

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

Kolor

background

font <(mono, jeśli nie możesz powiedzieć)

rozmiar

Akiva
źródło
1
A co dokładnie chcesz zmienić? Podpowiedź, wprowadzony tekst, wynik poleceń?
Radu Rădeanu
eksport PS1 faktycznie. Chociaż chciałbym również dla podstawowego echa.
Akiva
1
Jeśli obsługuje „Faint”, zmieniłbym. :(
Jürgen A. Erhard

Odpowiedzi:

75

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

wprowadź opis zdjęcia tutaj

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

Sylvain Pineau
źródło
Dodałem jeszcze trzy dla rozmiaru, czcionki i tła. Czy to możliwe?
Akiva
1
@Akiva Możesz łatwo zmienić kolor tła (patrz dedykowana sekcja ). Jeśli chodzi o rozmiar, nie sądzę, że jest to możliwe. W przypadku czcionki jedynym ustawieniem jest globalna wartość gconf ( /apps/gnome-terminal/profiles/Default/font)
Sylvain Pineau,
1
@dashesy: ​​Według en.wikipedia.org/wiki/ANSI_escape_code , 53 powinno zrobić overline. Ale w moim terminalu nic nie robi.
Sylvain Pineau
1
@egmont Pamiętam, że chciałem go użyć 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).
dashy
1
@dashesy Dzięki, to jest naprawdę fajny przypadek użycia :) Postęp w terminalu Gnome jest tutaj śledzony .
egmont
26

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

wprowadź opis zdjęcia tutaj

glenn jackman
źródło
20

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[0mkaż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!

błąd składni
źródło
16

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[mlub \e[0mwyłą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\\'

Oto zrzut ekranu pokazujący wynik: Renderowanie w gnome-terminalu 3.28

egmont
źródło
2
Zrzut ekranu z rezultatem byłby piękny dla tych z nas, którzy nie mają tych wersji gnome-terminal / vte.
Marius Gedminas
@MariusGedminas Gotowe.
egmont
Świetna odpowiedź! Dziękujemy za poświęcenie czasu na ich zebranie! Zastanawiam się, czy one również działają na iTerm2 (postaram się to wkrótce sprawdzić ...)
filbranden
2

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" }

FCA
źródło