Как сделать: подчеркивание, жирный, курсив, зачеркнутый и цвет в терминале Gnome?
Жирный
курсивный
подчеркивание
s̶t̶r̶i̶k̶e̶ ̶i̶t̶ ̶l̶i̶k̶̶e̶ ̶i̶t̶s̶ ̶h̶o̶t
background
font
<(это моно, если вы не можете сказать)
Как сделать: подчеркивание, жирный, курсив, зачеркнутый и цвет в терминале Gnome?
Жирный
курсивный
подчеркивание
s̶t̶r̶i̶k̶e̶ ̶i̶t̶ ̶l̶i̶k̶̶e̶ ̶i̶t̶s̶ ̶h̶o̶t
background
font
<(это моно, если вы не можете сказать)
Ответы:
Терминалы ANSI / VT100 и эмуляторы терминалов могут не только отображать черно-белый текст; они могут отображать цвета и форматированный текст благодаря escape-последовательностям. Эти последовательности состоят из символа 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) я также добавляю a \e[0m
для сброса настроек каждый раз, потому что в противном случае желтый цвет и стиль шрифта останутся активными в терминале! Излишне говорить, что вам абсолютно необходимо следить за тем, чтобы они сбрасывались в скриптах, потому что пользователям, которые используют ваши скрипты, это может не понравиться, если ваш скрипт постоянно изменяет свои настройки цвета + стиля в терминале!
В GNOME Terminal 3.28 (VTE 0.52), дебютировавшем в Ubuntu 18.04 LTS, добавлена поддержка еще нескольких стилей, включая фигурные и цветные подчеркивания, как в Kitty, overline, как в Konsole, и, наконец, все любимые или ненавистные атрибуты мерцания.
Они также автоматически работают в любом другом эмуляторе терминала на основе VTE (например, Tilix, Terminator, Xfce4-терминал, Guake и т. Д.), Учитывая, что VTE имеет версию не ниже 0.52.
Вот список, демонстрирующий стандартные escape-последовательности, а также дополнения GNOME Terminal (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 Terminal 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"
}