escape-sekvenser.xml

Denna kod är public domain. Om ni hittar fel eller vill ändra något i koden blir jag jätteglad om ni skickar dessa ändringar till jesper [at] fantasi [punkt] se.


<?xml version="1.0"?>
<article category="software" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="article.xsd">
  <keyword>Escape-sekvenser</keyword>
  <topic>ANSI:s Escape-sekvenser</topic>
  <ingress>
    I många terminaler och emulatorer kan man ändra
    färg och flytta markören genom att skicka
    escape-sekvenser till dem. Den mest spridda standarden för
    dessa sekvenser är definierad av ANSI och den följs
    bland annat av VT100 som är en av de vanligast
    förekommande terminalerna.
  </ingress>

  <text>
    Beroende på hur man kommunicerar med terminalen finns det
    naturligtvis olika sätt att skicka dessa koder till den, men
    om vi antar att vi vill göra det från ett program
    så skickas escape-sekvenserna på samma sätt som
    man skriver ut vanlig text till terminalen, dvs med till exempel
    printf (C/C++), System.out.println, (Java) eller echo (olika
    script).  På <a href="source.php">kodsidan</a> finns exempel
    på hur escape-koderna kan användas i olika program.
  </text>

  <text>
    Nedan följer ett utdrag ur ANSI:s tabell av escape-sekvenser.
    <code><lt />esc<gt /></code> står för ASCII-koden
    för "escape", 0x1B.  Värden inom måsvingar är
    variabler, dvs <code>{ROW}</code> byts ut mot ett radnummer.
  </text>

<table start="-1" header="Namn-+-Esc-sekvens-+-Beskrivning"
       style="l-+-lt-+-l">
  <row data="Cursor Up-+-&amp;amp;lt;esc&amp;amp;gt;[{N}A-+-Flytta markören uppåt N rader, stanna vid terminalens kant. N = 1 om inget annat anges." />
  <row data="Cursor Down-+-&amp;amp;lt;esc&amp;amp;gt;[{N}B-+-Flytta markören nedåt N rader, stanna vid terminalens kant. N = 1 om inget annat anges." />
  <row data="Cursor Right-+-&amp;amp;lt;esc&amp;amp;gt;[{N}C-+-Flytta markören åt höger N kolumner, stanna vid terminalens kant. N = 1 om inget annat anges." />
  <row data="Cursor Left-+-&amp;amp;lt;esc&amp;amp;gt;[{N}D-+-Flytta markören åt vänster N kolumner, stanna vid terminalens kant. N = 1 om inget annat anges." />
  <row data="Cursor Home-+-&amp;amp;lt;esc&amp;amp;gt;[{ROW};{COLUMN}H-+-Flytta markören till rad {ROW} och kolumn {COLUMN}. Om rad och kolumn inte anges (&amp;lt;code&amp;gt;&amp;amp;lt;esc&amp;amp;gt;[H&amp;lt;/code&amp;gt;), kommer markören att flyttas till terminalens övre vänstra hörn." />
  <row data="Move Cursor-+-&amp;amp;lt;esc&amp;amp;gt;[{ROW}{COLUMN}f-+-Samma som Cursor Home." />
  <row data="Next Line-+-&amp;amp;lt;esc&amp;amp;gt;E-+-Flytta markören till början av nästa rad. Rulla texten uppåt om markören är på nedersta raden." />
  <row data="Index-+-&amp;amp;lt;esc&amp;amp;gt;D-+-Flytta markören nedåt en rad. Rulla texten uppåt om markören är på nedersta raden." />
  <row data="Reverse Index-+-&amp;amp;lt;esc&amp;amp;gt;M-+-Flytta markören uppåt en rad. Rulla texten nedåt om markören är på översta raden." />
  <row data="Save Cursor-+-&amp;amp;lt;esc&amp;amp;gt;[s-+-Spara nuvarande markörposition." />
  <row data="Unsave Cursor-+-&amp;amp;lt;esc&amp;amp;gt;[u-+-Återställ markörpositionen till senast sparade." />
  <row data="Query Cursor Position-+-&amp;amp;lt;esc&amp;amp;gt;[6n-+-Begär 'Report Cursor Position' från terminalen." />
  <row data="Report Cursor Position-+-&amp;amp;lt;esc&amp;amp;gt;[{ROW};{COLUMN}R-+-Genereras av terminalen som svar på 'Query Cursor Position' och innehåller nuvarande markörposition." />
  <row data="Save Cursor + Attrs-+-&amp;amp;lt;esc&amp;amp;gt;7-+-Spara nuvarande markörposition och attribut." />
  <row data="Restore Cursor + Attrs-+-&amp;amp;lt;esc&amp;amp;gt;8-+-Återställ markörposition och attribut till senast sparade." />

  <row data="Scroll Screen-+-&amp;amp;lt;esc&amp;amp;gt;[r-+-Slå på textrullning för hela terminalen." />
  <row data="Scroll Screen-+-&amp;amp;lt;esc&amp;amp;gt;[{start};{end}r-+-Slå på textrullning från rad {start} till rad {end}." />
  <row data="Scroll Down-+-&amp;amp;lt;esc&amp;amp;gt;D-+-Rulla texten nedåt en rad." />
  <row data="Scroll Up-+-&amp;amp;lt;esc&amp;amp;gt;M-+-Rulla texten uppåt en rad." />
  <row data="Set smooth scrolling-+-&amp;amp;lt;esc&amp;amp;gt;[?4h-+-Mjuk textrullning." />
  <row data="Set jump scrolling-+-&amp;amp;lt;esc&amp;amp;gt;[?4l-+-Hoppig textrullning." />

  <row data="Erase End of Line-+-&amp;amp;lt;esc&amp;amp;gt;[K-+-Radera texten från markörpositionen till slutet av raden." />
  <row data="Erase End of Line-+-&amp;amp;lt;esc&amp;amp;gt;[0K-+-Radera texten från markörpositionen till slutet av raden." />
  <row data="Erase Start of Line-+-&amp;amp;lt;esc&amp;amp;gt;[1K-+-Radera texten från markörpositionen till början av raden." />
  <row data="Erase Line-+-&amp;amp;lt;esc&amp;amp;gt;[2K-+-Radera hela raden som markören står på." />
  <row data="Erase Down-+-&amp;amp;lt;esc&amp;amp;gt;[J-+-Radera alla rader från nuvarande till botten av terminalen." />
  <row data="Erase Down-+-&amp;amp;lt;esc&amp;amp;gt;[0J-+-Radera alla rader från nuvarande till botten av terminalen." />
  <row data="Erase Up-+-&amp;amp;lt;esc&amp;amp;gt;[1J-+-Radera alla rader från nuvarande till toppen av terminalen." />
  <row data="Erase Screen-+-&amp;amp;lt;esc&amp;amp;gt;[2J-+-Radera hela terminalen med bibehållen bakgrundsfärg och flytta markören till övre vänstra hörnet." />

  <row data="Set Attribute Mode-+-&amp;amp;lt;esc&amp;amp;gt;[{attr 1};...;{attr n}m-+-
