как использовать 256 цветов для цвета фона в терминале

Если вы хотите запустить что-то , пока у него не будет нулевого кода возврата,

until [ $RANDOM -eq 42 ]
do 
  echo looking for the answer to life, the universe, and everything
done

(или в виде одного -вкладыша)

until [ $RANDOM -eq 42 ]; do echo looking for the answer to life, the universe, and everything; done

Для вашего примера:

until./fetch_remote_work.sh; do :; done

Этот цикл «ничего не делает» (выполняет:встроенную функцию)до fetch _удаленного _сценария work.sh, возвращающего 0.

9
09.09.2020, 06:38
1 ответ

В zshвам не нужно жестко кодировать управляющие последовательности, поскольку в нем есть несколько встроенных способов установки цвета фона и переднего плана.

Вы можете использовать от echoti setafдо setтерминала ansi fцвет руды и echoti setabдля установки bфонового цвета(setafи setabявляются именами соответствующих tэмм info возможности)

Предполагая, что ваш терминал поддерживает 256 цветов (, так как основанные на VTE -, такие как ваш терминатор gnome -do )и $TERM, правильно установлено значение, которое идентифицирует запись terminfo с правильным выходом последовательности для этого, он должен работать.

$ echoti setab 196 | sed -n l
\033[48;5;196m$

Или вы можете использовать расширение подсказки с помощью print -Pили флаг расширения параметра %и:

$ print -rP '%K{196}' | sed -n l
\033[48;5;196m$

(здесь sed -n lиспользуется для отображения соответствующей escape-последовательности, которая отправляется, $просто показывает, где заканчивается строка, это не часть вывода, \033— GNU sedlкомандное представление символа ESC (с восьмеричным значением 033 байта в ASCII))

Некоторые терминалы (, в том числе терминалы на основе VTE -, такие как терминатор gnome -), также поддерживают спецификации RGB. На тех,ты мог бы сделать

$ print -rP '%K{#ffffff}' | sed -n l
\033[48;2;255;255;255m$

(здесь с fffffffдля ярко-белого, поскольку это ffмаксимальное значение для всех красных, зеленых и синих компонентов ). В этом случае zshжестко кодирует последовательность стилей xterm -(, см. там для фона ), поскольку нет соответствующей возможности terminfo. Хотя это и не стандарт , в настоящее время он наиболее широко поддерживается в современных эмуляторах терминала FLOSS.

%Kзадает цвет фона, %F— цвет переднего плана. %k/ %fвосстановить цвет по умолчанию.

Для терминалов, которые не поддерживают это, но поддерживают 88 или 256 цветовую палитру, zshтакже имеет модуль zsh/nearcolor, чтобы получить цвет, наиболее близкий к этой спецификации RGB:

$ zmodload zsh/nearcolor
$ echoti colors
256
$ print -rP '%K{#ffffff}' | sed -n l
\033[48;5;231m$

(здесь цвет 231 на моем 256-цветном терминале ближе всего к ярко-белому, на самом деле он ярко-белый ).

Если у вас есть доступ к файлу X11 rgb.txt, вы также можете определить ассоциативные массивы для каждого из имен цветов X11 с чем-то вроде:

typeset -A X11_bg X11_fg
while read -r r g b c; do
  [[ $r = [0-9]* ]] || continue
  printf -v hex %02x $r $g $b
  X11_fg[$c]=${(%):-%F{#$hex}}
  X11_bg[$c]=${(%):-%K{#$hex}}
done < /etc/X11/rgb.txt
X11_bg[default]=${(%):-%k} X11_fg[default]=${(%):-%f}

(Системы, подобные Debian -, имеют /etc/X11/rgb.txtкак часть пакета x11-common).

Для таких вещей, как:

print -r "$X11_bg[dark olive green]text$X11_bg[default]"

Подробнее см.:

  • man 5 terminfo
  • info zsh echoti
  • info zsh print
  • info zsh "Prompt Expansion"
  • info zsh "The zsh/nearcolor Module"

(имейте в виду, что в некоторых системах вам необходимо установить пакет zsh-docили его аналог, чтобы страницы infoстали доступными ).

10
18.03.2021, 23:05

Теги

Похожие вопросы