
Например, если мне нужен префикс для жирного зеленого, я могу сделать Green=$(tput bold; tput setaf 2)
. Это установит $Green в "\E[1m\E[32m". Но на терминале Ansi это может быть так же легко "\E[1;32m".
Можно ли это сделать с помощью tput, или я прошу слишком многого?
решение1
Нет, tput не будет этого делать (обычно), поскольку вы, скорее всего, будете использовать только предопределенные/стандартные возможности терминала, в которых такая комбинация отсутствует.
С помощью ncurses вы можете определить собственное описание терминала с пользовательской возможностью, и tput будет с этим работать.
Что-то вроде этого будет сочетать цвета:
infocmp -x >foo
printf '\tfgbg=\\E[3%p1%;4%p2%dm,\n' >>foo
sudo tic -x foo
Тогда (пример для 8 цветов)
tput fgbg 4 0
установил бы передний план на синий, а фон на черный. Однако есть много возможностей. Использование предопределенных возможностей требует меньше усилий.
решение2
Другой способ взглянуть на это — знать, что выдаже можетобъединение управляющих последовательностей таким образом — это специфическая для семейства терминалов вещь, которая не является моделью termcap/terminfo. Хотя 44-летняя модель ECMA-48 для управляющих последовательностей широко распространена в настоящее время, termcap/terminfo разработаны для того, чтобы допускать типы терминалов, которые не придерживаются ее. Это не тот случай, когда на самом деле можно всегда объединять управляющие последовательности таким образом.