Kod ucieczki ANSI — ANSI escape code
Standard | |
---|---|
Klasyfikacja | ISO / IEC 2022 na podstawie kodu kontrola i sterowanie zestaw sekwencja |
Inne powiązane kodowanie(-a) | Inne standardy funkcji sterowania: ITU T.101 , JIS X 0207 , ISO 6630 , DIN 31626 , ETS 300 706 |
Sekwencje specjalne ANSI są standardem sygnalizacji wewnątrzpasmowej do kontrolowania położenia kursora, koloru, stylu czcionki i innych opcji w terminalach wideotekstowych i emulatorach terminali . Niektóre sekwencje bytes , w większości zaczynające się od znaku ucieczki ASCII i znaku nawiasu , są osadzane w tekście. Terminal interpretuje te sekwencje jako polecenia, a nie tekst do wyświetlenia dosłownie.
Sekwencje ANSI zostały wprowadzone w latach 70. XX wieku, aby zastąpić sekwencje specyficzne dla producenta i stały się szeroko rozpowszechnione na rynku sprzętu komputerowego na początku lat 80. XX wieku. Są one wykorzystywane w programistycznych, naukowych, komercyjnych aplikacjach tekstowych, a także w systemach tablic biuletynowych, aby zapewnić ustandaryzowaną funkcjonalność.
Chociaż sprzętowe terminale tekstowe stają się coraz rzadsze w XXI wieku, znaczenie standardu ANSI utrzymuje się, ponieważ znaczna większość emulatorów terminali i konsol poleceń interpretuje przynajmniej część standardu ANSI.
Historia
Prawie wszyscy producenci terminali wideo dodawali sekwencje specjalne producenta, aby wykonywać takie operacje, jak umieszczanie kursora w dowolnych pozycjach na ekranie. Jednym z przykładów jest terminal VT52 , który pozwalał na umieszczenie kursora w lokalizacji x,y na ekranie poprzez wysłanie ESC
znaku, Y
znaku, a następnie dwóch znaków reprezentujących wartości liczbowe równe lokalizacji x,y plus 32 (w ten sposób zaczynając od znaku spacji ASCII i unikając znaków sterujących). Hazeltine 1500 miały podobną funkcję, wywołany przy użyciu ~
, DC1
po czym X i Y położenia oddzielony przecinkami. Chociaż oba terminale miały identyczną funkcjonalność pod tym względem, do ich wywołania należało zastosować różne sekwencje sterujące.
Ponieważ te sekwencje były różne dla różnych terminali, należało stworzyć rozbudowane biblioteki, takie jak termcap ("możliwości terminala") i narzędzia, takie jak tput, aby programy mogły używać tego samego API do pracy z dowolnym terminalem. Ponadto wiele z tych terminali wymagało wysyłania liczb (takich jak wiersz i kolumna) jako wartości binarne znaków; w przypadku niektórych języków programowania i systemów, które wewnętrznie nie używały ASCII, często trudno było zmienić liczbę na poprawny znak.
Standard ANSI próbował rozwiązać te problemy, tworząc zestaw poleceń, którego wszystkie terminale będą używać i wymagając, aby wszystkie informacje numeryczne były przesyłane jako numery ASCII. Pierwszym standardem z tej serii był ECMA-48, przyjęty w 1976 roku. Był on kontynuacją serii standardów kodowania znaków, z których pierwszym był ECMA-6 z 1965 roku, 7-bitowy standard, z którego wywodzi się ISO 646 . Nazwa „Sekwencja ucieczki ANSI” pochodzi z 1979 roku, kiedy ANSI przyjęło ANSI X3.64. Komitet ANSI X3L2 współpracował z komitetem ECMA TC 1, aby stworzyć prawie identyczne standardy. Te dwa standardy zostały połączone w międzynarodowy standard ISO 6429. W 1994 roku ANSI wycofało swój standard na rzecz standardu międzynarodowego.
Pierwszym popularnym terminalem wideo obsługującym te sekwencje był Digital VT100 , wprowadzony w 1978 roku. Model ten odniósł duży sukces na rynku, co dało początek wielu klonom VT100, z których najwcześniejszym i najbardziej popularnym był znacznie tańszy Zenith Z. -19 w 1979 r. Inne obejmowały Qume QVT-108, Televideo TVI-970, Wyse WY-99GT, a także opcjonalne tryby „VT100” lub „VT103” lub „ANSI” o różnym stopniu kompatybilności z wieloma innymi markami. Popularność tych programów stopniowo doprowadziła do powstania coraz większej liczby programów (zwłaszcza systemów tablic biuletynów i innych usług online ), zakładając, że sekwencje specjalne działają, co doprowadziło do powstania prawie wszystkich nowych terminali i obsługujących je programów emulujących.
W 1981 r. ANSI X3.64 został przyjęty do użytku w rządzie USA przez publikację FIPS 86. Później rząd USA przestał powielać standardy branżowe, więc FIPS pub. 86 został wycofany.
ECMA-48 była kilkakrotnie aktualizowana i obecnie znajduje się w jej piątej edycji, począwszy od 1991 r. Została również przyjęta przez ISO i IEC jako norma ISO/IEC 6429 . Wersja została przyjęta jako japoński standard przemysłowy , jako JIS X 0211 .
Powiązane normy obejmują ITU T.61 , z teletex standard, oraz ISO / IEC 8613 , The Otwórz dokument Architecture standardu (głównie ISO / IEC 8613-6 lub ITU T.416). Te dwa systemy dzielą wiele kodów ucieczki z systemem ANSI, z rozszerzeniami, które niekoniecznie mają znaczenie dla terminali komputerowych. Oba systemy szybko wyszły z użycia, ale ECMA-48 oznacza używane w nich rozszerzenia jako zastrzeżone.
Obsługa platformy
Systemy uniksopodobne
Chociaż biblioteki w stylu termcap / terminfo zostały opracowane głównie dla Uniksa i dla niego, w połowie lat 80. programy działające na systemach operacyjnych podobnych do Uniksa prawie zawsze mogły zakładać, że używają terminala lub emulatora, który obsługuje sekwencje ANSI; doprowadziło to do powszechnego wykorzystania ANSI przez programy działające na tych platformach. Na przykład wiele gier i skryptów powłoki oraz narzędzi, takich jak wykazy katalogów z kolorami, bezpośrednio zapisuje sekwencje ANSI i dlatego nie można ich używać na terminalu, który ich nie interpretuje. Wiele programów, w tym edytory tekstu, takie jak vi i GNU Emacs , używa termcap lub terminfo lub używa bibliotek, takich jak curses, które używają termcap lub terminfo, a zatem teoretycznie obsługują terminale inne niż ANSI, ale obecnie jest to tak rzadko testowane, że są mało prawdopodobne, aby działał z tymi terminalami.
Emulatory terminali do komunikacji z programami lokalnymi, jak i zdalnymi maszynami oraz konsola systemu tekstowego prawie zawsze obsługują kody escape ANSI. Obejmuje to emulatory terminali, takie jak xterm , rxvt , GNOME Terminal i Konsole w systemach z systemami okien opartymi na X11 lub Wayland oraz Terminal.app i emulatory terminali innych firm, takie jak iTerm2 w systemie macOS .
DOS, OS/2 i Windows
MS-DOS 1.x nie wspierał ANSI ani żadnych innych sekwencji ucieczki. Tylko kilka znaków kontrolnych ( BEL , CR , LF , BS ) zostało zinterpretowanych przez bazowy BIOS, co czyni prawie niemożliwym wykonanie jakiejkolwiek aplikacji pełnoekranowej. Wszelkie efekty wyświetlania musiały być wykonywane za pomocą wywołań BIOS-u, które notorycznie były powolne, lub bezpośrednio manipulując sprzętem IBM PC.
DOS 2.0 wprowadził możliwość dodania sterownika urządzenia dla sekwencji ucieczki ANSI – de facto standardem jest ANSI.SYS , ale używane są również inne, takie jak ANSI.COM , NANSI.SYS i ANSIPLUS.EXE (są one znacznie szybsze, ponieważ ominąć BIOS). Powolność i fakt, że nie był domyślnie instalowany sprawił, że oprogramowanie rzadko z tego korzysta; zamiast tego aplikacje nadal bezpośrednio manipulowały sprzętem w celu uzyskania potrzebnego wyświetlania tekstu. ANSI.SYS i podobne sterowniki nadal działały w Windows 9x aż do Windows ME oraz w systemach wywodzących się z NT dla 16-bitowych starszych programów działających pod NTVDM .
Wiele klonów DOS było w stanie zinterpretować sekwencje i nie wymagało załadowania oddzielnego sterownika ANSI. PTS-DOS oraz Concurrent DOS , Multiuser DOS i REAL/32 mają wbudowaną obsługę (plus szereg rozszerzeń). OS/2 miał komendę ANSI, która włączała sekwencje.
Konsola systemu Windows nie obsługują sekwencje ANSI, ani nie zapewniają żadnej metody Microsoft w celu umożliwienia im. Niektóre wymiany lub uzupełnienia do okna konsoli, takie jak JP Software TCC (dawniej 4nt), Michael J. Mefford na ANSI.COM Jason Hooda ANSICON i Maximus5 za ConEmu interpretować sekwencje ANSI wydrukowane przez programy. Pakiet Pythona wewnętrznie interpretował sekwencje specjalne ANSI w drukowanym tekście, tłumacząc je na wywołania służące do manipulowania kolorem i pozycją kursora, aby ułatwić przenoszenie kodu Pythona za pomocą ANSI do systemu Windows. Cygwin wykonuje podobną translację do wszystkich danych wyjściowych zapisanych na konsolę przy użyciu deskryptorów plików Cygwin, filtrowanie odbywa się za pomocą funkcji wyjściowych cygwin1.dll , aby umożliwić przenoszenie kodu POSIX C do systemu Windows.
W 2016 roku Microsoft wydał aktualizację Windows 10 w wersji 1511, która nieoczekiwanie zaimplementowała obsługę sekwencji ucieczki ANSI, ponad dwie dekady po debiucie Windows NT. Zostało to zrobione wraz z podsystemem Windows dla systemu Linux , umożliwiając oprogramowaniu opartemu na terminalach uniksowemu korzystanie z sekwencji w konsoli Windows. Niestety domyślnie jest to wyłączone, ale program Windows PowerShell 5.1 go włączył. PowerShell 6 umożliwił osadzenie niezbędnego znaku ESC w ciągu z `e
.
Windows Terminal , wprowadzony w 2019 roku, domyślnie obsługuje sekwencje, a Microsoft zamierza zastąpić konsolę Windows terminalem Windows.
Atari ST
Atari ST użyto systemu polecenia adaptacją vt52 niektórych rozszerzeń do głębi kolorów, zamiast wspierać kodu ucieczki ANSI.
AmigaOS
AmigaOS nie tylko interpretuje sekwencje kodów ANSI dla tekstu wyprowadzanego na ekran, ale także sterownik drukarki AmigaOS interpretuje je (z rozszerzeniami zastrzeżonymi dla AmigaOS) i tłumaczy je na kody wymagane dla konkretnej drukarki, która jest aktualnie podłączona.
Efekt | |
---|---|
ESC [ nu | Ustawia maksymalną długość linii w oknie na n. |
ESC [ nt | Ustawia maksymalną liczbę wierszy w oknie na n. |
ESC [ nx | Rozpoczyna tekst w pikselach od lewej krawędzi okna. |
ESC [ ny | Rozpoczyna tekst o n pikselach od górnej krawędzi okna. |
VMS / OpenVMS
VMS został zaprojektowany do interaktywnego zarządzania przy użyciu tekstowych terminali wideo firmy Digital, takich jak wspomniany wcześniej VT100 ; później z graficznymi emulatorami terminali, takimi jak Terminal VWS, DECTerm i xterm.
Opis
Postacie kontrolne
Chociaż technicznie nie jest to część standardu, prawie wszyscy użytkownicy przyjmują pewne funkcje niektórych znaków jednobajtowych. Służy do skracania ilości przesyłanych danych lub wykonywania niektórych funkcji niedostępnych w sekwencjach specjalnych:
^ | C0 | Skrót | Nazwa | Efekt |
---|---|---|---|---|
^G | 7 | BEL | dzwon | Wydaje słyszalny dźwięk. |
^H | 8 | BS | Backspace | Przesuwa kursor w lewo (ale może "zawinąć" do tyłu, jeśli kursor znajduje się na początku linii). |
^I | 9 | HT | Patka | Przesuwa kursor w prawo do następnej wielokrotności 8. |
^J | 0x0A | LF | Podawanie linii | Przechodzi do następnej linii, przewija wyświetlacz w górę, jeśli znajduje się na dole ekranu. Zwykle nie porusza się w poziomie, chociaż programy nie powinny na tym polegać. |
^L | 0x0C | FF | Kanał formularza | Przenieś drukarkę na początek następnej strony. Zwykle nie porusza się w poziomie, chociaż programy nie powinny na tym polegać. Wpływ na terminale wideo jest różny. |
^M | 0x0D | CR | Zwrot karetki | Przesuwa kursor do kolumny zero. |
^[ | 0x1B | WYJŚCIE | Ucieczka | Rozpoczyna wszystkie sekwencje ucieczki |
Sekwencje ucieczki różnią się długością. Ogólny format sekwencji ucieczki zgodnej z ANSI jest zdefiniowany przez ANSI X3.41 (odpowiednik ECMA-35 lub ISO/IEC 2022). Sekwencje specjalne składają się tylko z bajtów z zakresu 0x20—0x7F (wszystkie niekontrolujące znaki ASCII) i mogą być analizowane bez patrzenia w przyszłość. Zachowanie, gdy znak kontrolny, bajt z ustawionym starszym bitem lub bajt, który nie jest częścią żadnej prawidłowej sekwencji, zostanie napotkany przed niezdefiniowaniem końca.
Sekwencje ucieczki Fe
Jeśli ESC
po nim następuje bajt z zakresu od 0x40 do 0x5F, jest to ten typ. Delegowane do odpowiedniego
standardu kodu kontrolnego C1 . Odpowiednio, wszystkie sekwencje specjalne odpowiadające kodom kontrolnym C1 z ANSI X3.64 / ECMA-48 są zgodne z tym formatem.
Norma mówi, że w środowiskach 8-bitowych funkcje sterujące odpowiadające Fe
sekwencjom specjalnym typu (te ze zbioru kodów sterujących C1 ) mogą być reprezentowane jako pojedyncze bajty z zakresu 0x80–0x9F. Jednak na nowoczesnych urządzeniach te kody są często używane do innych celów, takich jak części UTF-8 lub znaki CP-1252 , więc zwykle używana jest tylko sekwencja 2-bajtowa. W przypadku UTF-8 kod sterujący C1 może być zakodowany jako dwa bajty (np. 0xC2,0x8E dla U+008E ), ale w ten sposób nie zostaje zaoszczędzone miejsce.
C1 | Skrót | Nazwa | Efekt | |
---|---|---|---|---|
ESC N | 0x8E | SS2 | Pojedyncza zmiana druga | Wybierz pojedynczy znak z jednego z alternatywnych zestawów znaków . SS2 wybiera zestaw znaków G2, a SS3 wybiera zestaw znaków G3. W środowisku 7-bitowym następuje jeden lub więcej bajtów GL (0x20–0x7F) określający znak z tego zestawu. W środowisku 8-bitowym mogą to być zamiast tego bajty GR (0xA0–0xFF). |
ESC O | 0x8F | SS3 | Pojedyncza zmiana trzecia | |
ESC P | 0x90 | DCS | Ciąg kontroli urządzenia | Wypowiedzony przez ST. Zastosowania tej sekwencji przez Xterm obejmują definiowanie kluczy zdefiniowanych przez użytkownika oraz żądanie lub ustawienie danych Termcap/Terminfo. |
WYJŚCIE [ | 0x9B | CSI | Wprowadzający sekwencje kontrolne | Rozpoczyna większość użytecznych sekwencji, zakończonych bajtem z zakresu od 0x40 do 0x7E. |
WYJŚCIE \ | 0x9C | NS | Terminator ciągów | Kończy ciągi w innych kontrolkach. |
WYJŚCIE ] | 0x9D | OSC | Polecenie systemu operacyjnego | Rozpoczyna ciąg kontrolny używany przez system operacyjny, zakończony przez ST. |
ESC X | 0x98 | SOS | Początek struny | Pobiera argument ciągu tekstu, zakończony przez ST. Zastosowania tych sekwencji kontrolnych ciągu są zdefiniowane przez aplikację lub dziedzinę prywatności. Te funkcje są rzadko implementowane, a argumenty są ignorowane przez xterm. Niektórzy klienci Kermit umożliwiają serwerowi automatyczne wykonywanie poleceń Kermit na kliencie przez osadzenie ich w sekwencjach APC; jest to potencjalne zagrożenie bezpieczeństwa, jeśli serwer nie jest zaufany. |
ESC ^ | 0x9E | PO POŁUDNIU | Wiadomość dotycząca prywatności | |
WYJŚCIE _ | 0x9F | APC | Polecenie programu aplikacyjnego |
Sekwencje CSI (Control Sequence Introducer)
W przypadku poleceń Control Sequence Introducer lub CSI ESC [
następuje dowolna liczba (w tym żaden) „bajtów parametrów” z zakresu 0x30–0x3F (ASCII 0–9:;<=>?
), a następnie dowolna liczba „bajtów pośrednich” z zakresu 0x20–0x2F (spacja ASCII i !"#$%&'()*+,-./
), a następnie o jeden „końcowy bajt” z zakresu 0x40–0x7E (ASCII @A–Z[\]^_`a–z{|}~
).
Wszystkie popularne sekwencje po prostu używają parametrów jako serii liczb oddzielonych średnikami, takich jak 1;2;3
. Brakujące liczby są traktowane jako 0
( 1;;3
działa tak, jak środkowa liczba to 0
, a żaden parametr nie ESC[m
działa jak 0
kod resetowania). Niektóre sekwencje (takie jak CUU) traktują 0
jako 1
, aby brakujące parametry były przydatne.
Podzbiór ustaleń został uznany za „prywatny”, aby producenci terminali mogli wstawiać własne sekwencje bez sprzeczności ze standardem. Sekwencje zawierające bajty parametrów <=>?
lub bajty końcowe 0x70–0x7E ( p–z{|}~
) są prywatne.
Zachowanie terminala jest niezdefiniowane w przypadku, gdy sekwencja CSI zawiera dowolny znak spoza zakresu 0x20–0x7E. Te niedozwolone znaki to znaki sterujące C0 (zakres 0–0x1F), DEL (0x7F) lub bajty z ustawionym starszym bitem. Możliwe odpowiedzi to zignorowanie bajtu, przetworzenie go natychmiast, a ponadto kontynuowanie sekwencji CSI, natychmiastowe przerwanie jej lub zignorowanie reszty.
Skrót | Nazwa | Efekt | |
---|---|---|---|
CSI n A | CUU | Kursor w górę | Przesuwa kursor o n (domyślnie 1 ) komórek w określonym kierunku. Jeśli kursor znajduje się już na krawędzi ekranu, nie ma to żadnego efektu.
|
CSI n B | POKARM | Kursor w dół | |
CSI n C | CUF | Kursor do przodu | |
CSI n D | MŁODE | Kursor Wstecz | |
CSI n E | CNL | Kursor Następna linia | Przesuwa kursor na początek wiersza n (domyślnie 1 ) wierszy w dół. (nie ANSI.SYS )
|
CSI n F | CPL | Kursor Poprzednia linia | Przenosi kursor na początek wiersza n (domyślnie 1 ) wierszy w górę. (nie ANSI.SYS )
|
CSI n G | CHA | Kursor w poziomie bezwzględnym | Przenosi kursor do kolumny n (domyślnie 1 ). (nie ANSI.SYS )
|
CSI n ; m H | FILIŻANKA | Pozycja kursora | Przenosi kursor do wiersza n , kolumny m . Wartości są oparte na 1 i domyślnie 1 (lewy górny róg), jeśli zostały pominięte. Sekwencja taka jak CSI ;5H jest synonimem CSI 1;5H a także CSI 17;H jest taka sama jak CSI 17H iCSI 17;1H
|
CSI n J | ED | Wymaż na wyświetlaczu | Czyści część ekranu. Jeśli n jest 0 (lub brakuje), usuń kursor od kursora do końca ekranu. Jeśli n to 1 , usuń kursor od kursora do początku ekranu. Jeśli n to 2 , wyczyść cały ekran (i przesuń kursor w lewy górny róg na ANSI.SYS DOS ). Jeśli n jest 3 , wyczyść cały ekran i usuń wszystkie wiersze zapisane w buforze przewijania (ta funkcja została dodana do xterm i jest obsługiwana przez inne aplikacje terminalowe).
|
CSI n K | EL | Wymaż w linii | Wymazuje część linii. Jeśli n jest 0 (lub brakuje), wyczyść od kursora do końca linii. Jeśli n to 1 , usuń kursor od kursora do początku wiersza. Jeśli n to 2 , wyczyść całą linię. Pozycja kursora się nie zmienia.
|
CSI n S | SU | Przewiń do góry | Przewiń całą stronę w górę o n (domyślnie 1 ) wierszy. Nowe linie są dodawane na dole. (nie ANSI.SYS )
|
CSI n T | SD | Przewiń w dół | Przewiń całą stronę w dół o n (domyślnie 1 ) wierszy. Nowe linie są dodawane u góry. (nie ANSI.SYS )
|
CSI n ; m f | HVP | Pozycja pozioma pionowa | Tak samo jak CUP, ale liczy się jako funkcja formatowania efektora (jak CR lub LF ), a nie funkcja edytora (jak CUD lub CNL). Może to prowadzić do różnych sposobów obsługi w niektórych trybach terminala. |
CSI n m | SGR | Wybierz wersję graficzną | Ustawia kolory i styl znaków po tym kodzie |
CSI 5i | Port AUX włączony | Włącz port szeregowy aux zwykle dla lokalnej drukarki szeregowej | |
CSI 4i | Port AUX wyłączony | Wyłącz port szeregowy aux zwykle dla lokalnej drukarki szeregowej
|
|
CSI 6n | DSR | Raport o stanie urządzenia | Podaje pozycję kursora (CPR) przez przesłanie ESC[n;mR , gdzie n to wiersz, a m to kolumna.)
|
Skrót | Nazwa | Efekt | |
---|---|---|---|
CSI | SCP, SCOSC | Zapisz aktualną pozycję kursora | Zapisuje pozycję/stan kursora w trybie konsoli SCO. W trybie podziału ekranu w pionie, zamiast tego służy do ustawiania (jako ) lub resetowania lewego i prawego marginesu.
CSI n ; n s |
CSI u | RCP, SCORC | Przywróć zapisaną pozycję kursora | Przywraca pozycję/stan kursora w trybie konsoli SCO. |
CSI ? 25 godzin | DECTEM | Pokazuje kursor z VT220 . | |
CSI ? 25 l | DECTEM | Ukrywa kursor. | |
CSI ? 1049 godz | Włącz alternatywny bufor ekranu, z xterm | ||
CSI ? 1049 l | Wyłącz alternatywny bufor ekranu z xterm | ||
CSI ? 2004 godz | Włącz tryb wklejania w nawiasach. Tekst wklejony do terminala będzie otoczony przez ESC [200~ i ESC [201~ , a znaki w nim zawarte nie powinny być traktowane jako polecenia (na przykład w Vimie). Od xterm
|
||
CSI ? 2004 l | Wyłącz tryb wklejania w nawiasach. |
Parametry SGR (Wybierz grafikę)
Wybierz opcję Graphic Rendition (SGR) ustawia atrybuty wyświetlania. Kilka atrybutów można ustawić w tej samej kolejności, oddzielonych średnikami. Każdy atrybut wyświetlania pozostaje w mocy, dopóki kolejne wystąpienie SGR nie zresetuje go. Jeśli nie podano kodów, CSI m
traktowane jest jako CSI 0 m
(reset / normal).
Nazwa | Notatka | |
---|---|---|
0 | Zresetuj lub normalny | Wszystkie atrybuty wyłączone |
1 | Pogrubienie lub zwiększona intensywność | Podobnie jak w przypadku bladości, zmiana koloru jest wynalazkiem PC (SCO/ CGA ). |
2 | Słabe, zmniejszona intensywność lub słaba | Może być zaimplementowana jako lekka czcionka, np. pogrubiona. |
3 | italski | Nie jest powszechnie obsługiwany. Czasami traktowane jako odwrotne lub migające. |
4 | Podkreślać | Rozszerzenia stylu istnieją dla Kitty, VTE, mintty i iTerm2. |
5 | Powolne miganie | Mniej niż 150 na minutę |
6 | Szybkie miganie | MS-DOS ANSI.SYS, 150+ na minutę; nie jest szeroko obsługiwany |
7 | Odwróć wideo lub odwróć | Zamiana kolorów pierwszego planu i tła; niespójna emulacja |
8 | Ukryj lub ukryj | Nie jest powszechnie obsługiwany. |
9 | Przekreślonego , albo strajk | Znaki czytelne, ale oznaczone jak do usunięcia. |
10 | Czcionka podstawowa (domyślna) | |
11-19 | Alternatywna czcionka | Wybierz czcionkę alternatywną n − 10 |
20 | Fraktur (gotyk) | Rzadko obsługiwane |
21 | Podwójnie podkreślone; lub: nie pogrubiony | Zamiast podwójnie podkreślony za ECMA-48, ale wyłącza pogrubienie intensywność na kilku terminalach, w tym w jądrze Linuksa „s konsoli przed wersją 4.17. |
22 | Normalna intensywność | Ani odważny, ani słaby; zmiany koloru, gdy intensywność jest zaimplementowana jako taka. |
23 | Ani kursywa, ani czarna litera | |
24 | Nie podkreślono | Ani pojedynczo, ani podwójnie podkreślone |
25 | Nie miga | |
26 | Rozstaw proporcjonalny | ITU T.61 i T.416, nieznane do stosowania na terminalach |
27 | Nie odwrócona | |
28 | Ujawnić | Nie ukryty |
29 | Nie przekreślone | |
30–37 | Ustaw kolor pierwszego planu | |
38 | Ustaw kolor pierwszego planu |
Kolejne argumenty to 5;n lub2;r;g;b
|
39 | Domyślny kolor pierwszego planu | Wdrożenie zdefiniowane (zgodnie ze standardem) |
40–47 | Ustaw kolor tła | |
48 | Ustaw kolor tła |
Kolejne argumenty to 5;n lub2;r;g;b
|
49 | Domyślny kolor tła | Wdrożenie zdefiniowane (zgodnie ze standardem) |
50 | Wyłącz proporcjonalne odstępy | T.61 i T.416 |
51 | Oprawiony | Zaimplementowane jako „ selektor odmian emoji ” w mintty. |
52 | Otoczony | |
53 | Przekreślony | |
54 | Ani oprawione, ani otoczone | |
55 | Nie przekreślone | |
58 | Ustaw kolor podkreślenia | Nie w standardzie; zaimplementowane w Kitty, VTE, mintty i iTerm2. Kolejne argumenty to 5;n lub2;r;g;b .
|
59 | Domyślny kolor podkreślenia | Nie w standardzie; zaimplementowane w Kitty, VTE, mintty i iTerm2. |
60 | Podkreślenie ideogramu lub linia po prawej stronie | Rzadko obsługiwane |
61 | Ideogram podwójne podkreślenie lub podwójna linia po prawej stronie | |
62 | Nadkreślenie ideogramu lub linia po lewej stronie | |
63 | Ideogram podwójna linia nad linią lub podwójna linia po lewej stronie | |
64 | Ideogramowe oznaczanie naprężeń | |
65 | Brak atrybutów ideogramu | Zresetuj efekty wszystkich 60 –64
|
73 | Napisany u góry | Zaimplementowane tylko w mintty |
74 | Indeks | |
75 | Ani indeks górny, ani dolny | |
90–97 | Ustaw jasny kolor pierwszego planu | Nie w standardzie; pierwotnie zaimplementowany przez aixterm |
100–107 | Ustaw jasny kolor tła |
Zabarwienie
3-bitowe i 4-bitowe
Oryginalna specyfikacja miała tylko 8 kolorów i tylko nadała im nazwy. Parametry SGR 30–37 wybierały kolor pierwszego planu, a 40–47 – tło. Wiele terminali zaimplementowało „pogrubienie” (kod SGR 1) jako jaśniejszy kolor, a nie inną czcionkę, zapewniając w ten sposób 8 dodatkowych kolorów pierwszego planu. Zwykle nie można było ich uzyskać jako kolorów tła, chociaż czasami odwrócone wideo (kod SGR 7) na to pozwala. Przykłady: aby uzyskać czarne litery na białym tle użyj ESC[30;47m
, aby uzyskać czerwone użyj ESC[31m
, aby uzyskać jasnoczerwony użyj ESC[1;31m
. Aby zresetować kolory do ich wartości domyślnych, użyj ESC[39;49m
(nieobsługiwane na niektórych terminalach) lub zresetuj wszystkie atrybuty za pomocą ESC[0m
. Późniejsze terminale dodały możliwość bezpośredniego określenia „jasnych” kolorów za pomocą 90–97 i 100–107.
Kiedy sprzęt zaczął używać 8-bitowych przetworników cyfrowo -analogowych (DAC), kilka programów przypisywało tym nazwom 24-bitowe numery kolorów. Poniższa tabela pokazuje wartości domyślne wysyłane do przetwornika cyfrowo-analogowego dla niektórych popularnych urządzeń i oprogramowania; w większości przypadków są konfigurowalne.
FG | BG | Nazwa | VGA |
Konsola Windows XP |
Windows PowerShell |
Kod programu Visual Studio |
Konsola Windows 10 |
Terminal.aplikacja | Kit | mIRC | xterm | Ubuntu | Terminal Zaćmienia |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
30 | 40 | Czarny | 0, 0, 0 | 12, 12, 12 | 0, 0, 0 | 1, 1, 1 | 0, 0, 0 | ||||||
31 | 41 | czerwony | 170, 0, 0 | 128, 0, 0 | 205, 49, 49 | 197, 15, 31 | 194, 54, 33 | 187, 0, 0 | 127, 0, 0 | 205, 0, 0 | 222, 56, 43 | 205, 0, 0 | |
32 | 42 | Zielony | 0, 170, 0 | 0, 128, 0 | 13, 188, 121 | 19, 161, 14 | 37, 188, 36 | 0, 187, 0 | 0, 147, 0 | 0, 205, 0 | 57, 181, 74 | 0, 205, 0 | |
33 | 43 | Żółty | 170, 85, 0 | 128, 128, 0 | 238, 237, 240 | 229, 229, 16 | 193, 156, 0 | 173, 173, 39 | 187, 187, 0 | 252, 127, 0 | 205, 205, 0 | 255, 199, 6 | 205, 205, 0 |
34 | 44 | Niebieski | 0, 0, 170 | 0, 0, 128 | 36, 114, 200 | 0, 55, 218 | 73, 46, 225 | 0, 0, 187 | 0, 0, 127 | 0, 0, 238 | 0, 111, 184 | 0, 0, 238 | |
35 | 45 | Magenta | 170, 0, 170 | 128, 0, 128 | 1, 36, 86 | 188, 63, 188 | 136, 23, 152 | 211, 56, 211 | 187, 0, 187 | 156, 0, 156 | 205, 0, 205 | 118, 38, 113 | 205, 0, 205 |
36 | 46 | Cyjan | 0, 170, 170 | 0, 128, 128 | 17, 168, 205 | 58, 150, 221 | 51, 187, 200 | 0, 187, 187 | 0, 147, 147 | 0, 205, 205 | 44, 181, 233 | 205, 0, 205 | |
37 | 47 | biały | 170, 170, 170 | 192, 192, 192 | 229, 229, 229 | 204, 204, 204 | 203, 204, 205 | 187, 187, 187 | 210, 210, 210 | 229, 229, 229 | 204, 204, 204 | 229, 229, 229 | |
90 | 100 | Jasny Czarny (Szary) | 85, 85, 85 | 128, 128, 128 | 102, 102, 102 | 118, 118, 118 | 129, 131, 131 | 85, 85, 85 | 127, 127, 127 | 127, 127, 127 | 128, 128, 128 | 0, 0, 0 | |
91 | 101 | Jasny czerwony | 255, 85, 85 | 255, 0, 0 | 241, 76, 76 | 231, 72, 86 | 252, 57, 31 | 255, 85, 85 | 255, 0, 0 | 255, 0, 0 | 255, 0, 0 | 255, 0, 0 | |
92 | 102 | Jasno zielony | 85, 255, 85 | 0, 255, 0 | 35, 209, 139 | 22, 198, 12 | 49, 231, 34 | 85, 255, 85 | 0, 252, 0 | 0, 255, 0 | 0, 255, 0 | 0, 255, 0 | |
93 | 103 | Jasny żółty | 255, 255, 85 | 255, 255, 0 | 245, 245, 67 | 249, 241, 165 | 234, 236, 35 | 255, 255, 85 | 255, 255, 0 | 255, 255, 0 | 255, 255, 0 | 255, 255, 0 | |
94 | 104 | Jasnoniebieski | 85, 85, 255 | 0, 0, 255 | 59, 142, 234 | 59, 120, 255 | 88, 51, 255 | 85, 85, 255 | 0, 0, 252 | 92, 92, 255 | 0, 0, 255 | 92, 92, 255 | |
95 | 105 | Jasny Magenta | 255, 85, 255 | 255, 0, 255 | 214, 112, 214 | 180, 0, 158 | 249, 53, 248 | 255, 85, 255 | 255, 0, 255 | 255, 0, 255 | 255, 0, 255 | 255, 0, 255 | |
96 | 106 | Jasny Cyjan | 85, 255, 255 | 0, 255, 255 | 41, 184, 219 | 97, 214, 214 | 20, 240, 240 | 85, 255, 255 | 0, 255, 255 | 0, 255, 255 | 0, 255, 255 | 0, 255, 255 | |
97 | 107 | Jasny biały | 255, 255, 255 | 255, 255, 255 | 229, 229, 229 | 242, 242, 242 | 233, 235, 235 | 255, 255, 255 | 255, 255, 255 | 255, 255, 255 | 255, 255, 255 | 255, 255, 255 |
8 bitowy
Ponieważ 256-kolorowe tabele wyszukiwania stały się powszechne na kartach graficznych, dodano sekwencje specjalne, aby wybrać z predefiniowanego zestawu 256 kolorów:
ESC[38;5;⟨n⟩m Select foreground color ESC[48;5;⟨n⟩m Select background color 0- 7: standard colors (as in ESC [ 30–37 m) 8- 15: high intensity colors (as in ESC [ 90–97 m) 16-231: 6 × 6 × 6 cube (216 colors): 16 + 36 × r + 6 × g + b (0 ≤ r, g, b ≤ 5) 232-255: grayscale from black to white in 24 steps
Technologia informacyjna ITU T.416 — architektura otwartego dokumentu (ODA) i format wymiany: architektura treści znakowych używa zamiast tego znaku „:” jako znaków separatora:
ESC[38;5;⟨n⟩m Select foreground color where n is a number from the table below ESC[48;5;⟨n⟩m Select background color
tryb 256-kolorowy — pierwszy plan: ESC[38;5;#m tło: ESC[48;5;#m | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Standardowe kolory | Kolory o wysokiej intensywności | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
216 kolorów | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | ||||||||||||||||||||||||
52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | ||||||||||||||||||||||||
88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | ||||||||||||||||||||||||
124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | ||||||||||||||||||||||||
160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | ||||||||||||||||||||||||
196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | ||||||||||||||||||||||||
Kolory w skali szarości | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Istnieje również podobne, ale niezgodne kodowanie 88-kolorowe przy użyciu tej samej sekwencji ucieczki, widocznej w rxvt
i xterm-88color
. Niewiele wiadomo o schemacie poza kodami kolorów. Wykorzystuje kolorową kostkę 4×4×4.
24-bitowy
Ponieważ karty graficzne „true color” z 16 do 24 bitami koloru stały się powszechne, aplikacje zaczęły obsługiwać kolory 24-bitowe. Emulatory terminali obsługujące ustawianie 24-bitowych kolorów pierwszego planu i tła za pomocą sekwencji specjalnych to Xterm, Konsole KDE i iTerm, a także wszystkie terminale oparte na libvte, w tym Terminal GNOME .
ESC[ 38;2;⟨r⟩;⟨g⟩;⟨b⟩ m Select RGB foreground color ESC[ 48;2;⟨r⟩;⟨g⟩;⟨b⟩ m Select RGB background color
Technologia informacyjna ITU T.416 - Architektura Otwartego Dokumentu (ODA) i format wymiany: Architektura zawartości znaków, która została przyjęta jako międzynarodowa norma ISO/IEC 8613-6, daje alternatywną wersję, która wydaje się być mniej obsługiwana. Parametry po '2', czyli nawet r,g,b są opcjonalne. Zauważ, że nie jest to tylko powyższa sekwencja ze średnikiem zastąpionym dwukropkiem, istnieje wiodący "identyfikator przestrzeni kolorów" (ten fakt został pominięty przez wiele emulatorów terminali, to pominięcie wydaje się pochodzić z Konsoli KDE). Definicja identyfikatora przestrzeni kolorów nie jest zawarta w tym dokumencie, więc może być pusta, aby reprezentować nieokreśloną wartość domyślną. Oprócz wartości „2” określającej format czerwono-zielono-niebieski (oraz „5” powyżej dla indeksowanego koloru 0-255), istnieją alternatywy „0” dla zdefiniowanej implementacji i „1” dla przezroczystego — żadne jakie mają dalsze parametry; „3” określa kolory przy użyciu schematu cyjan-magenta-żółty, a „4” dla schematu cyjan-magenta-żółto-czarny, przy czym ten ostatni używa pozycji oznaczonej jako „nieużywane” dla składnika czarnego:
ESC[ 38:2:⟨Color-Space-ID⟩:⟨r⟩:⟨g⟩:⟨b⟩:⟨unused⟩:⟨CS tolerance⟩:⟨Color-Space associated with tolerance: 0 for "CIELUV"; 1 for "CIELAB"⟩ m Select RGB foreground color ESC[ 48:2:⟨Color-Space-ID⟩:⟨r⟩:⟨g⟩:⟨b⟩:⟨unused⟩:⟨CS tolerance⟩:⟨Color-Space associated with tolerance: 0 for "CIELUV"; 1 for "CIELAB"⟩ m Select RGB background color
Sekwencje OSC (Operating System Command)
W większości zostały one zdefiniowane przez Xterm. Ze względów historycznych xterm może zakończyć polecenie zarówno , BEL
jak i ST
.
Xterm umożliwia ustawienie tytułu okna przez ESC ]0;this is the window title BEL
.
Rozszerzeniem innym niż xterm jest hiperłącze ESC ]8;;link ST
z 2017 roku używane przez VTE, iTerm2 i mintty.
Konsola Linuksa używa ESC ] P n rr gg bb
do zmiany palety, która po zakodowaniu w aplikacji może zawiesić inne terminale. Jednak dołączanie ST
zostanie zignorowane przez Linuksa i utworzy odpowiednią, ignorowaną sekwencję dla innych terminali.
Fs Sekwencje ucieczki
Jeśli ESC
po nim następuje bajt z zakresu 0x60—0x7E , jest to ten typ. Wykorzystywane do funkcji sterujących indywidualnie rejestrowanych w rejestrze ISO-IR, a co za tym idzie, dostępne nawet w kontekstach, w których używany jest inny zestaw kodów sterujących C1. W szczególności odpowiadają one pojedynczym funkcjom kontrolnym zatwierdzonym przez ISO/IEC JTC 1/SC 2 i standaryzowanym przez ISO lub organ uznany przez ISO. Niektóre z nich są określone w ECMA-35 (ISO 2022 / ANSI X3.41), inne w ECMA-48 (ISO 6429 / ANSI X3.64). ECMA-48 określa je jako „niezależne funkcje kontrolne”.
Skrót | Nazwa | Efekt | |
---|---|---|---|
ESC c | RIS | Zresetuj do stanu początkowego | Wywołuje pełny reset terminala do pierwotnego stanu. Może to obejmować (jeśli ma to zastosowanie): zresetowanie odwzorowania grafiki, wyczyszczenie zatrzymań tabulacji, przywrócenie domyślnej czcionki i inne. |
Sekwencje ucieczki Fp
Jeśli ESC
po nim następuje bajt z zakresu 0x30—0x3F , jest to ten typ. Wyróżnij się funkcjami kontrolnymi do użytku prywatnego.
Skrót | Nazwa | Efekt | |
---|---|---|---|
ESC 7 | DECSC | DEC Zapisz kursor | Zapisuje pozycję kursora, kodowanie stanu przesunięcia i atrybuty formatowania. |
ESC 8 | DEKRC | Kursor przywracania DEC | Przywraca pozycję kursora, kodowanie stanu przesunięcia i atrybuty formatowania z poprzedniego DECSC, jeśli takie istnieją, w przeciwnym razie resetuje je wszystkie do wartości domyślnych. |
nF Sekwencje ucieczki
Jeśli ESC
po nim następuje bajt z zakresu 0x20—0x2F
, jest to ten typ. Po którym następuje dowolna liczba dodatkowych bajtów z tego zakresu, a następnie bajt z zakresu 0x30-0x7E . Są one dalej podzielone na podkategorie według czterech młodszych bitów pierwszego bajtu, np. „typ 2F
” dla sekwencji, w których pierwszym bajtem jest 0x22 ; oraz przez to, czy ostatni bajt należy do zakresu użytku prywatnego
0x30—0x3F (np. "typ 2Fp
"), czy nie (np. "typ
2Ft
"). Są one najczęściej używane w mechanizmach przełączania kodu ANSI/ISO, takich jak te używane przez ISO-2022-JP , z wyjątkiem 3F
sekwencji typów
(tych, w których pierwszy bajt pośredni to 0x23
), które są używane do indywidualnych funkcji kontrolnych. 3Ft
Sekwencje typów są zarezerwowane dla dodatkowych zarejestrowanych przez ISO-IR indywidualnych funkcji sterowania, podczas gdy 3Fp
sekwencje typów są dostępne dla funkcji sterowania do użytku prywatnego.
Skrót | Nazwa | Efekt | |
---|---|---|---|
ESC SP F | Zdefiniowane w ECMA-35 (ANSI X3.41 / ISO 2022). Sprawia, że klawisze funkcyjne wysyłają ESC + literę zamiast kodów C1. | ||
ESC SP G | Zdefiniowane w ECMA-35. Sprawia, że klawisze funkcyjne wysyłają kody C1. |
Skrót | Nazwa | Efekt | |
---|---|---|---|
ESC # 3 | DECDHL | DEC Litery o podwójnej wysokości, górna połowa | Sprawia, że bieżąca linia używa znaków dwukrotnie wyższych. Ten kod dotyczy górnej połowy. |
ESC # 4 | DECDHL | DEC Litery o podwójnej wysokości, dolna połowa | Sprawia, że bieżąca linia używa znaków dwukrotnie wyższych. Ten kod dotyczy dolnej połowy. |
ESC # 5 | DECSWL | DEC Linia o pojedynczej szerokości | Sprawia, że bieżący wiersz używa znaków o pojedynczej szerokości, zgodnie z domyślnym zachowaniem. |
ESC # 6 | DECDWL | DEC Linia o podwójnej szerokości | Sprawia, że bieżący wiersz używa znaków o podwójnej szerokości, odrzucając wszystkie znaki z drugiej połowy wiersza. |
Przykłady
CSI 2 J
— Spowoduje to wyczyszczenie ekranu i, na niektórych urządzeniach, umieszczenie kursora w pozycji y,x 1,1 (lewy górny róg).
CSI 32 m
— To sprawia, że tekst jest zielony. Zieleń może być ciemna, matowa, więc możesz chcieć włączyć Bold z sekwencją, CSI 1 m
która sprawi, że będzie jasnozielona, lub w połączeniu jako CSI 32 ; 1 m
. Niektóre implementacje używają stanu Pogrubienie, aby postać była Jasna.
CSI 0 ; 6 8 ; "DIR" ; 13 p
— To ponownie przypisuje klawiszowi F10 do wysłania do bufora klawiatury łańcuchów „DIR” i ENTER, które w wierszu poleceń DOS wyświetlają zawartość bieżącego katalogu. (Tylko MS-DOS ANSI.SYS) To było czasami używane do bomb ANSI . Jest to kod do użytku prywatnego (oznaczony literą p), używający niestandardowego rozszerzenia do włączenia parametru o wartości ciągu. Podążanie za literą normy oznaczałoby, że sekwencja kończy się na literę D.
CSI s
— Zapisuje pozycję kursora. Użycie sekwencji CSI u
przywróci ją do pozycji. Powiedzmy, że aktualna pozycja kursora to 7(y) i 10(x). Sekwencja CSI s
zapisze te dwie liczby. Teraz możesz przejść do innej pozycji kursora, na przykład 20(y) i 3(x), używając sekwencji CSI 20 ; 3 H
lub CSI 20 ; 3 f
. Teraz jeśli użyjesz sekwencji CSI u pozycja kursora powróci do 7(y) i 10(x). Niektóre terminale wymagają sekwencji DEC ESC 7
/, ESC 8
która jest szerzej obsługiwana.
W skryptach powłoki
Kody ucieczki ANSI są często używane w terminalach UNIX i UNIX-podobnych, aby zapewnić podświetlanie składni . Na przykład na kompatybilnych terminalach następująca lista poleceń wyświetla nazwy plików i katalogów według typu.
ls --color
Użytkownicy mogą stosować kody escape w swoich skryptach, włączając je jako część standardowego wyjścia lub standardowego błędu . Na przykład, następujące polecenie GNU sed upiększa wyjście polecenia make , wyświetlając wiersze zawierające słowa zaczynające się od „WARN” w odwróconym wideo i słowa zaczynające się od „ERR” w jasnożółtym kolorze na ciemnoczerwonym tle ( wielkość liter jest ignorowana). Reprezentacje kodów są podświetlone.
make 2>&1 | sed -e 's/.*\bWARN.*/\x1b[7m&\x1b[0m/i' -e 's/.*\bERR.*/\x1b[93;41m&\x1b[0m/i'
Następująca funkcja Bash miga terminalem (naprzemiennie wysyłając kody zwrotne i kody normalnego trybu wideo), dopóki użytkownik nie naciśnie klawisza.
flasher () { while true; do printf \\e[?5h; sleep 0.1; printf \\e[?5l; read -s -n1 -t1 && break; done; }
Może to być użyte do zaalarmowania programisty, gdy długie polecenie zostanie zakończone, na przykład z make ; flasher
.
printf \\033c
Spowoduje to zresetowanie konsoli, podobnie do polecenia reset
w nowoczesnych systemach Linux; jednak powinien działać nawet na starszych systemach Linux i na innych (nie-Linux) wariantach UNIX.
w C
#include <stdio.h>
int main(void)
{
int i, j, n;
for (i = 0; i < 11; i++) {
for (j = 0; j < 10; j++) {
n = 10*i + j;
if (n > 108) break;
printf("\033[%dm %3d\033[m", n, n);
}
printf("\n");
}
return 0;
}
Sekwencje wejściowe terminala
Naciskanie specjalnych klawiszy na klawiaturze, jak również wyprowadzanie wielu sekwencji xterm CSI, DCS lub OSC, często tworzy sekwencję CSI, DCS lub OSC, wysłaną z terminala do komputera tak, jakby użytkownik ją wpisał.
Podczas wpisywania danych wejściowych na terminalu, naciśnięcia klawiszy poza normalnym obszarem klawiatury alfanumerycznej mogą być wysyłane do hosta jako sekwencje ANSI. W przypadku klawiszy, które mają równoważną funkcję wyjściową, takich jak klawisze kursora, często odzwierciedlają one sekwencje wyjściowe. Jednak w przypadku większości naciśnięć klawiszy nie ma równoważnej sekwencji wyjściowej do użycia.
Istnieje kilka schematów kodowania i niestety większość terminali miesza sekwencje z różnych schematów, więc oprogramowanie hosta musi radzić sobie z sekwencjami wejściowymi przy użyciu dowolnego schematu. Aby skomplikować sprawę, same terminale VT mają dwa schematy wejścia, tryb normalny i tryb aplikacji, które mogą być przełączane przez aplikację.
(sekcja robocza)
<char> -> char <esc> <nochar> -> esc <esc> <esc> -> esc <esc> <char> -> Alt-keypress or keycode sequence <esc> '[' <nochar> -> Alt-[ <esc> '[' (<num>) (';'<num>) '~' -> keycode sequence, <num> defaults to 1
Jeśli znakiem końcowym jest '~', pierwsza cyfra musi być obecna i jest numerem kodu, druga cyfra jest opcjonalną wartością modyfikatora. Jeśli znakiem końcowym jest litera, litera jest wartością kodu, a opcjonalna liczba jest wartością modyfikatora.
Wartość modyfikatora domyślnie wynosi 1, a po odjęciu 1 jest mapa bitowa wciskanych klawiszy modyfikujących: Meta-Ctrl-Alt-Shift. Na przykład <esc>[4;2~ to Shift-End, <esc>[20~ to klawisz funkcyjny 9, <esc>[5C to Ctrl-Prawy.
vt sequences: <esc>[1~ - Home <esc>[16~ - <esc>[31~ - F17 <esc>[2~ - Insert <esc>[17~ - F6 <esc>[32~ - F18 <esc>[3~ - Delete <esc>[18~ - F7 <esc>[33~ - F19 <esc>[4~ - End <esc>[19~ - F8 <esc>[34~ - F20 <esc>[5~ - PgUp <esc>[20~ - F9 <esc>[35~ - <esc>[6~ - PgDn <esc>[21~ - F10 <esc>[7~ - Home <esc>[22~ - <esc>[8~ - End <esc>[23~ - F11 <esc>[9~ - <esc>[24~ - F12 <esc>[10~ - F0 <esc>[25~ - F13 <esc>[11~ - F1 <esc>[26~ - F14 <esc>[12~ - F2 <esc>[27~ - <esc>[13~ - F3 <esc>[28~ - F15 <esc>[14~ - F4 <esc>[29~ - F16 <esc>[15~ - F5 <esc>[30~ - xterm sequences: <esc>[A - Up <esc>[K - <esc>[U - <esc>[B - Down <esc>[L - <esc>[V - <esc>[C - Right <esc>[M - <esc>[W - <esc>[D - Left <esc>[N - <esc>[X - <esc>[E - <esc>[O - <esc>[Y - <esc>[F - End <esc>[1P - F1 <esc>[Z - <esc>[G - Keypad 5 <esc>[1Q - F2 <esc>[H - Home <esc>[1R - F3 <esc>[I - <esc>[1S - F4 <esc>[J - <esc>[T -
<esc>[A do <esc>[D są takie same jak sekwencje wyjściowe ANSI. <num> jest zwykle pomijane, jeśli nie zostanie naciśnięty żaden klawisz modyfikujący, ale większość implementacji zawsze emituje <num> dla F1-F4. (sekcja robocza)
Xterm posiada obszerną stronę z dokumentacją dotyczącą różnych schematów sekwencji wprowadzania klawiszy funkcyjnych i myszy z terminali VT DEC i różnych innych terminali, które emuluje. Thomas Dickey z czasem dodał do tego wiele wsparcia; utrzymuje również listę domyślnych kluczy używanych przez inne emulatory terminali dla porównania.
- W konsoli systemu Linux niektóre klawisze funkcyjne generują sekwencje postaci . Sekwencja CSI powinna zakończyć się na .
CSI [ char
[
- Stare wersje Terminatora generują się po naciśnięciu klawiszy F1–F4 z modyfikatorami. Błędne zachowanie zostało skopiowane z Terminala GNOME .
SS3 1; modifiers char
- xterm odpowiada, jeśli zostanie zapytany o pozycję kursora i jeśli klawisz F3 zostanie naciśnięty z modyfikatorami, które kolidują w przypadku wiersza == 1. Można tego uniknąć, używając ? prywatny modyfikator as , który zostanie odzwierciedlony w odpowiedzi jako .
CSI row ; column R
CSI 1 ; modifiers R
CSI ? 6 n
CSI ? row ; column R
- wiele terminali dołącza się
ESC
do każdego znaku, który jest wpisywany z wciśniętym klawiszem alt. Tworzy to niejednoznaczność dla wielkich liter i symboli@[\]^_
, które tworzą kody C1. -
Konsola generuje się, gdy klawisze F1–F4 są wciśnięte z modyfikatorami.
SS3 modifiers char
Zobacz też
- Sztuka ANSI
- Postać kontrolna
- Zaawansowany program do montażu i odtwarzania terminali atrybutów wideo (AVATAR)
- ISO/IEC JTC 1/SC 2
- Kody kontrolne C0 i C1
Uwagi
Bibliografia
Zewnętrzne linki
- Standard ECMA-48, funkcje sterujące dla kodowanych zestawów znaków . ( wydanie 5, czerwiec 1991 ), European Computer Manufacturers Association, Genewa 1991 (opublikowane również przez ISO i IEC jako norma ISO/IEC 6429)
- Dokumenty DEC vt100.net
- "ANSI.SYS -- sekwencje specjalne emulacji terminala ansi" . Zarchiwizowane z oryginału w dniu 6 lutego 2006 . Pobrano 22 lutego 2007 .
- Xterm / Sekwencje ucieczki
- AIXterm / Sekwencje ucieczki
- Zbiór sekwencji ucieczki dla terminali, które są niejasno zgodne z ECMA-48 i przyjaciółmi.
- "Sekwencje ucieczki ANSI" . Zarchiwizowane od oryginału w dniu 25 maja 2011 r.
- Zalecenie ITU-T T.416 (03/93) Technologia informacyjna – Open Document Architecture (ODA) i format wymiany: architektury treści znaków