Время прочтения
10 мин
Просмотры 12K
Небольшое руководство и простой bash скрипт, чтобы сделать вывод вашего кода немного более ярким и красочным
Обычно вывод текста в терминале пользователя выглядит слишком монохромно. Однако добавить больше красок — совсем несложно. В данном скрипте я предлагаю вспомогательные методы для вывода текста, использования заданных цветов и работы с окнами терминала в тёмном и светлом режимах.
⬇️ Скачать color.zip — 2.7 KB (прим. редактора — потребуется регистрация на сайте)
Введение
Текст, выводимый в терминале по умолчанию, является одноцветным и не предоставляет простого способа указать на контекст. Например, вы можете захотеть, чтобы ошибка отображалась красным цветом, успех — зелёным, или чтобы важная информация была выделена жирным шрифтом.
Добавление цвета к выводу текста в терминале — простая задача, которая заключается в выводе правильных управляющих символов перед вашим текстом.
Цвета в терминале
Чтобы вывести цветной текст, вам следует выполнить printf
или echo -e
управляющих символов для требуемого цвета (-e
обеспечивает интерпретацию управляющих символов), далее вывести ваш текст, а затем (просто для аккуратности) сбросить вывод обратно к значениям по умолчанию. В таблице ниже приведены коды:
и код сброса 33[0m
Формат строки для основного цвета:
"33[" + "<0 or 1, meaning normal or bold>;" + "<color code> + "m"
И для фона:
"33[" + "<color code>" + "m"
Эти коды могут быть использованы вместе для одновременного изменения основного цвета и фона.
Применяем код
Простой пример красного текста:
printf "33[91mThis is red text33[0m"
Пример красного текста на белом фоне:
printf "33[91m33[107mThis is red text on a white background33[0m"
Это выглядит довольно громоздко, так что я создал несколько простых подпрограмм, которые позволят задать цвет текста более изящным способом.
Вспомогательные функции
Следующие вспомогательные функции позволяют вам делать такие вещи, как:
WriteLine "This is red text" "Red"
WriteLine "This is red text on a white background" "Red" "White"
… намного проще.
useColor="true" # Установите значение на false, если вы обнаружите, что ваша среда плохо обрабатывает цвета.
# Возвращает код цвета для заданных цветов переднего/заднего плана
# Этот код передаётся эхом в терминал перед выводом текста
# для создания цветного вывода.
#
# строка foreground (основной цвет) имя_цвета. Необязательна, если не задан фон.
# По умолчанию "Default", который использует системный цвет по умолчанию
# строка background (фон) имя_цвета. Необязательна. По умолчанию используется $color_background
# который устанавливается на основе текущего фона терминала.
# возвращает строку
function Color () {
local foreground=$1
local background=$2
if [ "$foreground" == "" ]; then foreground="Default"; fi
if [ "$background" == "" ]; then background="$color_background"; fi
local colorString='33['
# Основные цвета
case "$foreground" in
"Default") colorString='33[0;39m';;
"Black" ) colorString='33[0;30m';;
"DarkRed" ) colorString='33[0;31m';;
"DarkGreen" ) colorString='33[0;32m';;
"DarkYellow" ) colorString='33[0;33m';;
"DarkBlue" ) colorString='33[0;34m';;
"DarkMagenta" ) colorString='33[0;35m';;
"DarkCyan" ) colorString='33[0;36m';;
"Gray" ) colorString='33[0;37m';;
"DarkGray" ) colorString='33[1;90m';;
"Red" ) colorString='33[1;91m';;
"Green" ) colorString='33[1;92m';;
"Yellow" ) colorString='33[1;93m';;
"Blue" ) colorString='33[1;94m';;
"Magenta" ) colorString='33[1;95m';;
"Cyan" ) colorString='33[1;96m';;
"White" ) colorString='33[1;97m';;
*) colorString='33[0;39m';;
esac
# Цвета фона
case "$background" in
"Default" ) colorString="${colorString}33[49m";;
"Black" ) colorString="${colorString}33[40m";;
"DarkRed" ) colorString="${colorString}33[41m";;
"DarkGreen" ) colorString="${colorString}33[42m";;
"DarkYellow" ) colorString="${colorString}33[43m";;
"DarkBlue" ) colorString="${colorString}33[44m";;
"DarkMagenta" ) colorString="${colorString}33[45m";;
"DarkCyan" ) colorString="${colorString}33[46m";;
"Gray" ) colorString="${colorString}33[47m";;
"DarkGray" ) colorString="${colorString}33[100m";;
"Red" ) colorString="${colorString}33[101m";;
"Green" ) colorString="${colorString}33[102m";;
"Yellow" ) colorString="${colorString}33[103m";;
"Blue" ) colorString="${colorString}33[104m";;
"Magenta" ) colorString="${colorString}33[105m";;
"Cyan" ) colorString="${colorString}33[106m";;
"White" ) colorString="${colorString}33[107m";;
*) colorString="${colorString}33[49m";;
esac
echo "${colorString}"
}
# Выводит строку (включая перевод на строку) на терминал, используя заданные основной или фоновый
# цвета
#
# строка The text to output (Текст для вывода). Необязательна, если не задан основной цвет. По умолчанию выводится только перевод на строку.
# строка Foreground color name (Имя основного цвета). Необязательна, если не указан фон. По умолчанию "Default", который
# использует системное значение по умолчанию
# строка Background color name (Имя фонового цвета). Необязательна. По умолчанию используется $color_background, который устанавливается на основе
# текущего фона терминала
function WriteLine () {
local resetColor='33[0m'
local str=$1
local forecolor=$2
local backcolor=$3
if [ "$str" == "" ]; then
printf "n"
return;
fi
# Обратите внимание на использование форматного заполнителя %s. Это позволяет нам передавать "--" в качестве строк без ошибок
if [ "$useColor" == "true" ]; then
local colorString=$(Color ${forecolor} ${backcolor})
printf "${colorString}%s${resetColor}n" "${str}"
else
printf "%sn" "${str}"
fi
}
# Выводит строку без перевода на строку в терминал, используя заданные основные / фоновые цвета
#
# строка The text to output (Текст для вывода). Необязательна, если не задан основной цвет. По умолчанию выводится только перевод на строку.
# строка Foreground color name (Имя основного цвета). Необязательна, если не указан фон. По умолчанию "Default", который
# использует системное значение по умолчанию
# строка Background color name (Имя фонового цвета). Необязательна. По умолчанию используется $color_background, который устанавливается на основе
# текущего фона терминала
function Write () {
local resetColor="33[0m"
local forecolor=$1
local backcolor=$2
local str=$3
if [ "$str" == "" ]; then
return;
fi
# Обратите внимание на использование форматного заполнителя %s. Это позволяет нам передавать "--" в качестве строк без ошибок
if [ "$useColor" == "true" ]; then
local colorString=$(Color ${forecolor} ${backcolor})
printf "${colorString}%s${resetColor}" "${str}"
else
printf "%s" "$str"
fi
}
Работа с тёмным и светлым режимами
Во многих дистрибутивах Linux и Unix терминал имеет чёрный фон и белый текст. В macOS по умолчанию используется белый фон с чёрным текстом. Конечно, есть способы и средства для смены тёмного/светлого режима, но вам придется проверять и тестировать всё на собственной системе, чтобы найти то, что подходит именно вам.
Я предполагаю, что если мы используем mac, то можем всё протестировать напрямую, в противном случае — мы предполагаем черный фон и белый текст. Я также стараюсь придерживаться цветов по умолчанию, а там, где мне нужно немного цвета, я предпочитаю использование некоторых предопределённых цветов, которые, по моим представлениям, будут хорошо работать везде.
# Получает цвет фона терминала. Это очень наивная догадка
# возвращает триплет RGB, значения от 0 до 64K
function getBackground () {
if [[ $OSTYPE == 'darwin'* ]]; then
osascript -e
'tell application "Terminal"
get background color of selected tab of window 1
end tell'
else
# См. https://github.com/rocky/shell-term-background/blob/master/term-background.bash
# для получения исчерпывающей информации о том, как проверить цвет фона. Сейчас мы просто
# предположим, что терминалы, не использующие macOS, имеют чёрный фон.
echo "0,0,0" # здесь мы делаем предположения
fi
}
# Определяет, находится ли текущий терминал в тёмном режиме (тёмный фон, светлый текст).
# возвращает "true", если работает в тёмном режиме; false в противном случае
function isDarkMode () {
local bgColor=$(getBackground)
IFS=','; colors=($bgColor); IFS=' ';
# Фон более или менее тёмный?
if [ ${colors[0]} -lt 20000 ] && [ ${colors[1]} -lt 20000 ] && [ ${colors[2]} -lt 20000 ]; then
echo "true"
else
echo "false"
fi
}
Как только мы получим приблизительное представление о том, с чем имеем дело, я выполню код ниже:
darkmode=$(isDarkMode)
# Установим некоторые предопределённые цвета. Обратите внимание, что мы не можем достоверно определить фон
# цвет терминала, поэтому мы избегаем специально устанавливать чёрный или белый цвет в качестве основного цвета
# или фона. Вы всегда можете просто использовать "Белый" и "Чёрный", если вам действительно нужно
# это сочетание, но предварительно тщательно протестируйте
if [ "$darkmode" == "true" ]; then
color_primary="Blue"
color_mute="Gray"
color_info="Yellow"
color_success="Green"
color_warn="DarkYellow"
color_error="Red"
else
color_primary="DarkBlue"
color_mute="Gray"
color_info="Magenta"
color_success="DarkGreen"
color_warn="DarkYellow"
color_error="Red"
fi
и также воспользуюсь этими строками:
WriteLine "Predefined colors on default background"
WriteLine
WriteLine "Default colored text" "Default"
WriteLine "Primary colored text" $color_primary
WriteLine "Mute colored text" $color_mute
WriteLine "Info colored text" $color_info
WriteLine "Success colored text" $color_success
WriteLine "Warning colored text" $color_warn
WriteLine "Error colored text" $color_error
WriteLine
WriteLine "Default color on predefined background"
WriteLine
WriteLine "Default colored background" "Default"
WriteLine "Primary colored background" "Default" $color_primary
WriteLine "Mute colored background" "Default" $color_mute
WriteLine "Info colored background" "Default" $color_info
WriteLine "Success colored background" "Default" $color_success
WriteLine "Warning colored background" "Default" $color_warn
WriteLine "Error colored background" "Default" $color_error
Получаем примерно такую картину в классическом терминале Linux:
И такую в macOS:
Всё немного запутано, поэтому давайте добавим ещё одну функцию, которая обеспечит контрастный передний план на любом выбранном нами фоне:
# Возвращает имя цвета, который будет служить в качестве основного контрастного
# цвета для заданного цвета фона. Эта функция предполагает, что $darkmode был
# установлен глобально.
#
# строка background color name (имя фонового цвета).
# возвращает строку, представляющую имя основного контрастного цвета
function ContrastForeground () {
local color=$1
if [ "$color" == "" ]; then color="Default"; fi
if [ "$darkmode" == "true" ]; then
case "$color" in
"Default" ) echo "White";;
"Black" ) echo "White";;
"DarkRed" ) echo "White";;
"DarkGreen" ) echo "White";;
"DarkYellow" ) echo "White";;
"DarkBlue" ) echo "White";;
"DarkMagenta" ) echo "White";;
"DarkCyan" ) echo "White";;
"Gray" ) echo "Black";;
"DarkGray" ) echo "White";;
"Red" ) echo "White";;
"Green" ) echo "White";;
"Yellow" ) echo "Black";;
"Blue" ) echo "White";;
"Magenta" ) echo "White";;
"Cyan" ) echo "Black";;
"White" ) echo "Black";;
*) echo "White";;
esac
else
case "$color" in
"Default" ) echo "Black";;
"Black" ) echo "White";;
"DarkRed" ) echo "White";;
"DarkGreen" ) echo "White";;
"DarkYellow" ) echo "White";;
"DarkBlue" ) echo "White";;
"DarkMagenta" ) echo "White";;
"DarkCyan" ) echo "White";;
"Gray" ) echo "Black";;
"DarkGray" ) echo "White";;
"Red" ) echo "White";;
"Green" ) echo "Black";;
"Yellow" ) echo "Black";;
"Blue" ) echo "White";;
"Magenta" ) echo "White";;
"Cyan" ) echo "Black";;
"White" ) echo "Black";;
*) echo "White";;
esac
fi
echo "${colorString}"
}
Затем, в подпрограмме Color,
мы можем сделать следующее:
function Color () {
local foreground=$1
local background=$2
if [ "$foreground" == "" ]; then foreground="Default"; fi
if [ "$background" == "" ]; then background="$color_background"; fi
if [ "$foreground" == "Contrast" ]; then
foreground=$(ContrastForeground ${background})
fi
...
… и чтобы сделать наш текст с изменённым цветом фона немного более разборчивым, мы используем следующие строки:
WriteLine
WriteLine "Default contrasting color on predefined background"
WriteLine
WriteLine "Primary colored background" "Contrast" $color_primary
WriteLine "Mute colored background" "Contrast" $color_mute
WriteLine "Info colored background" "Contrast" $color_info
WriteLine "Success colored background" "Contrast" $color_success
WriteLine "Warning colored background" "Contrast" $color_warn
WriteLine "Error colored background" "Contrast" $color_error
Полученный результат в терминале Linux
… и в терминале macOS
НЛО прилетело и оставило здесь промокод для читателей нашего блога:
— 15% на все тарифы VDS (кроме тарифа Прогрев) — HABRFIRSTVDS.
Большую часть задач в Ubuntu удобнее всего выполнять через терминал. Это относится к управлению файловой системой, различным настройками, установке приложений и т. д. Поэтому важно, чтобы текст в нем был комфортным для чтения и не нагружал глаза, например, из-за цветов текста и фона. Тем более, оформление достаточно легко поменять.
В рамках данной статьи будет рассказано как изменить цвет в терминале Linux на примере Ubuntu и Gnome. А еще вы узнаете, как можно создать несколько профилей и быстро переключаться между ними, например, для дневного и ночного времени суток.
Для начала откройте окно терминала, одновременно нажав на клавиатуре Ctrl + Shift + T. Откройте контекстное меню с помощью соответствующей иконки, расположенной рядом с поиском, а затем кликните по пункту Параметры.
Теперь посетите вкладку Цвета. Изначально в ней включен режим Использовать цвета из системной темы, который автоматически выбирает подходящее оформление. Отключите его, чтобы получить полный доступ к настройкам.
Чуть ниже расположен пункт Встроенные схемы, где можно выбрать одно из нескольких готовых оформлений терминала. А дальше уже идет ручной выбор цветов по умолчанию и разных их вариаций. Кликните по нужному пункту, укажите понравившийся оттенок и нажмите Выбрать.
А с помощью инструмента Пипетка можно взять цвет любой точки на экране и применить его. Его удобно сочетать с палитрой, расположенной в нижней части окна.
Также вы отдельно можете настроить цвета для выделенного текста и фона, полужирного шрифта и курсора мыши, если активируете соответствующие пункты.
А ниже идет настройка прозрачности окна терминала. Если отключить параметр Use transparency from system theme, активировать Use transparent background и отрегулировать нижний ползунок, то получится такой результат:
Самая последняя настройка Выделение жирного текста тоже может оказаться полезной. Ее имеет смысл включить, если жирный текст не станет некомфортным для чтения. А теперь разберемся с созданием профилей с разными настройками.
Профили параметров терминала
Вы можете сделать несколько цветовых схем, например, светлую и темную, и быстро переключаться между ними. Для этого в окне Параметры щелкните по иконке Добавить в виде плюса, расположенной в блоке Профили. Задайте любое имя и нажмите Создать для подтверждения.
Теперь посетите вкладку Цвета и настройте все параметры по своему усмотрению. А для быстрого переключения между доступными профилями достаточно кликнуть правой кнопкой мыши по окошку терминала, в контекстном меню навести курсор на пункт Профили и выбрать нужный.
Выводы
Теперь вы знаете как изменить цвет терминала в Ubuntu. Оформление терминала в Ubuntu можно настроить по своему усмотрению, сделав цвета текста, фона и других элементов более яркими или, наоборот, спокойными, чтобы ничего не мешало чтению. А с помощью функции профилей получится быстро переключаться между разными вариантами оформления.
Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна .
Об авторе
On certain XTerm/ANSI-compatible terminals (like xterm
and gnome-terminal
), you can set colors using a palette bigger then the default 8/16-colors palette (for example using an 88-colors, 256-colors or 16777216-colors (RGB) palette; both xterm
and gnome-terminal
support both the 256-colors and the 16777216-colors (RGB) palette); mind that the shell might override this (this is the case e.g. for zsh
).
Here’s a script to list the colors in the 256-color palette along with their ANSI color code in XTerm/ANSI-compatible terminals with a 256-color palette support:
#!/bin/bash
for((i=16; i<256; i++)); do
printf "e[48;5;${i}m%03d" $i;
printf 'e[0m';
[ ! $((($i - 15) % 6)) -eq 0 ] && printf ' ' || printf 'n'
done
Depending on whether you want to apply the color to the foreground or to the background, use an <fg_bg>
value of 38
or 48
(respectively) in the following command:
printf 'e[<fg_bg>;5;<ANSI_color_code>m'
For example, to set the foreground color (<fg_bg>
=38
) to red (<ANSI_color_code>
=196
) and the background color (<fg_bg>
=48
) to black (<ANSI_color_code>
=0
):
printf 'e[38;5;196m Foreground color: redn'
printf 'e[48;5;0m Background color: blackn'
It’s necessary to redraw the prompt using printf 'e[K'
in order for the background color to apply to the whole line and in order for the foreground color to apply to the cursor:
The same thing can be accomplished using RGB values instead of ANSI color codes in a compatible terminal; depending on whether you want to apply the color to the foreground or to the background, use an <fg_bg>
value of 38
or 48
(respectively) in the following command:
printf 'e[<fg_bg>;2;<R>;<G>;<B>m'
For example, to set the foreground color (<fg_bg>
=38
) to red (<R>
=255
, <G>
=0
, <B>
=0
) and the background color (<fg_bg>
=48
) to black (<R>
=0
, <G>
=0
, <B>
=0
):
printf 'e[38;2;255;0;0m Foreground color: redn'
printf 'e[48;2;0;0;0m Background color: blackn'
Again, it’s necessary to redraw the prompt using printf 'e[K'
in order for the background color to apply to the whole line and in order for the foreground color to apply to the cursor:
Using either methods, you can use printf 'e[0m'
to reset all the attributes:
Состояние перевода: На этой странице представлен перевод статьи Color output in console. Дата последней синхронизации: 17 сентября 2021. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.
Эта страница описывает настройку вывода цветного текста в различных консольных программах.
Как это работает
Управляющие последовательности
С помощью управляющих последовательностей ANSI (ANSI escape sequences) можно передать дополнительную информацию в вывод терминала, в том числе цвет. С годами диапазон цветов терминала значительно расширился: от изначальных восьми цветов до полного 24-битного True Color.
Базовое кодирование цвета даёт 8 цветов обычной яркости и 8 ярких вариантов этих цветов. Современные эмуляторы терминала, в том числе сама Linux-консоль, дают возможность указать конкретные RGB-значения, которые будут использоваться для отображения этих цветом. Этот режим поддерживается почти всеми эмуляторами терминала.
С появлением 256-цветных дисплеев появились последовательности для 256 цветов. Это 16 основных цветов, 216 цветов RGB (размещенных в кубе 6x6x6) и 24 оттенка серого. За исключением первых 16 цветов, схема обычно не настраивается, поскольку она имеет чёткое сопоставление с RGB. Этот режим поддерживается большинством эмуляторов терминала. (Меньшая часть эмуляторов использует аналогичную, но несовместимую кодировку только с 88 цветами. Вы вряд ли будете использовать их на практике, но они появятся в базе данных terminfo.)
Не так широко поддерживается True Color режим, дающий 16.7 миллионов (224) цветов RGB (значение каждого канала в диапазоне от 0 до 255).
Termcap и terminfo
Termcap и terminfo, являющиеся частью ncurses, — это базы данных, дающие информацию о том, какие последовательности поддерживаются терминалом (который обычно прописан в переменной окружения TERM
). Можно использовать команды tput(1) и infocmp(1) для чтения этих данных в командной строке.
Приложения
diff
С версии 3.4 у diffutils есть опция --color
(GNU mailing list).
$ alias diff='diff --color=auto'
grep
Опция --color=auto
включает выделение цветом. Цвет будет использоваться только при выводе в терминал; не в pipe или перенаправление.
Цветной вывод в grep также удобен при работе с regexp.
Можно использовать alias, чтобы прописать постоянное использование этой опции:
alias grep='grep --color=auto'
Переменная GREP_COLORS
позволяет определить цвета и настроить разные части выделения. Чтобы изменить цвета, найдите нужные управляющие последовательности ANSI и используйте их. Подробнее смотрите grep(1).
Опция -n
включает вывод номеров строк файла.
ip
Команда ip(8) из пакета iproute2 имеет опцию -c
для включения цвета. Значение auto
этого параметра включит вывод цвета только в терминале.
alias ip='ip -color=auto'
less
Переменные окружения
Можно попросить less использовать цвета для обозначения жирного текста и других эффектов форматирования.
Добавьте эту строку в настройках вашей командной оболочки:
export LESS='-R --use-color -Dd+r$Du+b'
Она задаст красный цвет для жирного и синий для подчёркивания.
Подробнее об опции --use-color
можно почитать в less(1) или [1].
Чтение из stdin
Примечание: Рекомендуется включить цветной вывод через переменные окружения в вашем ~/.bashrc
или ~/.zshrc
; примеры ниже основаны на export LESS=R
Когда вы выполняете команду и направляете её стандартный вывод (stdout) в less для постраничного просмотра (например, pacman -Qe | less
), вы можете заметить, что цвет пропадает. Обычно это из-за того, что программа пытается определить, является ли stdout интерактивным терминалом, и если да, то печатает цветой текст, а если нет, то не цветной. Это правильное поведение, когда вы хотите перенаправить stdout в файл, например pacman -Qe > pkglst-backup.txt
, но не очень хорошо не в случае с less
.
Некоторые программы имеют опцию для отключения определения интерактивного tty:
# dmesg --color=always | less
Если у программы нет подобной опции, можно заставить программу считать stdout интерактивным терминалом с помощью следующих утилит:
- ColorThis — запускает программу в (группе) pty, поддерживает перенаправление stdin.
- https://github.com/Sasasu/ColorThis || colorthis-gitAUR
- stdoutisatty — перехватывает обращение к функции
isatty
.
- https://github.com/lilydjwg/stdoutisatty. || stdoutisatty-gitAUR
- Пример:
stdoutisatty программа | less
- unbuffer — tclsh-скрипт, который поставляется с expect, запускает программу в pty.
- http://expect.sourceforge.net/example/unbuffer.man.html || expect
- Пример:
unbuffer программа | less
В качестве альтернативы можно использовать модуль zpty из zsh: [2]
~/.zshrc
zmodload zsh/zpty pty() { zpty pty-${UID} ${1+$@} if [[ ! -t 1 ]];then setopt local_traps trap '' INT fi zpty -r pty-${UID} zpty -d pty-${UID} } ptyless() { pty $@ | less }
Использование:
$ ptyless программа
Для перенаправления в какой-нибудь другой просмотрщик (в данном примере less):
$ pty программа | less
ls
Опция --color=auto
включает подсвечивание цветом. Цвет будет использоваться только при выводе в терминал; не в pipe или перенаправление.
alias ls='ls --color=auto'
Переменная LS_COLORS
позволяет определить цвета и настроить разные части выделения. Используйте dircolors(1) для установки.
Примечание: Использование --color
может привести к заметному замедлению ls при запуске в каталоге с очень большим числом записей. Стандартные настройки заставляют ls делать stat(1) для каждого файла. Однако, если вы хотите раскраску типа файла, но можете прожить без других опций (например, executable, orphan, sticky, other-writable, capability), можно использовать dircolors для установки переменной окружения LS_COLORS
примерно так:
eval $(dircolors -p | perl -pe 's/^((CAP|S[ET]|O[TR]|M|E)w+).*/$1 00/' | dircolors -)
Подробнее смотрите ls(1).
man
There is a real color facility in grotty(1), but it is strongly discouraged for man pages. Here we fake a colored man
by hacking two main pagers, less
and most
: we replace the sequences for bold, standout, and underline with spiced ones that contain color.
Текст man-страниц может отображаться в разных цветах, что упрощает их чтение. Есть два основных метода, позволяющих раскрасить страницы — с помощью утилит less и most.
С помощью less (рекомендуется)
Преимущество этого способа в том, что less имеет более богатый набор возможностей, чем most, а также используется по умолчанию для отображения man-страниц.
Смотрите #less для более детального описания.
export MANPAGER="less -R --use-color -Dd+r -Du+b"
Для Fish настройки будут выглядеть как-то так:
~/.config/fish/config.fish
set -xU MANPAGER 'less -R --use-color -Dd+r -Du+b'
Не забудьте перезагрузить настройки вашей командной оболочки, чтобы изменения вступили в силу.
С помощью most (не рекомендуется)
Утилита most выполняет ту же задачу, что less
и more
, но имеет меньший набор возможностей. Настройка цветов для most проще, однако требуется дополнительная настройка для того, чтобы most работал наподобие less.
Установите пакет most.
В файле /etc/man_db.conf
раскомментируйте параметр pager
и установите ему значение most -s
:
DEFINE pager most -s
Откройте любую man-страницу для проверки.
Настройка цветов осуществляется в пользовательском файле ~/.mostrc
(нужно создать, если он отсутствует), либо в системном файле /etc/most.conf
. Пример конфигурации:
% Color settings color normal lightgray black color status yellow blue color underline yellow black color overstrike brightblue black
Полный список сочетаний клавиш можно посмотреть в /usr/share/doc/most/most-fun.txt
. Чтобы получить базовую less
/vim
-подобную конфигурацию, можно скопировать /usr/share/doc/most/lesskeys.rc
в ~/.mostrc
. Этот файл не включает в себя ‘g’ или ‘G’, так что нужно добавить следующие строки в ~/.mostrc
:
setkey bob "g" setkey eob "G" setkey page_down "d" setkey page_up "u"
Также можно задать сочетание клавиш для goto_line
, если вам не нравится стандартное ‘J’.
Другой пример, показывающий, как настроить сочетания клавиш, подобно less
(переход к строке назначен на клавишу J
):
% less-like keybindings unsetkey "^K" unsetkey "g" unsetkey "G" unsetkey ":" setkey next_file ":n" setkey find_file ":e" setkey next_file ":p" setkey toggle_options ":o" setkey toggle_case ":c" setkey delete_file ":d" setkey exit ":q" setkey bob "g" setkey eob "G" setkey down "e" setkey down "E" setkey down "j" setkey down "^N" setkey up "y" setkey up "^Y" setkey up "k" setkey up "^P" setkey up "^K" setkey page_down "f" setkey page_down "^F" setkey page_up "b" setkey page_up "^B" setkey other_window "z" setkey other_window "w" setkey search_backward "?" setkey bob "p" setkey goto_mark "'" setkey find_file "E" setkey edit "v"
Цветные страницы в xterm или rxvt-unicode
Быстрый способ раскрасить цвета man-страниц, которые просматриваются через xterm / uxterm
или rxvt-unicode, заключается в редактировании файла ~/.Xresources
.
В подразделах представлена конфигурация для xterm и rxvt-unicode.
xterm
*VT100.colorBDMode: true *VT100.colorBD: red *VT100.colorULMode: true *VT100.colorUL: cyan
Эти настройки заменяют начертания текста цветами. Добавьте также:
*VT100.veryBoldColors: 6
если вы хотите видеть цвета и начертания одновременно. Смотрите также xterm(1) для описания ресурса терминала veryBoldColors
.
rxvt-unicode
Конфигурация:
URxvt.colorIT: #87af5f URxvt.colorBD: #d7d7d7 URxvt.colorUL: #87afd7
После внесения изменений в файл, выполните:
$ xrdb -load ~/.Xresources
Запустите xterm
/uxterm
или rxvt-unicode
и вы должны увидеть цветные man-страницы. Эти настройки добавляют цвета для слов, написанных полужирным и подчеркнутым шрифтом в xterm/uxterm
, и цвета для слов в полужирном, подчеркнутом, и наклонном начертаниях в rxvt-unicode
. Вы можете также совмещать эти атрибуты в различные комбинации. Смотрите sources.
pacman
Pacman также имеет опцию для вывода цвета. Раскомментируйте строку Color
в файле /etc/pacman.conf
.
Обёртки
Универсальные обёртки
(многие давно не обновлялись, но всё ещё работают)
Они поставляются с предварительно настроенными пресетами. Пресеты можно менять, можно создавать новые.
Важно: Обёртки добавляют управляющие последовательности в вывод оборачиваемых команд. Некоторые скрипты и програмы, использующие вывод стандартных утилит, могут сломаться от этого.
- rainbow — раскрашивает вывод команд или STDIN по паттернам.
Пресеты: df, diff, env, host, ifconfig, java-stack-trace, jboss, jonas, md5sum, mvn2, mvn3, ping, tomcat, top, traceroute.
- https://github.com/nicoulaj/rainbow || rainbowAUR
- grc — ещё один раскрашиватель для украшения ваших лог-файлов или вывода команд.
Пресеты: cat, cvs, df, digg, gcc, g++, ls, ifconfig, make, mount, mtr, netstat, ping, ps, tail, traceroute, wdiff, blkid, du, dnf, docker, docker-machine, env, id, ip, iostat, last, lsattr, lsblk, lspci, lsmod, lsof, getfacl, getsebool, ulimit, uptime, nmap, fdisk, findmnt, free, semanage, sar, ss, sysctl, systemctl, stat, showmount, tune2fs and tcpdump.
- https://github.com/garabik/grc || grc
- cope — раскрашивающая обёртка для консольных программ.
Пресеты: acpi, arp, cc, df, dprofpp, fdisk, free, g++, gcc, id, ifconfig, ls, lspci, lsusb, make, md5sum, mpc, netstat, nm, nmap, nocope, ping, pmap, ps, readelf, route, screen, sha1sum, sha224sum, sha256sum, sha384sum, sha512sum, shasum, socklist, stat, strace, tcpdump, tracepath, traceroute, w, wget, who, xrandr.
- https://github.com/yogan/cope || cope-gitAUR
- cw — ненавязчивая обёртка для популярных unix-команд. Оборачивает file, что может вызывать проблемы.
Пресеты: arp, arping, auth.log@, blockdev, cal, cksum, clock, configure, cpuinfo@, crontab@, cw-pipe, cw-test.cgi, date, df, diff, dig, dmesg, du, env, figlet, file, find, finger, free, fstab@, fuser, g++, gcc, group@, groups, hdparm, hexdump, host, hosts@, id, ifconfig, inittab@, iptables, last, lastlog, lsattr, lsmod, lsof, ltrace-color, make, md5sum, meminfo@, messages@, mount, mpg123, netstat, nfsstat, nmap, nslookup, objdump, passwd@, ping, pmap, pmap_dump, praliases, profile@, protocols@, ps, pstree, quota, quotastats, resolv.conf@, route, routel, sdiff, services@, showmount, smbstatus, stat, strace-color, sysctl, syslog, tar, tcpdump, tracepath, traceroute, umount, uname, uptime, users, vmstat, w, wc, whereis, who, xferlog.
- http://cwrapper.sourceforge.net/ || cwAUR
- ccze — быстрая раскраска журнала, написан на C, предназначен для замены colorize
- https://github.com/cornet/ccze/ || ccze
Библиотеки для раскраски вывода
- libtextstyle — библиотека на C для стилизации текстового вывода в терминалах
- https://www.gnu.org/software/gettext/libtextstyle/manual/index.html || gettext
- ruby-rainbow — расширение для Ruby-класса String, добавляющее поддержку ANSI-цветов
- https://rubygems.org/gems/rainbow/ || ruby-rainbow
- python-blessings — тонкая обёртка для раскраски, стилизации и позиционирования
- https://github.com/erikrose/blessings || python-blessings
- lolcat — программа на Ruby, которая делает текст цветным как радуга
- https://github.com/busyloop/lolcat/ || lolcat
Для отдельных приложений
Компиляторы
- colorgcc — обёртка на Perl, раскрашивающая предупреждения и ошибки, соответствующие формату вывода gcc
- https://schlueters.de/colorgcc.html || colorgcc
diff
Diff имеет встроенную поддержку цветов, что разумно использовать. Но эти обёртки тоже можно использовать:
- colordiff — Perl-скрипт для подсветки diff.
- https://www.colordiff.org/ || colordiff
- cwdiff — обёртка над (w)diff с поддержкой каталогов.
- https://github.com/junghans/cwdiff || cwdiffAUR
- git-delta — постраничный просмотрщик с подсветкой синтаксиса для git и diff.
- https://github.com/dandavison/delta || git-delta
cat
- bat — клон cat с подсветкой синтаксиса и интеграцией с git.
- https://github.com/sharkdp/bat || bat
less
source-highlight
В less можно добавить подсветку синтаксиса. Установите пакет source-highlight и добавьте в настройки вашей командной оболочки:
~/.bashrc
export LESSOPEN="| /usr/bin/source-highlight-esc.sh %s" export LESS='-R '
lesspipe
Активным пользователям командной строки может быть интересен lesspipe.
С помощью него можно просматривать список файлов в архиве:
$ less архив.tar.gz
==> use tar_file:contained_file to view a file in the archive -rw------- пользователь/группа 695 2008-01-04 19:24 архив/содержимое1 -rw------- пользователь/группа 43 2007-11-07 11:17 архив/содержимое2 архив.tar.gz (END)
lesspipe также добавляет к less возможность взаимодействия с файлами отличными от архивов, предоставляя альтернативу для конкретной команды, ассоциированной с этим типом файлов (вроде просмотра HTML через python-html2text).
Перелогиньтесь после установки lesspipe для его активации, или выполните source /etc/profile.d/lesspipe.sh
.
Make
- colormake — простая обёртка над make, делающая его вывод более читабельным.
- https://github.com/pagekite/Colormake/ || colormakeAUR
Ping
- prettyping — добавляет некоторые крутые возможности для мониторинга пинга. Обёртка над стандартным ping, делающая вывод более красивым, цветным, компактным и лёгким для чтения.
- https://denilson.sa.nom.br/prettyping/ || prettyping
Командные оболочки
bash
Смотрите Bash (Русский)/Prompt customization (Русский)#Цвета.
Fish
Смотрите Fish (Русский)#Веб-интерфейс.
xonsh
Смотрите Customizing the Prompt.
zsh
Смотрите Zsh (Русский)#Цвета.
Эмуляторы терминала
Виртуальная консоль
Если виртуальная консоль Linux работает через фреймбуффер, её цвета можно изменить. Это делается путём записи управляющей последовательности \e]PXRRGGBB
, где X
это 16-ричный индекс цвета 0-F и RRGGBB
это стандартный 16-ричный код RGB.
Например, для переиспользования существующих цветов из ~/.Xresources
добавьте в настройках своей командной оболочки:
if [ "$TERM" = "linux" ]; then _SEDCMD='s/.**color([0-9]{1,}).*#([0-9a-fA-F]{6}).*/1 2/p' for i in $(sed -n "$_SEDCMD" $HOME/.Xresources | awk '$1 < 16 {printf "\e]P%X%s", $1, $2}'); do echo -en "$i" done clear fi
Окно входа
Это пример цветного экрана входа в /etc/issue
. Сделайте резервную копию исходного файла mv /etc/issue /etc/issue.bak
как root и создайте новый /etc/issue
:
e[He[2J e[1;30m| e[34mr s e[36;1m/\\ e[37m|| e[36m| = e[30m| e[36m/ \\ e[37m|| e[36m| e[30m| e[32mt e[1;36m/ e[0;36m.. e[1m\\ e[37m//==\\\ ||/= /==\\ ||/=\\ e[36m| | |/\\ | | \\ / e[30m| e[32md e[0;36m/ . . \\ e[37m|| || || || || || e[36m| | | | | | X e[1;30m| e[0;36m/ . . \\ e[37m\\\==/| || \\==/ || || e[36m| | | | \/| / \\ e[1;30m| e[31mU e[0;36m/ .. .. \\ e[0;37mA simple, lightweight linux distribution. e[1;30m| e[0;36m/_' `_\\ e[1;30m| e[35ml e[0mon e[1;33mn e[0m
Смотрите также:
- https://bbs.archlinux.org/viewtopic.php?pid=386429#p386429
- https://www.linuxfromscratch.org/blfs/view/svn/postlfs/logon.html
X
Многие Xorg-терминалы, в том числе xterm and urxvt, поддерживают как минимум 16 цветов. Они могут быть изменены через X resources или через настройки, специфичные для терминала. Например:
~/.Xresources
! Black + DarkGrey *color0: #000000 *color8: #555753 ! DarkRed + Red *color1: #ff6565 *color9: #ff8d8d ! DarkGreen + Green *color2: #93d44f *color10: #c8e7a8 ! DarkYellow + Yellow *color3: #eab93d *color11: #ffc123 ! DarkBlue + Blue *color4: #204a87 *color12: #3465a4 ! DarkMagenta + Magenta *color5: #ce5c00 *color13: #f57900 !DarkCyan + Cyan (both not tango) *color6: #89b6e2 *color14: #46a4ff ! LightGrey + White *color7: #cccccc *color15: #ffffff
Важно: Ресурсы цветов, такие как foreground
и background
, могут быть прочитаны другими приложениями (такими как emacs). Это можно обойти, указав имя класса, например XTerm.foreground
.
Смотрите также:
- #Цветные страницы в xterm или rxvt-unicode о том, как автоматически раскрашивать жирный и подчёркнутый текст.
- Color Themes — обширный список цветовых тем терминала от Phraktured.
- Xcolors by dkeg (смотрите файлы
theme/dkeg - тема
в репозитории) - base16 color schemes
Отображение 256-цветной палитры
Печатает 256 цветов на экран.
$ (x=`tput op` y=`printf %76s`;for i in {0..256};do o=00$i;echo -e ${o:${#o}-3:3} `tput setaf $i;tput setab $i`${y// /=}$x;done)
Отображение управляющих последовательностей tput
Замените tput op
на желаемую команду.
$ ( strace -s5000 -e write tput op 2>&2 2>&1 ) | tee -a /dev/stderr | grep -o '"[^"]*"'
033[33[1;34m"33[39;49m"33[00m
Просмотр числа поддерживаемых цветов
Эта команда выведет вам список всех терминалов, известных базе terminfo, и число поддерживаемых ими цветов. Возможные значения: 8, 15, 16, 52, 64, 88 и 256.
$ for T in `find /usr/share/terminfo -type f -printf '%f '`;do echo "$T `tput -T $T colors`";done|sort -nk2
Eterm-88color 88 rxvt-88color 88 xterm+88color 88 xterm-88color 88 Eterm-256color 256 gnome-256color 256 konsole-256color 256 putty-256color 256 rxvt-256color 256 screen-256color 256 screen-256color-bce 256 screen-256color-bce-s 256 screen-256color-s 256 xterm+256color 256 xterm-256color 256
Просмотр возможностей терминала
Эта команда покажет возможности вашего текущего терминала.
$ infocmp -1 | tr -d 't,' | cut -f1 -d'=' | grep -v "$TERM" | sort | column -c80
acsc ed kcuu1 kich1 rmso am el kDC kLFT rmul bce el1 kdch1 km rs1 bel enacs kel kmous rs2 blink eo kend knp s0ds bold flash kEND kNXT s1ds btns#5 fsl kent kpp s2ds bw home kf1 kPRV s3ds ccc hpa kf10 kRIT sc civis hs kf11 kslt setab clear ht kf12 lines#24 setaf cnorm hts kf13 lm#0 setb colors#0x100 ich kf14 mc0 setf cols#80 ich1 kf15 mc4 sgr cr il kf16 mc5 sgr0 csr il1 kf17 mc5i sitm cub ind kf18 mir smacs cub1 indn kf19 msgr smam cud initc kf2 ncv#0 smcup cud1 is1 kf20 npc smir cuf is2 kf3 op smkx cuf1 it#8 kf4 pairs#0x7fff smso cup ka1 kf5 rc smul cuu ka3 kf6 rev tbc cuu1 kb2 kf7 ri tsl cvvis kbs kf8 rin u6 dch kc1 kf9 ritm u7 dch1 kc3 kfnd rmacs u8 dl kcbt kFND rmam u9 dl1 kcub1 kHOM rmcup vpa dsl kcud1 khome rmir xenl ech kcuf1 kIC rmkx xon
Скрипты, выводящие схему цветов
На странице [3] есть скрипты, которые отобразят вашу текущую схему цветов.
Поддержка True Color
Некоторые терминалы поддерживают все 16 миллионов цветов (RGB, 8 бит на канал): xterm, console, st и т.д. Соответствующие значения TERM xterm-direct
, konsole-direct
, st-direct
и.т.д понимает ncurses с версии 6.1 [4]. Подробнее об эмуляторах терминала и приложениях, поддерживающих True Color, смотрите [5].
Имейте в виду, что ядро Linux поддерживает управляющие последовательности SGR для True Color, но использовать это бессмысленно, потому что драйвер отобразит 24-битные цвета на 256-цветную палитру (смотрите функции rgb_foreground
, rgb_background
). Поэтому в terminfo нет записи linux-direct
.
Смотрите также
- клон lolcat на x64 ассемблере
You can add color to your Linux terminal using special ANSI encoding settings, either dynamically in a terminal command or in configuration files, or you can use ready-made themes in your terminal emulator. Either way, the nostalgic green or amber text on a black screen is wholly optional. This article demonstrates how you can make Linux as colorful (or as monochromatic) as you want.
Terminal capabilities
Modern systems usually default to at least xterm-256color, but if you try to add color to your terminal without success, you should check your TERM setting.
Historically, Unix terminals were literally that: physical points at the literal endpoint (termination) of a shared computer system where users could type in commands. They were unique from the teletype machines (which is why we still have /dev/tty devices in Linux today) that were often used to issue commands remotely. Terminals had CRT monitors built-in, so users could sit at a terminal in their office to interact directly with the mainframe. CRT monitors were expensive—both to manufacture and to control; it was easier to have a computer spit out crude ASCII text than to worry about anti-aliasing and other niceties that modern computerists take for granted. However, developments in technology happened fast even then, and it quickly became apparent that as new video display terminals were designed, they needed new capabilities to be available on an optional basis.
For instance, the fancy new VT100 released in 1978 supported ANSI color, so if a user identified the terminal type as vt100, then a computer could deliver color output, while a basic serial device might not have such an option. The same principle applies today, and it’s set by the TERM environment variable. You can check your TERM definition with echo:
$ echo $TERM
xterm-256color
The obsolete (but still maintained on some systems in the interest of backward compatibility) /etc/termcap file defined the capabilities of terminals and printers. The modern version of that is terminfo, located in either /etc or /usr/share, depending on your distribution. These files list features available in different kinds of terminals, many of which are defined by historical hardware: there are definitions for vt100 through vt220, as well as for modern software emulators like xterm and Xfce. Most software doesn’t care what terminal type you’re using; in rare instances, you might get a warning or error about an incorrect terminal type when logging into a server that checks for compatible features. If your terminal is set to a profile with very few features, but you know the emulator you use is capable of more, then you can change your setting by defining the TERM environment variable. You can do this by exporting the TERM variable in your ~/.bashrc configuration file:
export TERM=xterm-256color
Save the file, and reload your settings:
$ source ~/.bashrc
ANSI color codes
Modern terminals have inherited ANSI escape sequences for «meta» features. These are special sequences of characters that a terminal interprets as actions instead of characters. For instance, this sequence clears the screen up to the next prompt:
$ printf `33[2J`
It doesn’t clear your history; it just clears up the screen in your terminal emulator, so it’s a safe and demonstrative ANSI escape sequence.
ANSI also has sequences to set the color of your terminal. For example, typing this code changes the subsequent text to green:
$ printf '33[32m'
As long as you see color the same way your computer does, you could use color to help you remember what system you’re logged into. For example, if you regularly SSH into your server, you can set your server prompt to green to help you differentiate it at a glance from your local prompt. For a green prompt, use the ANSI code for green before your prompt character and end it with the code representing your normal default color:
export PS1=`printf "33[32m$ 33[39m"`
Foreground and background
You’re not limited to setting the color of your text. With ANSI codes, you can control the background color of your text as well as do some rudimentary styling.
For instance, with 33[4m, you can cause text to be underlined, or with 33[5m you can set it to blink. That might seem silly at first—because you’re probably not going to set your terminal to underline all text and blink all day—but it can be useful for select functions. For instance, you might set an urgent error produced by a shell script to blink (as an alert for your user), or you might underline a URL.
For your reference, here are the foreground and background color codes. Foreground colors are in the 30 range, while background colors are in the 40 range:
Color | Foreground | Background |
---|---|---|
Black | 33[30m | 33[40m |
Red | 33[31m | 33[41m |
Green | 33[32m | 33[42m |
Orange | 33[33m | 33[43m |
Blue | 33[34m | 33[44m |
Magenta | 33[35m | 33[45m |
Cyan | 33[36m | 33[46m |
Light gray | 33[37m | 33[47m |
Fallback to distro’s default | 33[39m | 33[49m |
There are some additional colors available for the background:
Color | Background |
---|---|
Dark gray | 33[100m |
Light red | 33[101m |
Light green | 33[102m |
Yellow | 33[103m |
Light blue | 33[104m |
Light purple | 33[105m |
Teal | 33[106m |
White | 33[107m |
Permanency
Setting colors in your terminal session is only temporary and relatively unconditional. Sometimes the effect lasts for a few lines; that’s because this method of setting colors relies on a printf statement to set a mode that lasts only until something else overrides it.
The way a terminal emulator typically gets instructions on what colors to use is from the settings of the LS_COLORS environment variable, which is in turn populated by the settings of dircolors. You can view your current settings with an echo statement:
$ echo $LS_COLORS
rs=0:di=38;5;33:ln=38;5;51:mh=00:pi=40;
38;5;11:so=38;5;13:do=38;5;5:bd=48;5;
232;38;5;11:cd=48;5;232;38;5;3:or=48;
5;232;38;5;9:mi=01;05;37;41:su=48;5;
196;38;5;15:sg=48;5;11;38;5;16:ca=48;5;
196;38;5;226:tw=48;5;10;38;5;16:ow=48;5;
[...]
Or you can use dircolors directly:
$ dircolors --print-database
[...]
# image formats
.jpg 01;35
.jpeg 01;35
.mjpg 01;35
.mjpeg 01;35
.gif 01;35
.bmp 01;35
.pbm 01;35
.tif 01;35
.tiff 01;35
[...]
If that looks cryptic, it’s because it is. The first digit after a file type is the attribute code, and it has six options:
- 00 none
- 01 bold
- 04 underscore
- 05 blink
- 07 reverse
- 08 concealed
The next digit is the color code in a simplified form. You can get the color code by taking the final digit of the ANSII code (32 for green foreground, 42 for green background; 31 or 41 for red, and so on).
Your distribution probably sets LS_COLORS globally, so all users on your system inherit the same colors. If you want a customized set of colors, you can use dircolors for that. First, generate a local copy of your color settings:
$ dircolors --print-database > ~/.dircolors
Edit your local list as desired. When you’re happy with your choices, save the file. Your color settings are just a database and can’t be used directly by ls, but you can use dircolors to get shellcode you can use to set LS_COLORS:
$ dircolors --bourne-shell ~/.dircolors
LS_COLORS='rs=0:di=01;34:ln=01;36:mh=00:
pi=40;33:so=01;35:do=01;35:bd=40;33;01:
cd=40;33;01:or=40;31;01:mi=00:su=37;41:
sg=30;43:ca=30;41:tw=30;42:ow=34;
[...]
export LS_COLORS
Copy and paste that output into your ~/.bashrc file and reload. Alternatively, you can dump that output straight into your .bashrc file and reload.
$ dircolors --bourne-shell ~/.dircolors >> ~/.bashrc
$ source ~/.bashrc
You can also make Bash resolve .dircolors upon launch instead of doing the conversion manually. Realistically, you’re probably not going to change colors often, so this may be overly aggressive, but it’s an option if you plan on changing your color scheme a lot. In your .bashrc file, add this rule:
[[ -e $HOME/.dircolors ]] && eval "`dircolors --sh $HOME/.dircolors`"
Should you have a .dircolors file in your home directory, Bash evaluates it upon launch and sets LS_COLORS accordingly.
Color
Colors in your terminal are an easy way to give yourself a quick visual reference for specific information. However, you might not want to lean on them too heavily. After all, colors aren’t universal, so if someone else uses your system, they may not see the colors the same way you do. Furthermore, if you use a variety of tools to interact with computers, you might also find that some terminals or remote connections don’t provide the colors you expect (or colors at all).
Those warnings aside, colors can be useful and fun in some workflows, so create a .dircolor database and customize it to your heart’s content.
This work is licensed under a Creative Commons Attribution-Share Alike 4.0 International License.
i have created some functions, based on github code from other threads. Sorry i don’t remember.
You can put these functions in your ~/.bashrc file
As you can see, if you call «create_random_profile»,
First, it will check and delte any previous random profile you have created.
Second, it will create a random name profile in gnome terminals.
Third, it will set that name in an environment variable that you can use to change your color in predefined functions. See last function function setcolord().
This should be useful, to have many terminals with different colors. Besides, with predefined functions you can change these colors on the fly.
Enjoy it!
function create_random_profile() {
#delete previous profiles in case there were something
#delete_one_random_profile
prof="`mktemp -u HACK_PROFILE_XXXXXXXXXX`"
gconftool-2 --type list --list-type string --set $prof_list "`gconftool-2 --get $prof_list | sed "s/]/,$prof]/"`"
file="`mktemp`"
gconftool-2 --dump "/apps/gnome-terminal/profiles/Default" | sed "s,profiles/$2,profiles/$prof,g" > "$file"
gconftool-2 --load "$file"
gconftool-2 --type string --set "/apps/gnome-terminal/profiles/$prof/visible_name" "$prof"
gconftool-2 --set "/apps/gnome-terminal/profiles/$prof/use_theme_colors" --type bool false
rm -f -- "$file"
export __TERM_PROF=$prof
}
function delete_one_random_profile() {
regular="HACK_PROFILE_"
prof=$(gconftool-2 --get /apps/gnome-terminal/global/profile_list | sed -n "s/.*(HACK_PROFILE_..........).*/1/p")
if [ ! -z "$prof"]; then
echo "size ${#prof}"
echo "size of regular ${#regular}"
echo "DO DELETE of $prof"
#if not empty
gconftool-2 --type list --list-type string --set $prof_list "`gconftool-2 --get $prof_list | sed "s/$prof//;s/[,/[/;s/,,/,/;s/,]/]/"`"
gconftool-2 --unset "/apps/gnome-terminal/profiles/$prof"
else
echo "NOTHING TO DELETE"
fi
}
function setcolord()
{
echo "Dont forget to change to Profile0 in the menu of your terminal->Change Profile->Profile_0"
gconftool-2 --set "/apps/gnome-terminal/profiles/$__TERM_PROF/background_color" --type string white
gconftool-2 --set "/apps/gnome-terminal/profiles/$__TERM_PROF/foreground_color" --type string black
}
function setcolor_cyan()
{
echo "Dont forget to change to $__TERM_PROF in the menu of your terminal->Change Profile->Profile_0"
gconftool-2 --set "/apps/gnome-terminal/profiles/$__TERM_PROF/background_color" --type string "#8DCBCC"
gconftool-2 --set "/apps/gnome-terminal/profiles/$__TERM_PROF/foreground_color" --type string black
}
By the way you can save time if you create the terminal using already the random. You can do that calling:
gnome-terminal --working-directory=$HOME --window-with-profile="$prof"
Если вы освоили Linux и настраиваете под себя, то вам приходится использовать терминал и интерпретатор bash.
Захотелось мне изменить внешний вид терминала, а в частности вид самой командной строки. Оказалось это все не так сложно.
Информации на эту тему очень много.
Итак по порядку, начнем с самого терминала.
Запустим его, выглядит по умолчанию он вот так:
Запустим терминал и зайдем в меню сверху правка — настройки
В настройках терминала вы найдете вкладки Общие, Вид, Цвета — это те вкладки с параметрами которые содержат опции, влияющие на внешний вид вашего терминала.
Все пункты имеют вполне понятное название и будет не трудно разобраться в них даже новичку.
Вкладка настроек вида. Можно поменять шрифт его параметры. Фон сделать прозрачным — например. Задать размеры терминала которым он соотвутствует при запуске.
Вкладка цвета.
Думаю понятно из названия, тут вы сможете поменять цветовую схему терминала.
Теперь перейдем к интерпретатору Bash
Интерпретатор bash — простым языком это оболочка которая принимает ваши команды и передает их системе.
Из википедии:
Bash (от англ. Bourne again shell, каламбур «Born again» shell — «возрождённый» shell) — усовершенствованная и модернизированная вариация командной оболочки Bourne shell. Одна из наиболее популярных современных разновидностей командной оболочки UNIX. Особенно популярна в среде Linux, где она часто используется в качестве предустановленной командной оболочки.
Представляет собой командный процессор, работающий, как правило, в интерактивном режиме в текстовом окне. Bash также может читать команды из файла, который называется скриптом (или сценарием). Как и все Unix-оболочки, он поддерживает автодополнение имён файлов и каталогов, подстановку вывода результата команд, переменные, контроль над порядком выполнения, операторы ветвления и цикла. Ключевые слова, синтаксис и другие основные особенности языка были заимствованы из sh. Другие функции, например, история, были скопированы из csh и ksh. Bash в основном соответствует стандарту POSIX, но с рядом расширений[3].
В windows тоже есть терминал, который использует интерпретатор shell — более раннюю версию Bash.
По умолчанию выглядит наша строка так
Вот ее и будем стилизовать — поменяем цвета и вывод информации.
Стиль нашей командной строки определяет конфигурационный файл
~/.bashrc.
Он содержится в нашей домашней директории в скрытом виде, его и будем редактировать.
Но для начала нужно знать, что редактировать.
Поэтому не спешите и дочитайте всю статью до конца, чтоб правильно стилизовать строку интерпретатора bash и не сломать ничего в системе.
Стиль и первоначальную информацию выводит и определяет переменная PS1.
При запуске мы видим имя пользователя и после знака @ идет имя нашего хоста, на конце знак доллара.
Если вы перейдете на работу от имени root (получите полный доступ) на конце строки будет стоять знак #.
И соответственно сменится имя на root.
Параметры переменной PS1 в конфигурационном файле Bash
a | an ASCII bell character (07) |
d | дата в формате »День_недели, Месяц, Число». |
e | an ASCII escape character (033) |
h | имя хоста до первой точки. |
H | имя хоста |
j | количество задач, работающих в интерпретаторе в настоящее время |
l | название терминала |
n | переход на новую строку |
r | возврат каретки на начало строки |
s | название интерпретатора (будет выведено, например, «bash» |
t | время в 24-часовом формате (ЧЧ: MM: СС) |
T | время в 12-часовом формате (ЧЧ: ММ: СС) |
@ | время в 12-часовом формате (AM/PM) |
u | имя активного пользователя |
v | номер версии bash |
V | номер версии bash, номер релиза |
w | текущая директория (будет выведено в формате /path/to/work_dir_name) |
W | имя текущей директории (будет выведено в формате «dir_name») |
! | номер команды в истории |
# | системный номер команды |
$ | if the effective UID is 0, a #, otherwise a $ |
\ | обратный слеш |
[ | начало последовательности непечатаемых символов (см. примеры в разделе «Цвета и стилизация». |
] | конец последовательности символов |
$ ( ) | внешняя команда |
С помощью этих переменных можно в приветствии вывести время например и т.п.
Если зададим такую переменную, добавим дату к имеющемуся (как пример), убрав все стили
PS1='[u@h] $(date +%m/%d/%y) w $'
Получим такой результат:
Чтоб задать стили необходимо знать параметры цветов, которые можно задавать.
Все стили задаются по следующим параметрам:
Стили текста:
Нормальный, обычный текст — 0
Повышенная яркость — 1
Пониженная яркость — 2
Подчеркнутый — 3
Нормальная яркость — 5
Инвертированный 7
Скрытый — 8
Цвета текста:
Черный 30
Красный — 31
Зеленый — 32
Желтый — 33
Синий — 34
Маджента — 35
Циановый — 36
Белый — 37
Цвет фона строки
Черный — 40
Красный — 41
Зеленый — 42
Желтый — 43
Синий — 44
Маджента — 45
Циановый — 46
Белый — 47
Теперь можно поменять строку и стилизовать ее под свой вкус и цвет.
Откроем терминал, и с помощью редактора nano откроем конфигурационный файл, командой
nano ~/.bashrc
В открытом файле мы ничего переделывать не будем, просто спускаемся в самый низ файла и в последней строке дописываем свои собственные стили переменной PS1
Я использовал такие настройки и стили
PS1='[33[01;34m]u: [33[0;33m]w [33[01;32m]$ [33[01;32m] '
Естественно после внесении изменений сохраняем сочетанием клавиш Ctrl+O и выходим Ctrl+X
Перезапустив терминал видим такой стиль
Теперь хотелось бы поменять стиль при работе от имени root пользователя. Пользователь рут, а точнее его конфигурационные файлы, имеют собственные стили.
Для этого откроем в редакторе nano, так же из терминала файл /root/.bashrc командой
sudo nano /root/.bashrc
И в самом конце добавим свои стили, я использовал вот такие
PS1='[33[01;31m]u: [33[0;35m]w [33[01;32m]$ [33[01;31m]'
Не забываем после внесении изменений сохраняем сочетанием клавиш Ctrl+O и выходим Ctrl+X
По окончанию получаем вот такой результат:
Для тех кто хочет большего в плане дизайна и внесения плюшек в командный интерпретатор советую почитать об оболочке Zsh. Она дает намного больше в плане дизайна и внесения изменений, так же предполагает использование различных тем.
Если кому есть, что добавить или поделится своим опытом пишите в комментариях.
Всем Удачи!
15 сентября 2021
Gogh
Color scheme for your terminal
Color Schemes For Ubuntu, Linux Mint, Elementary OS and all distributions that use Gnome Terminal, Pantheon Terminal, Tilix, or XFCE4 Terminal; initially inspired by Elementary OS Luna. Also works on iTerm for macOS. You can check out the themes here.
⚙️ Pre-Install
In your terminal type:
sudo apt-get install dconf-cli uuid-runtime
You can now install in interactive mode (easy) or non-interactive mode (ideal for scripting)
⚙️ Install (interactive mode)
1. Just copy and paste this one-line command:
bash -c "$(wget -qO- https://git.io/vQgMr)"
Or, if you are a Mac user:
bash -c "$(curl -sLo- https://git.io/vQgMr)"
2. Select the color theme installed from the terminal
DEMO:
Install (non-interactive mode)
# clone the repo into "$HOME/src/gogh" mkdir -p "$HOME/src" cd "$HOME/src" git clone https://github.com/Gogh-Co/Gogh.git gogh cd gogh # necessary in the Gnome terminal on ubuntu export TERMINAL=gnome-terminal # necessary in the Alacritty terminal pip install -r requirements.txt export TERMINAL=alacritty # Enter themes dir cd themes # install themes ./atom.sh ./dracula.sh
💻 Terminals
- Alacritty — Web
- Cygwin — Web
- Foot — Web
- Gnome — Web
- Guake — Web
- iTerm — Web
- Kitty — Web
- Konsole — Web
- Mate — Web
- Mintty — Web
- Pantheon / Elementary — Web
- Tilix — Web
- XFCE4 — Web
🎨 Themes
We have lots of themes. Check them out here!
also all themes in json format: https://raw.githubusercontent.com/Gogh-Co/Gogh/master/data/themes.json
📌 How to
If you want to create your own color scheme or contribute to the project, start here.
🤔 Help
❤️ Credits:
- 4bit
- Bluloco Light Theme
- Catppuccin
- Chalk by Sindre Sorhus
- Dracula by Zeno Rocha
- Elementary OS
- Everblush
- Everforest Dark & Light theme set by Sainnhe Park
- Fairy Floss
- Flat Remix
- Flat UI Terminal Theme
- Gooey by Matt Harris
- Gotham by Andrea Leopardi
- Gruvbox by Pavel Pertsev
- Hemisu by Noah Frederick
- kokuban by ygkn
- Monokai by Wimer Hazenberg
- Nightfox
- Ocean by Fabian Perez
- Omni
- One Dark & Light theme set by Nathan Buchar
- Panda by Siamak
- Peppermint by Noah Frederick
- Rosé Pine
- SMYCK by John-Paul Bader
- Snazzy by Sindre Sorhus
- Solarized by Ethan Schoonover
- Sonokai by Sainnhe Park
- Srcery by Daniel Berg
- Summer Pop by Guillermo Aguirre
- SynthWave ’84
- SynthWave Alpha
- Terminal Sexy by George Czabania
- Tilix
- Tokyo Night
- Tomorrow color theme set by Chris Kempson
- Material theme by Mitchel van Eijgen and Liu Xinan
- KANAGAWA.nvim
❤️ Contributors:
- @contributors
Why Gogh?
There is no blue without yellow and without orange.
— Vincent Van Gogh
Author
- Miguel D. Quintero — Lanet.co
💵 Buy me a coffee — paypal
📣 Mentions
- VSCode Theme
- Awesome-Shell
- Hipertextual
- MuyLinux
- Reddit — elementaryos
- dev.to
Themes in json
format
In your terminal type:
This generates a json file located at gh-pages/data/themes.json
Original script source: https://gist.github.com/rapgru/09b449285231d18f4e4536c5f48fc927