Sätt visuella attribut enligt tabellen nedan&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;table class=&amp;quot;fitable&amp;quot;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td class=&amp;quot;fcolumn&amp;quot; width=&amp;quot;40%&amp;quot;&amp;gt;
  &amp;lt;table width=&amp;quot;100%&amp;quot;&amp;gt;
    &amp;lt;tr&amp;gt;&amp;lt;td class=&amp;quot;small&amp;quot;&amp;gt; &amp;lt;/td&amp;gt;&amp;lt;td class=&amp;quot;small&amp;quot;&amp;gt; &amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
    &amp;lt;tr&amp;gt;&amp;lt;td class=&amp;quot;small&amp;quot; valign=&amp;quot;top&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&amp;lt;td class=&amp;quot;small&amp;quot;&amp;gt;Återställ alla attribut&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
    &amp;lt;tr&amp;gt;&amp;lt;td class=&amp;quot;small&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&amp;lt;td class=&amp;quot;small&amp;quot;&amp;gt;Ljus&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
    &amp;lt;tr&amp;gt;&amp;lt;td class=&amp;quot;small&amp;quot;&amp;gt;2&amp;lt;/td&amp;gt;&amp;lt;td class=&amp;quot;small&amp;quot;&amp;gt;Skuggad&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
    &amp;lt;tr&amp;gt;&amp;lt;td class=&amp;quot;small&amp;quot;&amp;gt;4&amp;lt;/td&amp;gt;&amp;lt;td class=&amp;quot;small&amp;quot;&amp;gt;Understruken&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;	
    &amp;lt;tr&amp;gt;&amp;lt;td class=&amp;quot;small&amp;quot;&amp;gt;5&amp;lt;/td&amp;gt;&amp;lt;td class=&amp;quot;small&amp;quot;&amp;gt;Blinkande&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
    &amp;lt;tr&amp;gt;&amp;lt;td class=&amp;quot;small&amp;quot;&amp;gt;7&amp;lt;/td&amp;gt;&amp;lt;td class=&amp;quot;small&amp;quot;&amp;gt;Spegelvänd&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
    &amp;lt;tr&amp;gt;&amp;lt;td class=&amp;quot;small&amp;quot;&amp;gt;8&amp;lt;/td&amp;gt;&amp;lt;td class=&amp;quot;small&amp;quot;&amp;gt;Dold&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
  &amp;lt;/table&amp;gt;
