Как сделать: подчеркивание, полужирный шрифт, курсив, зачеркивание, цвет, фон и размер в Gnome Terminal?

58

Как сделать: подчеркивание, жирный, курсив, зачеркнутый и цвет в терминале Gnome?

Жирный

курсивный

подчеркивание

s̶t̶r̶i̶k̶e̶ ̶i̶t̶ ̶l̶i̶k̶̶e̶ ̶i̶t̶s̶ ̶h̶o̶t

цвет

background

font <(это моно, если вы не можете сказать)

размер

Акива
источник
1
И что именно хотите изменить? Подсказка, текст, который вы вводите, вывод ваших команд?
Раду Рэдяну
экспорт PS1 на самом деле. Хотя я бы хотел и для базового эха.
Акива
1
Если бы он поддерживал «Faint», я бы переключился. :(
Юрген А. Эрхард

Ответы:

75

Терминалы 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

Сильвен Пино
источник
Я добавил еще три для размера, шрифта и фона. Это возможно?
Акива
1
@Akiva Вы можете легко изменить цвет фона (см. Специальный раздел ). Что касается размера, я не думаю, что это возможно. Для шрифта единственной настройкой является глобальное значение gconf ( /apps/gnome-terminal/profiles/Default/font)
Sylvain Pineau
1
@dashesy: ​​Согласно en.wikipedia.org/wiki/ANSI_escape_code , 53 должны делать пометку. Но в моем терминале ничего не происходит.
Сильвен Пино
1
@egmont Я помню, я хотел использовать его в PS1(на самом деле в gnome-терминал), потому что подчеркивание вида смешанного в тексте под ним делает его более трудным для чтения, и, конечно, зачеркивание выглядело просто неправильно. Наличие строки поможет найти предыдущие команды при прокрутке вверх (как и цвет).
Дашесы
1
@dashesy Спасибо, это на самом деле довольно крутой пример использования :) Прогресс терминала Gnome отслеживается здесь .
egmont
26

Чтобы расширить ответ Сильвена, некоторые вспомогательные функции:

ansi()          { echo -e "\e[${1}m${*:2}\e[0m"; }
bold()          { ansi 1 "$@"; }
italic()        { ansi 3 "$@"; }
underline()     { ansi 4 "$@"; }
strikethrough() { ansi 9 "$@"; }
red()           { ansi 31 "$@"; }

затем

введите описание изображения здесь

Гленн Джекман
источник
20

Кое-что, что еще не было рассмотрено, - это комбинация двух или трех параметров, например, жирный и подчеркнутый , в предопределенном цвете. Это достигается с помощью трехстороннего синтаксиса, например:

~$ printf "\e[3;4;33mthis is a test\n\e[0m"

приведет к тому, что «это тест» будет напечатан желтым цветом ( 33m), курсивом ( 3m) И подчеркнутым ( 4m).
Обратите внимание, что нет необходимости повторять \e[каждый раз.
Также обратите внимание, что (как и в Sylvain) я также добавляю a \e[0mдля сброса настроек каждый раз, потому что в противном случае желтый цвет и стиль шрифта останутся активными в терминале! Излишне говорить, что вам абсолютно необходимо следить за тем, чтобы они сбрасывались в скриптах, потому что пользователям, которые используют ваши скрипты, это может не понравиться, если ваш скрипт постоянно изменяет свои настройки цвета + стиля в терминале!

ошибка синтаксиса
источник
16

В 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\\'

Вот скриншот, демонстрирующий результат: Рендеринг в гном-терминале 3.28

Эгмонт
источник
2
Для тех из нас, у кого нет этих версий gnome-terminal / vte, будет полезен скриншот с результатом.
Мариус Гедминас
@MariusGedminas Готово.
egmont
Отличный ответ! Спасибо, что нашли время, чтобы собрать все это! Интересно, работают ли они также на iTerm2 (скоро попробую проверить это для себя ...)
filbranden
2

Замените эти жестко закодированные последовательности на:

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

FCA
источник