Di '.*rc
people orang ' file yang saya lihat online atau dalam berbagai kode, saya cenderung melihat banyak orang yang secara manual menggunakan urutan pelarian ANSI daripada menggunakan tput
.
Saya memahami bahwa tput
lebih universal/aman, jadi ini membuat saya bertanya-tanya:
Apakah ada alasan obyektif seseorang harus menggunakan urutan pelarian sebagai pengganti tput
? (Portabilitas, ketahanan terhadap kesalahan, terminal yang tidak biasa…?)
Jawaban yang Diterima:
tput
dapat menangani ekspresi (misalnya di sgr
dan setaf
) yang menurut shell-scripter kurang dari dapat digunakan. Untuk mendapatkan gambaran tentang apa yang terlibat, lihat output dari infocmp
dengan -f
(pemformatan) opsi diterapkan. Berikut adalah salah satu contoh menggunakan string tersebut dari deskripsi terminfo 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,
Pemformatan membagi segalanya - skrip atau program untuk melakukan hal yang sama harus mengikuti tikungan dan belokan itu. Kebanyakan orang menyerah dan hanya menggunakan string termudah.
Fitur 16-warna dipinjam dari IBM aixterm, yang memetakan 16 kode masing-masing untuk latar depan dan latar belakang ke dalam dua rentang;
- depan ke 30-37, dan 90-97
- latar belakang 40-47, dan 100-107
Skrip sederhana
#!/bin/sh
TERM=xterm-16color
export TERM
printf ' %12s %12sn' Foreground Background
for n in $(seq 0 15)
do
F=$(tput setaf $n | cat -v)
B=$(tput setab $n | cat -v)
printf '%2d %12s %12sn' $n "$F" "$B"
done
dan output menunjukkan cara kerjanya:
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
Angka dibagi karena aixterm menggunakan rentang 30-37 dan 40-47 untuk mencocokkan warna ECMA-48 (juga dikenal sebagai “ANSI”), dan menggunakan rentang 90-107 untuk kode tidak didefinisikan dalam standar.
Berikut adalah tangkapan layar dengan xterm menggunakan TERM=xterm-16color
, tempat Anda dapat melihat efeknya.
Bacaan lebih lanjut:
infocmp
– bandingkan atau cetak deskripsi terminfotput
,reset
– menginisialisasi terminal atau basis data terminfo kueri- ECMA-48:Fungsi Kontrol untuk Kumpulan Karakter Berkode
aixterm
Perintah- Bukankah warna cerah sama dengan bold? (FAQ XTerm)