&amp;lt;/td&amp;gt;&amp;lt;td class=&amp;quot;fcolumn&amp;quot; width=&amp;quot;30%&amp;quot;&amp;gt;
  &amp;lt;table width=&amp;quot;100%&amp;quot;&amp;gt;
    &amp;lt;tr&amp;gt;&amp;lt;td class=&amp;quot;small&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Textfärg&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
    &amp;lt;tr&amp;gt;&amp;lt;td class=&amp;quot;small&amp;quot; width=&amp;quot;50%&amp;quot;&amp;gt;30&amp;lt;/td&amp;gt;&amp;lt;td class=&amp;quot;small&amp;quot; width=&amp;quot;50%&amp;quot;&amp;gt;Svart&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
    &amp;lt;tr&amp;gt;&amp;lt;td class=&amp;quot;small&amp;quot;&amp;gt;31&amp;lt;/td&amp;gt;&amp;lt;td class=&amp;quot;small&amp;quot;&amp;gt;Röd&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
    &amp;lt;tr&amp;gt;&amp;lt;td class=&amp;quot;small&amp;quot;&amp;gt;32&amp;lt;/td&amp;gt;&amp;lt;td class=&amp;quot;small&amp;quot;&amp;gt;Grön&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
    &amp;lt;tr&amp;gt;&amp;lt;td class=&amp;quot;small&amp;quot;&amp;gt;33&amp;lt;/td&amp;gt;&amp;lt;td class=&amp;quot;small&amp;quot;&amp;gt;Gul&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
    &amp;lt;tr&amp;gt;&amp;lt;td class=&amp;quot;small&amp;quot;&amp;gt;34&amp;lt;/td&amp;gt;&amp;lt;td class=&amp;quot;small&amp;quot;&amp;gt;Blå&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
    &amp;lt;tr&amp;gt;&amp;lt;td class=&amp;quot;small&amp;quot;&amp;gt;35&amp;lt;/td&amp;gt;&amp;lt;td class=&amp;quot;small&amp;quot;&amp;gt;Lila&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
    &amp;lt;tr&amp;gt;&amp;lt;td class=&amp;quot;small&amp;quot;&amp;gt;36&amp;lt;/td&amp;gt;&amp;lt;td class=&amp;quot;small&amp;quot;&amp;gt;Cyan&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
    &amp;lt;tr&amp;gt;&amp;lt;td class=&amp;quot;small&amp;quot;&amp;gt;37&amp;lt;/td&amp;gt;&amp;lt;td class=&amp;quot;small&amp;quot;&amp;gt;Vit&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
  &amp;lt;/table&amp;gt;
