ANSI-kontrolltecken ( ANSI escape-kod ) är tecken som är inbäddade i text för att styra format, färg och andra utdataalternativ i en textterminal . Nästan alla terminalemulatorer utformade för att visa textutdata från en fjärrdator, och (med undantag för Microsoft Windows ) för att visa textutdata från lokal programvara, kan tolka åtminstone vissa ANSI-escape-sekvenser.
Nästan alla utvecklare av textterminaler skapade sina egna, inkompatibla med andra versioner av terminaler, kontrollsekvenser som utför eventuella transformationer på terminalens innehåll; till exempel att flytta markören till en godtycklig position på skärmen. Sofistikerade bibliotek som termcap skapades för att tillåta program att använda ett enda API oberoende av textterminalimplementeringen. Dessutom krävde de flesta terminaler att nummer (som rad och kolumn) skulle skickas som binära teckenvärden; för vissa programmeringsspråk och operativsystem som inte har internt stöd för ASCII var det ofta svårt eller omöjligt att mappa rätt tecken till ett nummer.
Den första ANSI-kontrollteckenstandarden var ECMA - 48 , antagen 1976. Det var en fortsättning på en serie kodningsstandarder, varav den första var ECMA-6 från 1961, 7-bitarsstandarden som ASCII härrör från. ECMA-48 har uppdaterats flera gånger, den nuvarande versionen är den femte, 1991. Den har också antagits av ISO och IEC som ISO/IEC 6429-standarden . Namnet " ANSI- flyktsekvens " dök upp 1981 när ANSI antog ECMA-48 som ANSI X3.64- standard (senare återkallad 1997 [1] ).
Den första populära terminalen som stödde dessa sekvenser var VT100 , som introducerades 1978 [2] . Bland de många "klonerna" av VT100 blev den mest prisvärda Zenith Z-19 som släpptes 1979 [3] den tidigaste och mest populära . Deras popularitet ledde gradvis till uppkomsten av ett stort antal programvara (särskilt BBS ) som stöder escape-sekvenser, och detta ledde i sin tur till det faktum att nästan alla nya terminaler och terminalemulatorer stödde dem.
De flesta terminalemulatorer för UNIX-liknande operativsystem (som xterm eller OS X Terminal ) tolkar ANSI-escape-sekvenser. Linux-konsolen (synlig när X Window System inte körs) tolkar dem också. Microsoft Windows -terminalemulatorer utformade för textutmatning från externa källor (serieport, modem eller socket) tolkar dem också. Visst stöd för textutmatning av lokala program på Windows tillhandahålls ofta av alternativa kommandoprocessorer , som Take Command Console (tidigare 4NT) av JP Software , ANSI.COM av Michael J. Mefford , ansicon av Jason Hood .
Många Unix -konsolapplikationer (t.ex. ls , grep , Vim , Emacs ) kan generera dem. Vissa verktyg ( tput ), lågnivå- ( termcap , terminfo ) och högnivåbibliotek ( curses ) matar ut dem.
På IBMs operativsystem OS/2, version 3.0 och senare, inklusive EC, är ANSI-stöd i helskärmsläge och fönsterfönster aktiverat som standard.
MS-DOS 1.0 stödde inte ANSI eller några andra escape-sekvenser. Endast ett fåtal kontrolltecken ( CR , LF , BS ) tolkades, vilket gjorde det omöjligt att skapa några helskärmsapplikationer. Alla visningseffekter kunde endast uppnås genom BIOS- anrop (eller, vanligare, genom direkt manipulation av IBM PC -hårdvaran ).
MS-DOS 2.0 gav möjligheten att installera en drivrutin för att stödja ANSI escape-sekvenser - ANSI.SYS var de facto - standarden , men andra användes (ANSI.COM [4] , NANSI.SYS [5] ). Långsamheten och det faktum att drivrutinen inte var installerad som standard gjorde att de knappt användes; programvaran fortsatte att direkt manipulera hårdvaran för att producera önskade effekter i en textterminal. ANSI.SYS och liknande drivrutiner fortsatte att användas i Windows 98, och även i Windows ME i inbyggt DOS-läge (helskärmstextläge). ANSI.SYS fungerar även på system i Windows NT-familjen i 16-bitarsläge för äldre program som använder NTVDM .
-konsolen stödde inte ANSI escape-sekvenser alls förrän Windows 10 "Threshold 2". Programvara kan styra konsolen genom ioctl -liknande konsol API- systemanrop interfolierade med textutdata. Vissa program tolkar internt ANSI-escapesekvenser från textinmatning och översätter dem till lämpliga systemanrop.
Escape-sekvenser börjar med tecknet ESC ( ASCII : 27 / 0x 1B / 0 33). För tvåteckensekvenser kan det andra tecknet vara ett ASCII-tecken i intervallet 64 till 95 ( @ till _ ). De flesta sekvenser är dock mer än två tecken långa och börjar med ESC och [ . Kombinationen av tecken ESC och [ kallas CSI eller Control Sequence Introducer (även Control Sequence Initiator). Det sista tecknet i denna sekvens kan vara ett ASCII-tecken i intervallet 64 till 126 ( @ till ~ ).
Det finns också ett enda tecken CSI ( ASCII : 155 / 0x 9B / 0 233). CSI av formen ESC + [ används oftare än enteckenalternativet (se även C0- och C1-kontrollkoder ). Endast ESC + [ känns igen av enheter som endast stöder ASCII (7-bitars byte) eller av enheter som stöder 8-bitars byte men använder kontrolltecken i intervallet 0x80-0x9F för andra ändamål. På terminaler som använder UTF-8- kodning tar båda formerna 2 byte ( CSI i UTF-8: 0x C2, 0x 9B), men ESC + [ ser mer läsbar ut.
Även om vissa kodningar använder flera byte för att koda ett enda tecken, kommer vi i resten av den här artikeln endast att överväga ASCII-tecken som representeras av en enda byte.
Strukturen för de flesta ANSI escape-sekvenser är följande:
CSI [символ(-ы) режима] n1 ; n2... [замыкающий(-ие) символ(-ы)] буква
Den sista byten ( буква), modifierad символами режимаoch замыкающими символами, definierar kommandot. Siffror n1, n2, … är valfria parametrar. Om deras värden inte är specificerade är standardinställningen vanligtvis 0 eller 1, beroende på operationen. Om följande siffror inte anges kan semikolon också utelämnas.
Den sista byten, formellt, kan vara vilket tecken som helst från 64 till 126 (från 0x 40 till 0x 7e, ASCII: från @ till ~ ), den kan ändras genom att föregå mellanliggande byte i intervallet från 32 till 47 (från 0x 20 till 0x 2f).
Kolontecknet ( 0x 3a) kan inte innehållas i en sekvens. Den har lämnats för framtida standardisering, så alla sekvenser som innehåller ett kolon ignoreras.
Även om flera lägestecken och flera efterföljande tecken är tillåtna, används inte detta.
Koden | namn | Effekt |
---|---|---|
CSI n A | CUU-Markör upp | Flyttar markören n (standard 1) positioner i angiven riktning. Om markören redan är vid kanten av terminalfönstret, händer ingenting. |
CSI n B | CUD-Markör ner | |
CSI n C | CUF - Markör framåt | |
CSI n D | CUB—Markör tillbaka | |
CSI n E | CNL-markör nästa rad | Flyttar markören till början av den n : e (standard första) raden under den aktuella. |
CSI n F | CPL - Cursor Previous Line | Flyttar markören till början av den n : e (standard första) raden ovanför den aktuella. |
CSI n G | CHA-markör horisontell absolut | Flyttar markören till kolumn n . |
CSI n ; m H | CUP - Markörposition | Flyttar markören till rad n , kolumn m . Standardvärdena för n och m är 1 (övre vänstra hörnet), om bara ett argument ges utan semikolon, antas det vara n . Till exempel är sekvensen CSI;5H synonym med CSI 1;5H , CSI 17;H är synonym med CSI 17H och CSI 17;1H . |
CSI n J | ED-Radera data | Rensar en del av terminalfönstret. Om n är noll (eller saknas), rensas allt från markören till slutet av terminalfönstret. Om n är lika med ett, rensas allt från markören till början av terminalfönstret. Om n är två rensar du hela terminalfönstret (och flyttar markören till det övre vänstra hörnet i MS-DOS ANSI.SYS). I fallet med n lika med 2, istället för att rensa, kan bara skapa nya linjer hända så att det tidigare innehållet i terminalen skjuts upp. |
CSI n K | EL-Radera i rad | Tar bort en del av en sträng. Om n är noll (eller saknas), rensas allt från markören till slutet av raden. Om n är lika med ett, rensas allt från markören till början av raden. Om n är två rensar du hela strängen. Markörens position ändras inte. |
CSI n S | S-Scrolla upp | Rulla upp den aktuella terminalsidan med n (standard 1) rader. Nya rader läggs till längst ner, rader överst på den aktuella sidan skrivs över. (inte ANSI.SYS) |
CSI n T | SD-Scrolla ner | Rullar den aktuella terminalsidan nedåt med n (standard 1) rader. Nya rader läggs till överst, rader längst ner på den aktuella sidan tas bort. (inte ANSI.SYS) |
CSI n ; m f | HVP—Horisontell och vertikal position | Flyttar markören till rad n , kolumn m . Standardvärdet för båda parametrarna är 1. Samma effekt som CUP. |
CSIn [ ; k ] m | SGR - Välj grafisk återgivning | Ställ in SGR-parametrar som definierar text- och bakgrundsfärger. Det kan finnas noll eller fler parametrar efter CSI, separerade med semikolon. Om parametrar inte anges, beter sig CSI m som CSI 0 m (återställ / normal). |
CSI 6n | DSR - Enhetsstatusrapport | Rapporterar den aktuella markörpositionen i formatet ESC[ n ; m R , där n är en rad, m är en kolumn. (Kan inte fungera i MS-DOS) |
CSI | SCP-Spara markörposition | Lagrar markörens position. |
CSI u | RCP - Återställ markörposition | Återställer markörens position. |
CSI?25l | DECTCEM | Döljer markören. |
CSI? 25h | DECTCEM | Gör markören synlig. |
Koden | Effekt | Notera |
---|---|---|
0 | Återställ / Normal | stäng av alla attribut |
ett | Fet eller öka ljusstyrkan | |
2 | Blekt (minska ljusstyrkan) | Stöds inte överallt |
3 | Kursiv: på | Stöds inte överallt. Ibland behandlas som en inversion. |
fyra | Understruket: en gång | |
5 | Blinkar: Långsamt | mindre än 150 gånger per minut |
6 | Blinkande: Ofta | MS-DOS ANSI.SYS; 150+ per minut; stöds inte överallt |
7 | Display: Negativ | inverterar eller reverserar; ändra bakgrunds- och textfärger |
åtta | Dold | Stöds inte överallt. |
9 | Genomstruken | Tecknen är läsliga, men markerade som raderade. Stöds inte överallt. |
tio | Primärt (standard) teckensnitt | |
11–19 | -th alternativ font | Väljer det alternativa teckensnittet (från 14 är det 4:e alternativa teckensnittet till 19 är det 9:e alternativa teckensnittet). |
tjugo | Fraktur | knappast stöds |
21 | Fet: Av eller Understreck: Dubbel | fetstil stöds inte alltid; dubbelt understreck stöds knappast. |
22 | Normal färg eller ljusstyrka | Varken fet eller blekt |
23 | Inte kursiv, inte bråkdel | |
24 | Understrykning: Nej | Understryka varken enkel eller dubbel |
25 | Blinkar: av | |
26 | Reserverad | |
27 | Display: normal | inte negativ |
28 | Visas | stäng av döljande |
29 | inte genomstruken | |
30–37 | Ställ in textfärg (förgrund) | 30+ , där från färgkartan nedan |
38 | Reserverad för ytterligare färger | Följande argument stöds vanligtvis: 5;nvar är färgindexet ( ) eller var finns färgens röda, gröna och blå kanaler (inom ) 0..2552;r;g;b255 |
39 | Standardtextfärg (förgrund) | implementeringsberoende (enligt standarden) |
40–47 | Ställ in bakgrundsfärg | 40+ , där från färgtabellen nedan |
48 | Reserverad för att ställa in utökad bakgrundsfärg | stöder vanligtvis följande argument 5;nvar är färgindexet ( ) eller var finns de röda, gröna och blå färgkanalerna (inom ) 0..2552;r;g;b255 |
49 | Standard bakgrundsfärg | implementeringsberoende (enligt standarden) |
femtio | reserverad | |
51 | Inramad | |
52 | Omgiven | |
53 | överstruken | |
54 | Inte inramad och inte omgiven | |
55 | inte överstruken | |
56–59 | reserverad | |
60 | ideogram underlinje eller höger sidolinje | knappast stöds |
61 | ideogram dubbel underlinje eller dubbel linje på höger sida | knappast stöds |
62 | ideogram överlinje eller vänster sidolinje | knappast stöds |
63 | ideogram dubbel överlinje eller dubbel linje på vänster sida | knappast stöds |
64 | ideogram stressmarkering | knappast stöds |
65 | ideogramattribut av | stöds knappast, tar bort effekterna av koder 60-64 |
90–97 | Ställ in förgrundstextfärg, hög intensitet | aixterm (inte standard) |
100–107 | Ställ in bakgrundsfärg, hög intensitet | aixterm (inte standard) |
Textfärger (och SGR-parametrar i allmänhet) styrs av sekvenserna , där varje , , ... är en SGR-parameter, som visas ovan. Således använder du till exempel koder för att ställa in textfärgen, för att ställa in bakgrundsfärgen, där är färgnumret från tabellen nedan. Följande exempel kan användas med ett verktyg där eller implementera CSI: För att ändra textfärgen till svart, använd ; till rött ; inställning fet grå ; ställ fet röd . För att ställa in standardfärger använd (stöds inte av vissa terminaler) (eller återställ alla attribut ). CSI n1 [;n2 [; ...]] mn1n230+i40+iiprintf\x1b[\e[\x1b[30m\x1b[31m\x1b[30;1m\x1b[31;1m\x1b[39;49m\x1b[0m
Intensitet | 0 | ett | 2 | 3 | fyra | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|---|
Vanligt | Svart | Röd | Grön | Gul | Blå | Magenta | cyan | Vit |
Ljus | Svart | Röd | Grön | Gul | Blå | Magenta | cyan | Vit |
Teckenkodningar | |
---|---|
Historiska kodningar | ytterligare komp. semafor (Makarov) morse Bodo MTK-2 komp. 6-bitars SCP RADIX-50 EBCDIC KOI-7 ISO 646 |
modern 8-bitars representation | symboler ASCII icke-ASCII 8-bitars kodsidor Kyrillisk KOI-8 Grundläggande kodning MacCyrillic ISO 8859 1 (lat.) 2 3 fyra 5 (kir.) 6 7 åtta 9 tio elva 12 13 fjorton 15 (€) 16 Windows 1250 1251 (Kir.) 1252 1253 1254 1255 1256 1257 1258 WGL4 IBM & DOS 437 850 852 855 866 "alternativ" MIC |
Multibyte | traditionell DBCS GB2312 HTML unicode UTF-32 UTF-16 UTF-8 teckenlista Kyrillisk |
användargränssnitt tangentbordslayout plats linjeöversättning font translitterering anpassade typsnitt verktyg iconv spela in |
ISO- standarder | |
---|---|
| |
1 till 9999 |
|
10 000 till 19999 |
|
20 000+ | |
Se även: Lista över artiklar vars titlar börjar med "ISO" |
Ecma internationella standarder | |
---|---|