The Rest of ECMA-48
ECMA-48 defines 162 control functions. Every one that a terminal has a use for has its own page on this site. The other 80 are below, grouped by what they were for: data communications, printing and typesetting, forms, and right-to-left text, the jobs ECMA-48 was written to serve besides driving a screen. Each links to its definition in the standard.
None of them is defined by DEC STD 070 or the VT510 manual, and libghostty-vt implements none of them. It ignores them, as DEC STD 070 says a terminal should ignore any function it does not implement (§3.5.1.3, p. 3-20), and so does a default xterm, as the cases below show. Three that a default xterm does act on have pages of their own: SL and SR, which it implements, and SIMD, which it takes as Scroll Down. COVERAGE.md in the repository lists all 162 functions together.
Transmission control
These come from data communications, where a terminal and a computer exchanged blocks of text over a line and acknowledged them. They mark the start and end of headings, texts, blocks and transmissions, and carry the acknowledgements and idle fill between them. A terminal emulator’s connection to its program does its own framing, so none of them has anything to do.
| § | Function | p. |
|---|---|---|
| 8.3.1 | ACK, Acknowledge | 33 |
| 8.3.33 | DLE, Data Link Escape | 39 |
| 8.3.42 | EM, End Of Medium | 42 |
| 8.3.45 | EOT, End Of Transmission | 43 |
| 8.3.49 | ETB, End Of Transmission Block | 43 |
| 8.3.50 | ETX, End Of Text | 43 |
| 8.3.84 | NAK, Negative Acknowledge | 50 |
| 8.3.127 | SOH, Start Of Heading | 65 |
| 8.3.146 | STX, Start Of Text | 71 |
| 8.3.150 | SYN, Synchronous Idle | 72 |
Device control and separators
DC2 and DC4 were for switching on and off an auxiliary device on the line; DC1 and DC3, their siblings, became XON and XOFF. The four information separators divide data into files, groups, records and units, for data that is not text to be shown.
| § | Function | p. |
|---|---|---|
| 8.3.29 | DC2, Device Control Two | 38 |
| 8.3.31 | DC4, Device Control Four | 39 |
| 8.3.69 | IS1, Information Separator One (US, Unit Separator) | 48 |
| 8.3.70 | IS2, Information Separator Two (RS, Record Separator) | 48 |
| 8.3.71 | IS3, Information Separator Three (GS, Group Separator) | 48 |
| 8.3.72 | IS4, Information Separator Four (FS, File Separator) | 48 |
Code extension and private use
Ways of escaping into another coding system, or of introducing one character with a private meaning, and two controls reserved for private use. SCI’s 7-bit form, ESC Z, is the same as DEC’s DECID, which libghostty-vt answers as a Device Attributes request.
| § | Function | p. |
|---|---|---|
| 8.3.11 | CMD, Coding Method Delimiter | 34 |
| 8.3.100 | PU1, Private Use One | 54 |
| 8.3.101 | PU2, Private Use Two | 54 |
| 8.3.109 | SCI, Single Character Introducer | 58 |
Input and messages
Controls for a device’s manual input, interrupting the other end, signalling a waiting message or a function key, and cancelling the character before.
| § | Function | p. |
|---|---|---|
| 8.3.8 | CCH, Cancel Character | 34 |
| 8.3.34 | DMI, Disable Manual Input | 39 |
| 8.3.43 | EMI, Enable Manual Input | 42 |
| 8.3.52 | FNK, Function Key | 44 |
| 8.3.68 | INT, Interrupt | 48 |
| 8.3.83 | MW, Message Waiting | 50 |
| 8.3.145 | STS, Set Transmit State | 71 |
Areas and fields
For forms: dividing the screen into qualified areas and selected areas with their own rules, and erasing or editing within them. Guarded areas, the one part of this that terminals took up, have their own page under SPA.
| § | Function | p. |
|---|---|---|
| 8.3.25 | DAQ, Define Area Qualification | 37 |
| 8.3.37 | EA, Erase In Area | 40 |
| 8.3.40 | EF, Erase In Field | 41 |
| 8.3.47 | ESA, End Of Selected Area | 43 |
| 8.3.115 | SEE, Select Editing Extent | 60 |
| 8.3.138 | SSA, Start Of Selected Area | 69 |
Page and line layout
For printers and typesetting: the size of the page and its text area, the home and limit positions of lines and pages, line spacing and partial line feeds, where lines may break, and how lines are justified and aligned.
| § | Function | p. |
|---|---|---|
| 8.3.4 | BPH, Break Permitted Here | 33 |
| 8.3.36 | DTA, Dimension Text Area | 40 |
| 8.3.73 | JFY, Justify | 48 |
| 8.3.85 | NBH, No Break Here | 50 |
| 8.3.91 | PFS, Page Format Selection | 52 |
| 8.3.92 | PLD, Partial Line Forward | 52 |
| 8.3.93 | PLU, Partial Line Backward | 53 |
| 8.3.102 | QUAD, Quad | 55 |
| 8.3.116 | SEF, Sheet Eject And Feed | 60 |
| 8.3.122 | SLH, Set Line Home | 64 |
| 8.3.123 | SLL, Set Line Limit | 64 |
| 8.3.124 | SLS, Set Line Spacing | 64 |
| 8.3.131 | SPH, Set Page Home | 67 |
| 8.3.132 | SPI, Spacing Increment | 67 |
| 8.3.133 | SPL, Set Page Limit | 68 |
| 8.3.134 | SPQR, Select Print Quality And Rapidity | 68 |
| 8.3.139 | SSU, Select Size Unit | 69 |
| 8.3.149 | SVS, Select Line Spacing | 71 |
Character presentation
The size, spacing, font and orientation of characters, combining two characters into one, and alternative presentations of the same character. A character-cell terminal has one fixed cell size and one font, so there is nothing for these to change.
| § | Function | p. |
|---|---|---|
| 8.3.53 | FNT, Font Selection | 44 |
| 8.3.54 | GCC, Graphic Character Combination | 44 |
| 8.3.55 | GSM, Graphic Size Modification | 45 |
| 8.3.56 | GSS, Graphic Size Selection | 45 |
| 8.3.65 | IDCS, Identify Device Control String | 47 |
| 8.3.66 | IGS, Identify Graphic Subrepertoire | 47 |
| 8.3.90 | PEC, Presentation Expand Or Contract | 51 |
| 8.3.107 | SACS, Set Additional Character Separation | 56 |
| 8.3.108 | SAPV, Select Alternative Presentation Variants | 57 |
| 8.3.110 | SCO, Select Character Orientation | 58 |
| 8.3.112 | SCS, Set Character Spacing | 59 |
| 8.3.118 | SHS, Select Character Spacing | 63 |
| 8.3.136 | SRCS, Set Reduced Character Separation | 68 |
| 8.3.140 | SSW, Set Space Width | 70 |
| 8.3.157 | TSS, Thin Space Specification | 73 |
Tabulation for typesetting
Line tabulation stops, and tab stops that align text on its leading edge, its trailing edge, its centre or a chosen character. Terminals keep only the plain character tab stops that HT, CHT, HTS, TBC and CTC use.
| § | Function | p. |
|---|---|---|
| 8.3.23 | CVT, Cursor Line Tabulation | 37 |
| 8.3.61 | HTJ, Character Tabulation With Justification | 46 |
| 8.3.144 | STAB, Selective Tabulation | 71 |
| 8.3.151 | TAC, Tabulation Aligned Centred | 72 |
| 8.3.152 | TALE, Tabulation Aligned Leading Edge | 72 |
| 8.3.153 | TATE, Tabulation Aligned Trailing Edge | 72 |
| 8.3.155 | TCC, Tabulation Centred On Character | 73 |
| 8.3.156 | TSR, Tabulation Stop Remove | 73 |
| 8.3.162 | VTS, Line Tabulation Set | 74 |
Bidirectional and directed text
Text that runs right to left, or vertically, and strings whose direction is reversed or directed. SIMD, the last of this group, has its own page.
| § | Function | p. |
|---|---|---|
| 8.3.99 | PTX, Parallel Texts | 53 |
| 8.3.111 | SCP, Select Character Path | 58 |
| 8.3.114 | SDS, Start Directed String | 59 |
| 8.3.130 | SPD, Select Presentation Directions | 66 |
| 8.3.137 | SRS, Start Reversed String | 69 |
Validation
CAT-1: Transmission controls are ignored
A
\x01\x02\x03\x04 # SOH STX ETX EOT
\x06\x10\x15\x16 # ACK DLE NAK SYN
\x17\x19 # ETB EM
\x12\x14\x1c\x1f # DC2 DC4 IS4 IS1
B
|AB______|
cursor 1,3
CAT-2: So are the independent functions
A
\e`\ea\eb\ed # DMI INT EMI CMD
B
|AB______|
CAT-3: And the unused C1 controls
A
\eB\eC\eF\eG\eI # BPH NBH SSA ESA HTJ
\eJ\eK\eL\eQ\eR # VTS PLD PLU PU1 PU2
\eS\eT\eU\e[0[ # STS CCH MW SRS
B
|AB______|
CAT-4: The control sequences without an intermediate
A
\e[Y\e[O\e[N\e[o # CVT EA EF DAQ
\e[Q\e[0[\e[\\\e[0] # SEE SRS PTX SDS
B
|AB______|
cursor 1,3
CAT-5: And those with a space
A
\e[\sB\e[\sC\e[\sD\e[\sE\e[\sF\e[\sG\e[\sH # GSM GSS FNT TSS JFY SPI QUAD
\e[\sI\e[\sJ\e[\sK\e[\sL\e[\sM\e[\sO # SSU PFS SHS SVS IGS IDCS
\e[\sS\e[\sT\e[\sU\e[\sV\e[\sW\e[\sX\e[\sY # SPD DTA SLH SLL FNK SPQR SEF
\e[\sZ\e[\s[\e[\s\\\e[\s]\e[\s^\e[\s_ # PEC SSW SACS SAPV STAB GCC
\e[\s`\e[\sa\e[\sb\e[\sc\e[\sd # TATE TALE TAC TCC TSR
\e[\se\e[\sf\e[\sg\e[\sh\e[\si\e[\sj\e[\sk # SCO SRCS SCS SLS SPH SPL SCP
B
|AB______|
cursor 1,3
A default xterm drops every one of these: its parse tables send them to the ground state without acting on them (csi_table, csi_sp_table), and so does libghostty-vt. The one escape sequence above that xterm can act on is ESC F, which moves the cursor to the lower left corner only when the hpLowerleftBugCompat resource is set for old HP-UX programs, and it is off by default (CASE_HP_BUGGY_LL).