&amp;lt;/td&amp;gt;&amp;lt;td class=&amp;quot;fcolumn&amp;quot; width=&amp;quot;30%&amp;quot;&amp;gt;
  &amp;lt;table width=&amp;quot;100%&amp;quot;&amp;gt;
    &amp;lt;tr&amp;gt;&amp;lt;td class=&amp;quot;small&amp;quot; colspan=&amp;quot;2&amp;quot;&amp;gt;Bakgrunsfärg&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
    &amp;lt;tr&amp;gt;&amp;lt;td class=&amp;quot;small&amp;quot; width=&amp;quot;50%&amp;quot;&amp;gt;40&amp;lt;/td&amp;gt;&amp;lt;td class=&amp;quot;small&amp;quot; width=&amp;quot;50%&amp;quot;&amp;gt;Svart&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
    &amp;lt;tr&amp;gt;&amp;lt;td class=&amp;quot;small&amp;quot;&amp;gt;41&amp;lt;/td&amp;gt;&amp;lt;td class=&amp;quot;small&amp;quot;&amp;gt;Röd&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
    &amp;lt;tr&amp;gt;&amp;lt;td class=&amp;quot;small&amp;quot;&amp;gt;42&amp;lt;/td&amp;gt;&amp;lt;td class=&amp;quot;small&amp;quot;&amp;gt;Grön&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
    &amp;lt;tr&amp;gt;&amp;lt;td class=&amp;quot;small&amp;quot;&amp;gt;43&amp;lt;/td&amp;gt;&amp;lt;td class=&amp;quot;small&amp;quot;&amp;gt;Gul&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
    &amp;lt;tr&amp;gt;&amp;lt;td class=&amp;quot;small&amp;quot;&amp;gt;44&amp;lt;/td&amp;gt;&amp;lt;td class=&amp;quot;small&amp;quot;&amp;gt;Blå&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
    &amp;lt;tr&amp;gt;&amp;lt;td class=&amp;quot;small&amp;quot;&amp;gt;45&amp;lt;/td&amp;gt;&amp;lt;td class=&amp;quot;small&amp;quot;&amp;gt;Lila&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
    &amp;lt;tr&amp;gt;&amp;lt;td class=&amp;quot;small&amp;quot;&amp;gt;46&amp;lt;/td&amp;gt;&amp;lt;td class=&amp;quot;small&amp;quot;&amp;gt;Cyan&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
    &amp;lt;tr&amp;gt;&amp;lt;td class=&amp;quot;small&amp;quot;&amp;gt;47&amp;lt;/td&amp;gt;&amp;lt;td class=&amp;quot;small&amp;quot;&amp;gt;Vit&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
  &amp;lt;/table&amp;gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;" />

  <row data="Font Set G0-+-&amp;amp;lt;esc&amp;amp;gt;(-+-Använd standardtypsnitt." />
  <row data="Font Set G1-+-&amp;amp;lt;esc&amp;amp;gt;)-+-Använd alternativt typsnitt (fetstil/kursiv etc)." />
  <!--  row data="-+-&amp;amp;lt;esc&amp;amp;gt;(A-+-" />
  <row data="-+-&amp;amp;lt;esc&amp;amp;gt;)A-+-" />
  <row data="-+-&amp;amp;lt;esc&amp;amp;gt;(B-+-" />
  <row data="-+-&amp;amp;lt;esc&amp;amp;gt;)B-+-" />
  <row data="Set G0 special chars. and line set-+-&amp;amp;lt;esc&amp;amp;gt;(0-+-" />
  <row data="Set G1 special chars. and line set-+-&amp;amp;lt;esc&amp;amp;gt;)0-+-" />
  <row data="Set G0 alternate character ROM-+-&amp;amp;lt;esc&amp;amp;gt;(1-+-" />
  <row data="Set G1 alternate character ROM-+-&amp;amp;lt;esc&amp;amp;gt;)1-+-" />
  <row data="Set G0 alt char ROM and spec. graphics-+-&amp;amp;lt;esc&amp;amp;gt;(2-+-" />
  <row data="Set G1 alt char ROM and spec. graphics-+-&amp;amp;lt;esc&amp;amp;gt;)2-+-" / -->
  <row data="Double-height top half-+-&amp;amp;lt;esc&amp;amp;gt;#3-+-Ändra aktuell rad till dubbel höjd, övre halvan." />
  <row data="Double-height bottom half-+-&amp;amp;lt;esc&amp;amp;gt;#4-+-Ändra aktuell rad till dubbel höjd, nedre halvan." />
  <row data="Normal size-+-&amp;amp;lt;esc&amp;amp;gt;#5-+-Ändra aktuell rad till normal bredd och höjd." />
  <row data="Double-width-+-&amp;amp;lt;esc&amp;amp;gt;#6-+-Ändra aktuell rad till dubbel bredd." />

  <row data="Leds-+-&amp;amp;lt;esc&amp;amp;gt;[1;...;4q-+-Tänd en eller fler programmerbara lysdioder (1-4). " />
  <row data="Leds-+-&amp;amp;lt;esc&amp;amp;gt;[q-+-Släck alla programmerbara lysdioder. " />
  <row data="Set Tab-+-&amp;amp;lt;esc&amp;amp;gt;H-+-Sätt en tab på nuvarande kolumn." />
  <row data="Clear Current Tab-+-&amp;amp;lt;esc&amp;amp;gt;[g-+-Ta bort tab från nuvarande kolumn." />
  <row data="Clear Current Tab-+-&amp;amp;lt;esc&amp;amp;gt;[0g-+-Ta bort tab från nuvarande kolumn." />
  <row data="Clear All Tabs-+-&amp;amp;lt;esc&amp;amp;gt;[3g-+-Ta bort alla tabbar." />

  <row data="Enable Line Wrap-+-&amp;amp;lt;esc&amp;amp;gt;[7h-+-Slå på automatisk radbrytning." />
  <row data="Disable Line Wrap-+-&amp;amp;lt;esc&amp;amp;gt;[7l-+-Slå av automatisk radbrytning." />
  <row data="Reverse video-+-&amp;amp;lt;esc&amp;amp;gt;[?5h-+-Invertera färgerna i terminalen." />
  <row data="Normal video-+-&amp;amp;lt;esc&amp;amp;gt;[?5l-+-Återställ färgerna i terminalen." />
  <row data="Set Key Definition-+-&amp;amp;lt;esc&amp;amp;gt;[{key};&amp;amp;quot;{string}&amp;amp;quot;p-+-Associera en text med en tangent ({key} = tangentens decimala ASCII-värde)." />
  <row data="Reset Device-+-&amp;amp;lt;esc&amp;amp;gt;c-+-Återställ alla terminalinställningar till standardvärden." />
