ANSI escape-sekvenser

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 22 december 2015; kontroller kräver 20 redigeringar .

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.

Historik

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.

Support

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.

Windows och DOS

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.

Sekvenselement

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.

CSI-koder

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.

Vissa ANSI escape-sekvenser (dellista)
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.
SGR-parametrar (Select Graphic Rendition).
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)

Färger

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

Färgkarta [6]
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

Se även

Anteckningar

  1. NIST - lista över tillbakadragna standarder
  2. Paul Williams. Digitals videoterminaler (inte tillgänglig länk) . VT100.net (2006). Hämtad 17 augusti 2011. Arkiverad från originalet 23 juli 2012. 
  3. Heathkit Company. Heathkit Catalog 1979 (ej tillgänglig länk) . Heathkit Company (1979). Hämtad 4 november 2011. Arkiverad från originalet 13 januari 2012. 
  4. Michael Mefford. ANSI.com: Ladda ner det här . PC Magazine (7 februari 1989). Hämtad 10 augusti 2011. Arkiverad från originalet 18 december 2012.
  5. Dan Kegel, Eric Auer. Nansi och NNansi - ANSI-drivrutiner för MS-DOS . Dan Kegel's Web Hostel (28 februari 1999). Hämtad 10 augusti 2011. Arkiverad från originalet 18 december 2012.
  6. Namnen är standard, men färgernas exakta betydelser är inte standardiserade och beror på enheten som visar dem.

Länkar