Як це зробити: підкреслити, жирним, курсивом, прокресленим, кольором, фоном та розміром у терміналі Gnome?


58

Як зробити: підкреслити, жирний, курсив, закреслений та кольоровий на терміналі 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 <(його моно, якщо ви не можете сказати)

розмір


1
І що саме хочеться змінити? Підказка, текст, який ви вводите, вихід ваших команд?
Radu Rădeanu

експортувати PS1 фактично. Хоча я хотів би це і за базове відлуння.
Аківа

1
Якби він підтримував "Непритомність", я б перейшов. :(
Юрген А. Ерхард

Відповіді:


75

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


Я додав ще три для розміру, шрифту та фону. Чи можливі такі?
Аківа

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-терміналу відстежується тут .
Егмонт

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) я також додавав \e[0mпараметри для скидання параметрів кожного разу, оскільки в іншому випадку жовтий колір та стиль шрифту залишаться активними в терміналі! Зайве говорити, що вам потрібно стежити за тим, щоб їх скинути в сценарії, тому що користувачі, які використовують ваші сценарії, можуть не подобатися, якщо ваш сценарій постійно змінює свої налаштування кольору та стилю в терміналі!


16

Термінал 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\\'

Ось скріншот, що демонструє результат: Візуалізація в gnome-терміналі 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" }

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.