<!--
MODES

ESC[20h Linefeed 
ESC[20l Cursor key mode Application 
ESC[?1h Cursor 
ESC[?1l ANSII/VT52 mode ANSII 

ESC[?2l Column mode 132 col. 
ESC[?3h 80 col. 
ESC[?3l Scrolling mode Smooth 
ESC[?4h Jump 
ESC[?4l Screen video mode Black on wht 
ESC[?5h White on blk 
ESC[?5l Origin mode Relative 
ESC[?6h Absolute 
ESC[?6l Wraparound On 
ESC[?7h Off 
ESC[?7l Auto key repeat On 
ESC[?8h Off 
ESC[?8l Interlaced video On 
ESC[?9h Off 
ESC[?9l Graphic proc. option On 
ESC1 Off 
ESC2 Keypad mode Application 
ESC= Numeric 
  -->
  <row data="E Test-+-&amp;amp;lt;esc&amp;amp;gt;#8-+-Fyll terminalen med bokstaven E." />
  <row data="Power up Test-+-&amp;amp;lt;esc&amp;amp;gt;[2;1y-+-Utför startuptest (ROM, RAM, NVR, tangentbord och AVO)." />
  <row data="Data loop-back Test-+-&amp;amp;lt;esc&amp;amp;gt;[2;2y-+-Utför data loop-back-test. Kabel krävs." />
  <row data="EIA modem control-+-&amp;amp;lt;esc&amp;amp;gt;[2;4y-+-Kabel krävs." />
  <row data="Repeat test-+-&amp;amp;lt;esc&amp;amp;gt;[2;8y-+-Upprepa testet tills dess att det misslyckas." />
</table>

<!--


Esc5n 	Device status report 	DSR
Esc0n 	Response: terminal is OK 	DSR
Esc3n 	Response: terminal is not OK 	DSR
 
VT100 Special Key Codes

These are sent from the terminal back to the computer when the particular key is pressed. Note that the numeric keypad keys send different codes in numeric mode than in alternate mode. See escape codes above to change keypad mode.

Function Keys:
EscOP	PF1
EscOQ	PF2
EscOR	PF3
EscOS	PF4

 

Arrow Keys:
  	Reset 	Set
up 	EscA	EscOA
down 	EscB	EscOB
right 	EscC	EscOC
left 	EscD	EscOD

 

Numeric Keypad Keys:
EscOp	0
EscOq	1
EscOr	2
EscOs	3
EscOt	4
EscOu	5
EscOv	6
EscOw	7
EscOx	8
EscOy	9
EscOm	-(minus)
EscOl	,(comma)
EscOn	.(period)
EscOM	^M

 

Printing:
Esc[i 	Print Screen 	Print the current screen
Esc[1i	Print Line 	Print the current line
Esc[4i	Stop Print Log 	Disable log
Esc[5i	Start Print Log	Start log; all received text is echoed to a printer

REPORTS

Report Query Response  Cursor position 
<ESC>[6n 
<ESC>[Pl;PcR Status report 
<ESC>[c 
<ESC>[?1;Psc or 'what are you' Status report 
<ESC>[0c 
<ESC>[?1;Psc

Where Pl is line number, Pc is column no. Ps is status word

Ps = 0 Basic VT100, no options 1 VT100 with processor option (STP) 2 VT100 with advanced video (AVO) 4 VT100 with graphic processor (GPO)

3 STP & AVO 5 STP & GPO 6 AVO & GPO 7 STP, AVO & GPO

VT52
VT52 COMPATIBLE MODE

<ESC>F Select graphics characters (VT100 set not the same as VT52) 
<ESC>G Select ASCII set 
<ESC>I Reverse linefeed 
<ESC>YPlPc Direct cursor address Pl - line, Pc - column 
<ESC>Z Identify - response is <ESC>/Z 
<ESC>= Enter keypad application mode 
<ESC>> Enter keypad numeric mode 
<ESC>< Enter ANSII mode
-->

</article>