OSC 60 Query Allowed Features
Ask xterm which of its optional, security-sensitive features are allowed, or, in Contour, read and change the fonts.
OSC 60 ST
Several of xterm’s features are switched on or off by resources, because they could be abused by anything written to the terminal: colors, fonts, the mouse, pasting controls, termcap queries, titles, and window operations. Each has an allow… resource, and a disallowed… list of the parts of it refused while the allow… resource is off. XTQALLOWED, OSC 60 ST, asks which allow… resources are on, and is answered OSC 60 ; list ST with their names separated by commas (report_allowed_ops). It takes no ; and nothing after it; with something there, it is ignored. OSC 61 asks which parts of a feature are refused, and OSC 62 which parts it has.
In a default xterm, allowColorOps, allowFontOps, allowMouseOps, allowTcapOps and allowTitleOps are on, and allowPasteControls and allowWindowOps off. The cases follow it.
Contour’s font settings. Contour uses OSC 60 for something else: its Query or Change Font Settings, read at commit b7caade, which it puts forward as a better OSC 50. OSC 60 ST asks for the fonts, the same bytes as xterm’s query, and
OSC 60 ; size ; regular ; bold ; italic ; bold italic ST
changes them. The specification gives no more than those two lines. In Contour itself, at release 0.8.0, the answer has a sixth field, the emoji font, and the size is in hundredths of a point, so 1200 is 12 points (setAllFont). Each font is a font description, such as Fira Code. When changing them, an empty field, or a size of 0, leaves that setting as it was, and auto for a styled face or the emoji font takes it from the regular font. A change is not made until the user allows it: Contour’s change_font permission is ask by default, and can be set to allow or deny (TerminalSession::setFontDef). A program sending OSC 60 ST cannot tell from the request which of the two it will get back; the answer’s second field, a number in Contour’s and a resource name in xterm’s, tells them apart. xterm ignores the longer form, as it does any OSC 60 with something after it.
This is xterm’s own, and libghostty-vt does not have it, so the case that asks is a known difference. libghostty-vt ignores Contour’s form too: fonts are its host’s business.
Support
| Terminal | Version | Support | Notes |
|---|---|---|---|
| VT220 | manual, 2nd ed., 1984 | No | OSC is not among the controls it recognizes (§4.2) |
| VT510 | manual, 1st ed., 1993 | No | ignores an OSC string (chapter 4) |
| xterm | patch 412, xterm-411a | Yes | |
| libghostty-vt | 919dca5 | No | OSC60-1: not implemented |
| Konsole | 26.11.70, a24c3d71 | No | |
| ConEmu | build 230724, its documentation | No | not in ConEmu’s list, ANSI escape codes |
Validation
OSC60-1: Which features are allowed
\e]60\a
|______|
reply \e]60;allowColorOps,allowFontOps,allowMouseOps,allowTcapOps,allowTitleOps\a
OSC60-2: Contour’s font settings are ignored
A
\e]60;1200;Fira Code\a
B
|AB____|
cursor 1,3
reply none