Можно ли использовать tput с комбинированными возможностями?

Можно ли использовать tput с комбинированными возможностями?

Например, если мне нужен префикс для жирного зеленого, я могу сделать 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 разработаны для того, чтобы допускать типы терминалов, которые не придерживаются ее. Это не тот случай, когда на самом деле можно всегда объединять управляющие последовательности таким образом.

Связанный контент