Secara umum, mendapatkan warna saat ini tidak mungkin. Pemrosesan urutan kontrol terminal terjadi "di dalam" terminal, di mana pun itu terjadi. Dengan emulator terminal seperti xterm
atau yang dibangun ke dalam kernel sistem operasi yang menyediakan terminal virtual kernel, keadaan internal emulator, termasuk gagasan tentang "rendition grafis" saat ini (yaitu warna dan atribut), ada di mesin itu sendiri dan secara teori dapat diakses. Tetapi untuk terminal nyata, informasi ini ada di beberapa lokasi RAM pada mesin yang secara fisik terpisah terhubung melalui tautan serial.
Yang mengatakan, beberapa terminal menyertakan mekanisme untuk membaca informasi seperti sebagai bagian dari protokol terminal mereka, yang dikirim melalui tautan serial itu. Mereka memberikan urutan kontrol yang dapat dikirim oleh sebuah program ke terminal, yang menyebabkannya mengirim kembali informasi tentang keadaan internalnya, sebagai input terminal. mikeserv
telah menunjukkan kepada Anda urutan kontrol yang xterm
merespons emulator terminal. Tetapi ini khusus untuk xterm
. Emulator terminal bawaan di kernel Linux dan berbagai kernel BSD adalah tipe terminal yang berbeda, misalnya, dan tidak menerapkan urutan kontrol seperti itu sama sekali. Hal yang sama berlaku untuk seluruh keluarga terminal nyata.
Terminal DEC VT525 menerapkan mekanisme pembacaan, tetapi memiliki serangkaian rangkaian kontrol yang tidak memiliki hubungan dengan yang digunakan oleh xterm
. Seseorang mengirim urutan DECRQSS (Permintaan Pemilihan atau Pengaturan) untuk meminta rendisi grafik saat ini, dan terminal merespons dengan mengirimkan DECRPSS (Pemilihan atau Pengaturan Laporan). Secara khusus:
- Host mengirim: DCS
$
q
m
ST (DECRQSS dengan bagian fungsi kontrol SGR sebagai pengaturan)
- Terminal merespon: DCS
0
$
r
0
;
3
3
;
4
4
m
ST (DECRPSS dengan bagian parameter dan fungsi kontrol dari rangkaian kontrol SGR yang mengatur warna foreground dan background saat ini)
Tentu saja, pembacaan yang cermat atas pertanyaan Anda mengungkapkan bahwa Anda mengayunkan pisang yang dilapisi cokelat di sistem mata uang Eropa itu lagi. Apa yang sebenarnya Anda coba lakukan, yang telah Anda pilih solusi dan kemudian bertanya bagaimana melakukan bagian dari solusi itu, adalah mempertahankan keadaan sebelumnya sementara Anda menulis beberapa output berwarna. Tidak hanya ada urutan kontrol DEC VT untuk melakukan hal ini, ada urutan terminal konsol SCO untuknya yang dikenali oleh xterm
dan berbagai emulator terminal bawaan kernel, dan entri termcap / terminfo yang memberi tahu Anda apa artinya untuk terminal Anda.
Entri termcap adalah sc
dan rc
. Entri terminfo adalah save_cursor
dan restore_cursor
. Nama-nama tersebut agak menyesatkan sebagai efek (meskipun mereka bertindak sebagai peringatan bahwa Anda mengandalkan sesuatu yang secara de facto daripada de jure ). Urutan kontrol DECSC, DECRC, SCOSC, dan SCORC yang sebenarnya juga menyimpan dan mengembalikan rendisi grafik saat ini.
Mengingat bahwa artikel yang Anda tunjuk adalah tentang menghasilkan urutan kontrol dari skrip shell, perintah yang Anda cari sekarang adalah tput
.
Bacaan lebih lanjut
echotc Co
atauechoti colors
, tetapi tidak ada cukup variabel yang menyimpan kode warna saat ini definisi.