tput
peut gérer des expressions (par exemple dans sgr
et setaf
) que le shell-scripteur typique trouverait moins qu'utilisable. Pour avoir une idée de ce qui est impliqué, voir la sortie de infocmp
avec l' -f
option (formatage) appliquée. Voici un exemple d'utilisation de ces chaînes à partir des descriptions terminfo de xterm :
xterm-16color|xterm with 16 colors,
colors#16,
pairs#256,
setab=\E[
%?
%p1%{8}%<
%t%p1%{40}%+
%e
%p1%{92}%+
%;%dm,
setaf=\E[
%?
%p1%{8}%<
%t%p1%{30}%+
%e
%p1%{82}%+
%;%dm,
setb=
%p1%{8}%/%{6}%*%{4}%+\E[%d%p1%{8}%m%Pa
%?%ga%{1}%=
%t4
%e%ga%{3}%=
%t6
%e%ga%{4}%=
%t1
%e%ga%{6}%=
%t3
%e%ga%d
%;
m,
setf=
%p1%{8}%/%{6}%*%{3}%+\E[%d%p1%{8}%m%Pa
%?%ga%{1}%=
%t4
%e%ga%{3}%=
%t6
%e%ga%{4}%=
%t1
%e%ga%{6}%=
%t3
%e%ga%d
%;
m,
use=xterm+256color,
use=xterm-new,
Le formatage divise les choses - un script ou un programme pour faire de même devrait suivre ces rebondissements. La plupart des gens abandonnent et utilisent simplement les cordes les plus faciles.
La fonction 16 couleurs est empruntée à IBM aixterm, qui mappe 16 codes chacun pour le premier plan et l'arrière-plan sur deux plages;
- premier plan sur 30-37 et 90-97
- fond sur 40-47 et 100-107
Un script simple
#!/bin/sh
TERM=xterm-16color
export TERM
printf ' %12s %12s\n' Foreground Background
for n in $(seq 0 15)
do
F=$(tput setaf $n | cat -v)
B=$(tput setab $n | cat -v)
printf '%2d %12s %12s\n' $n "$F" "$B"
done
et la sortie montre comment cela fonctionne:
Foreground Background
0 ^[[30m ^[[40m
1 ^[[31m ^[[41m
2 ^[[32m ^[[42m
3 ^[[33m ^[[43m
4 ^[[34m ^[[44m
5 ^[[35m ^[[45m
6 ^[[36m ^[[46m
7 ^[[37m ^[[47m
8 ^[[90m ^[[100m
9 ^[[91m ^[[101m
10 ^[[92m ^[[102m
11 ^[[93m ^[[103m
12 ^[[94m ^[[104m
13 ^[[95m ^[[105m
14 ^[[96m ^[[106m
15 ^[[97m ^[[107m
Les nombres sont divisés car aixterm utilise les plages 30-37 et 40-47 pour correspondre aux couleurs ECMA-48 (également appelées "ANSI") et utilise la plage 90-107 pour les codes non définis dans la norme.
Voici une capture d'écran avec xterm using TERM=xterm-16color
, où vous pouvez voir l'effet.
Lectures complémentaires:
printf
les séquences d'échappement ANSI, maistput
échouera (au moins sur ma boîte).