Як зробити: підкреслити, жирний, курсив, закреслений та кольоровий на терміналі Gnome?
Сміливий
Курсив
u̲n̲d̲e̲r̲l̲i̲n̲e̲
s̶t̶r̶i̶k̶e̶ ̶i̶t̶ ̶l̶i̶k̶̶e̶ ̶i̶t̶s̶ ̶h̶o̶t
background
font
<(його моно, якщо ви не можете сказати)
Як зробити: підкреслити, жирний, курсив, закреслений та кольоровий на терміналі Gnome?
Сміливий
Курсив
u̲n̲d̲e̲r̲l̲i̲n̲e̲
s̶t̶r̶i̶k̶e̶ ̶i̶t̶ ̶l̶i̶k̶̶e̶ ̶i̶t̶s̶ ̶h̶o̶t
background
font
<(його моно, якщо ви не можете сказати)
Відповіді:
Термінали ANSI / VT100 та емулятори терміналів не просто здатні відображати чорно-білий текст; вони можуть відображати кольори та відформатовані тексти завдяки послідовностям. Ці послідовності складаються з символу Escape (часто представлений символами "^ [" або "Esc"), а за ними й інші символи: "Esc [FormatCodem".
У Bash символ можна отримати за допомогою таких синтаксисів:
\e
\033
\x1B
Команди (для легкої копіювання-вставки):
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"
Джерело (включаючи всі типи кодів переднього плану / фонового кольору): http://misc.flogisoft.com/bash/tip_colors_and_formatting
/apps/gnome-terminal/profiles/Default/font
)
PS1
(насправді в gnome-терміналі), тому що підкреслюється різновид змішаного в тексті під ним, що ускладнює його читання, і, звичайно, простріл виглядав просто неправильно. Наявність рядка допоможе визначити попередні команди під час прокрутки вгору (так це колір).
Щоб поширити відповідь Сильвейна, деякі допоміжні функції:
ansi() { echo -e "\e[${1}m${*:2}\e[0m"; }
bold() { ansi 1 "$@"; }
italic() { ansi 3 "$@"; }
underline() { ansi 4 "$@"; }
strikethrough() { ansi 9 "$@"; }
red() { ansi 31 "$@"; }
Тоді
Що ще не було висвітлено, це поєднання двох-трьох параметрів, наприклад, жирний та підкреслений , заздалегідь визначений колір. Це досягається за допомогою тривимірного синтаксису, наприклад:
~$ printf "\e[3;4;33mthis is a test\n\e[0m"
призведе до друку "це тест" жовтим кольором ( 33m
), курсивом ( 3m
) І підкресленим ( 4m
).
Зауважте, що повторювати не потрібно \e[
кожного разу.
Зауважте, що (подібно до Sylvain) я також додавав \e[0m
параметри для скидання параметрів кожного разу, оскільки в іншому випадку жовтий колір та стиль шрифту залишаться активними в терміналі! Зайве говорити, що вам потрібно стежити за тим, щоб їх скинути в сценарії, тому що користувачі, які використовують ваші сценарії, можуть не подобатися, якщо ваш сценарій постійно змінює свої налаштування кольору та стилю в терміналі!
Термінал GNOME 3.28 (VTE 0.52), дебютуючи в Ubuntu 18.04 LTS, додає підтримку ще кількох стилів, включаючи фігурні та кольорові підкреслення, як це бачимо у Kitty, накреслення, як це бачимо в Konsole, і нарешті, також дуже любимо або дуже ненависно атрибут моргання.
Вони також автоматично працюють у будь-якому іншому емуляторі терміналів на базі VTE (наприклад, Tilix, Terminator, Xfce4-термінал, Guake тощо), враховуючи, що VTE є принаймні у версії 0.52.
Ось список, що демонструє стандартні послідовності евакуації, а також додатки терміналу GNOME (VTE). Зауважте, що для кожної послідовності відкриття я також показую лише послідовність закриття цього властивості, а не загальну \e[m
чи \e[0m
що вимикає всі спеціальні режими.
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'
(*) Значення Truecolor для підкреслень трохи приблизні.
І трохи дивним, що не зовсім вписується в цю картину, оскільки це більше функціональність, ніж стиль, але, мабуть, тут варто згадати, є підтримка гіперпосилання, спільно розроблена з iTerm2, доступна з терміналу GNOME 3.26 (VTE 0.50) :
echo -e '\e]8;;http://askubuntu.com\e\\hyperlink\e]8;;\e\\'
Замініть ці твердо кодовані послідовності на:
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
Повні описи цих команд див. У розділі "man terminfo" та "man tput".
Приклад:
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"
}