Kod ucieczki ANSI — ANSI escape code

ANSI X3.64 (ISO 6429)
Htop.png
Wyjście htop monitorującego system , aplikacji ncurses (która wykorzystuje SGR i inne sekwencje sterujące ANSI/ISO).
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 ESCznaku, Yznaku, 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 ~, DC1po 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.

Terminal DEC VT100
Terminal wideo DEC VT100.

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.

Emulator terminala Xterm
Emulator terminala Xterm.

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.

Amiga CLI (powłoka) sekwencje sterujące stylem okna
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:

Popularne postacie kontrolne (nie jest to wyczerpująca lista)
^ 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 ESCpo 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 Fesekwencjom 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.

Niektóre sekwencje specjalne typu Fe (element zestawu C1) ANSI (nie jest to wyczerpująca lista)
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;;3działa tak, jak środkowa liczba to 0, a żaden parametr nie ESC[mdziała jak 0kod resetowania). Niektóre sekwencje (takie jak CUU) traktują 0jako 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.

Niektóre sekwencje kontrolne ANSI (nie jest to wyczerpująca lista)
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 ;5Hjest synonimem CSI 1;5Ha także CSI 17;Hjest taka sama jak CSI 17HiCSI 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.)
Niektóre popularne sekwencje prywatne
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 mtraktowane 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;nlub2;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;nlub2;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;nlub2;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 6064
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
 0   1   2   3   4   5   6   7   8   9  10 11 12 13 14 15
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
232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255

Istnieje również podobne, ale niezgodne kodowanie 88-kolorowe przy użyciu tej samej sekwencji ucieczki, widocznej w rxvti 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 , BELjak 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 STz 2017 roku używane przez VTE, iTerm2 i mintty.

Konsola Linuksa używa ESC ] P n rr gg bbdo zmiany palety, która po zakodowaniu w aplikacji może zawiesić inne terminale. Jednak dołączanie STzostanie zignorowane przez Linuksa i utworzy odpowiednią, ignorowaną sekwencję dla innych terminali.

Fs Sekwencje ucieczki

Jeśli ESCpo 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”.

Niektóre sekwencje specjalne typu Fs (funkcja niezależna) ANSI rozpoznawane przez terminale
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 ESCpo nim następuje bajt z zakresu 0x30—0x3F , jest to ten typ. Wyróżnij się funkcjami kontrolnymi do użytku prywatnego.

Niektóre sekwencje specjalne typu Fp (do użytku prywatnego) rozpoznawane przez VT100 , jego następców i/lub emulatory terminala, takie jak xterm
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 ESCpo 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 3Fsekwencji typów (tych, w których pierwszy bajt pośredni to 0x23), które są używane do indywidualnych funkcji kontrolnych. 3FtSekwencje typów są zarezerwowane dla dodatkowych zarejestrowanych przez ISO-IR indywidualnych funkcji sterowania, podczas gdy 3Fpsekwencje typów są dostępne dla funkcji sterowania do użytku prywatnego.

Niektóre sekwencje specjalne typu 0Ft (ogłoszenie) ANSI rozpoznawane przez terminale (lista nie jest wyczerpująca)
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.
Niektóre sekwencje specjalne typu 3Fp (do użytku prywatnego) rozpoznawane przez VT100 , jego następców i/lub emulatory terminala, takie jak xterm
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 mktó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 uprzywróci ją do pozycji. Powiedzmy, że aktualna pozycja kursora to 7(y) i 10(x). Sekwencja CSI szapisze 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 Hlub 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 8któ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 resetw nowoczesnych systemach Linux; jednak powinien działać nawet na starszych systemach Linux i na innych (nie-Linux) wariantach UNIX.

w C

Wyjście przykładowego programu na Gnome Terminal
#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 RCSI 1 ; modifiers RCSI ? 6 nCSI ? row ; column R
  • wiele terminali dołącza się ESCdo 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ż

Uwagi

Bibliografia

Zewnętrzne linki