Ogólnie rzecz biorąc, uzyskanie obecnych kolorów jest niemożliwe. Przetwarzanie sekwencji kontrolnej terminala odbywa się „wewnątrz” terminala, gdziekolwiek to się dzieje. W przypadku emulatora terminala, takiego jak xterm
wbudowany w jądro systemu operacyjnego, które zapewnia wirtualne terminale jądra, wewnętrzny stan emulatora, w tym jego pojęcie bieżącego „renderowania graficznego” (tj. Koloru i atrybutów), znajduje się na komputerze i jest teoretycznie dostępny. Ale dla prawdziwego terminala informacja ta znajduje się w pewnej lokalizacji RAM na fizycznie oddzielnej maszynie połączonej przez łącze szeregowe.
To powiedziawszy, niektóre terminale zawierają mechanizm odczytu takich informacji jako część ich protokołu terminala, który jest wysyłany przez to łącze szeregowe. Zapewniają sekwencje kontrolne, które program może wysłać do terminala, co powoduje, że wysyła on informacje o swoim stanie wewnętrznym jako dane wejściowe terminala. mikeserv
pokazał sekwencje kontrolne, na które xterm
odpowiada emulator terminala. Ale są one specyficzne dla xterm
. Wbudowane emulatory terminali w jądrze Linuksa i różne jądra BSD są na przykład różnymi typami terminali i nie implementują żadnych takich sekwencji kontrolnych. To samo dotyczy całych rodzin prawdziwych terminali.
Terminale DEC VT525 implementują mechanizm odczytu, ale mają zestaw sekwencji kontrolnych, które nie mają związku z tymi, które są używane przez xterm
. Jeden wysyła sekwencję DECRQSS (Żądanie wyboru lub ustawienia), aby zażądać bieżącej interpretacji grafiki, a terminal odpowiada, wysyłając DECRPSS (Wybór lub ustawienie raportu). Konkretnie:
- Host wysyła: DCS
$
q
m
ST (DECRQSS z częścią funkcji kontrolnej SGR jako ustawienie)
- Terminal odpowiada: DCS
0
$
r
0
;
3
3
;
4
4
m
ST (DECRPSS z parametrami i częścią funkcji kontrolnej sekwencji kontrolnej SGR, która ustawia bieżące kolory pierwszego planu i tła)
Oczywiście uważne przeczytanie twojego pytania pokazuje, że znów wymachujesz bananem w czekoladzie w tych europejskich systemach walutowych. To, co tak naprawdę próbujesz zrobić, dla którego wybrałeś rozwiązanie, a następnie zapytałeś, jak wykonać część tego rozwiązania, to zachowanie poprzedniego stanu podczas pisania kolorowych wyników. Do tego celu służy nie tylko sekwencja kontrolna DEC VT, ale także sekwencja terminali konsoli SCO, rozpoznawana przez xterm
różne emulatory terminali wbudowane w jądro, oraz wpis termcap / terminfo, który mówi ci, jakie są dla twojego terminala.
Wpisy termcap to sc
i rc
. Wpisy terminfo to save_cursor
i restore_cursor
. Nazwy są nieco mylące ze względu na działanie (chociaż działają jako ostrzeżenie, że polegasz na czymś, co jest de facto, a nie de jure ). Rzeczywiste sekwencje sterujące DECSC, DECRC, SCOSC i SCORC również zapisują i przywracają bieżące odwzorowanie grafiki.
Biorąc pod uwagę, że wskazany artykuł dotyczy generowania sekwencji sterujących ze skryptów powłoki, polecenie, którego teraz szukasz, to tput
.
Dalsza lektura
echotc Co
lubechoti colors
, ale po prostu nie ma zmiennej, która przechowuje aktualną definicję kodu koloru.