![]() |
libghostty
|
OSC (Operating System Command) sequence parser and command handling.
The parser operates in a streaming fashion, processing input byte-by-byte to handle OSC sequences that may arrive in fragments across multiple reads. This interface makes it easy to integrate into most environments and avoids over-allocating buffers.
Every OSC sequence starts with a number that says what it is, such as 2 for the window title or 8 for a hyperlink. By default, a sequence whose number the parser does not implement produces GHOSTTY_OSC_COMMAND_INVALID, and its data is discarded.
To implement such a sequence yourself, set GHOSTTY_OSC_OPT_UNKNOWN_MAX_BYTES with ghostty_osc_set(). The parser then produces GHOSTTY_OSC_COMMAND_UNKNOWN for these sequences, and you can read the raw sequence with GHOSTTY_OSC_DATA_UNKNOWN_CONTENT.
Only numbers the parser does not implement are reported this way. A sequence with a number the parser does implement stays GHOSTTY_OSC_COMMAND_INVALID when its contents are malformed.
Typedefs | |
| typedef struct GhosttyOscParserImpl * | GhosttyOscParser |
| typedef struct GhosttyOscCommandImpl * | GhosttyOscCommand |
Enumerations | |
| enum | GhosttyOscCommandType { } |
| enum | GhosttyOscTerminator { GHOSTTY_OSC_TERMINATOR_ST = 0 , GHOSTTY_OSC_TERMINATOR_BEL = 1 , GHOSTTY_OSC_TERMINATOR_MAX_VALUE = GHOSTTY_ENUM_MAX_VALUE } |
| enum | GhosttyOscOption { GHOSTTY_OSC_OPT_UNKNOWN_MAX_BYTES = 0 , GHOSTTY_OSC_OPT_MAX_VALUE = GHOSTTY_ENUM_MAX_VALUE } |
| enum | GhosttyOscCommandData { GHOSTTY_OSC_DATA_INVALID = 0 , GHOSTTY_OSC_DATA_CHANGE_WINDOW_TITLE_STR = 1 , GHOSTTY_OSC_DATA_UNKNOWN_CONTENT = 2 , GHOSTTY_OSC_DATA_UNKNOWN_TRUNCATED = 3 , GHOSTTY_OSC_DATA_UNKNOWN_TERMINATOR = 4 , GHOSTTY_OSC_DATA_MAX_VALUE = GHOSTTY_ENUM_MAX_VALUE } |
Functions | |
| GHOSTTY_API GhosttyResult | ghostty_osc_new (const GhosttyAllocator *allocator, GhosttyOscParser *parser) |
| GHOSTTY_API void | ghostty_osc_free (GhosttyOscParser parser) |
| GHOSTTY_API void | ghostty_osc_reset (GhosttyOscParser parser) |
| GHOSTTY_API GhosttyResult | ghostty_osc_set (GhosttyOscParser parser, GhosttyOscOption option, const void *value) |
| GHOSTTY_API void | ghostty_osc_next (GhosttyOscParser parser, uint8_t byte) |
| GHOSTTY_API GhosttyOscCommand | ghostty_osc_end (GhosttyOscParser parser, uint8_t terminator) |
| GHOSTTY_API GhosttyOscCommandType | ghostty_osc_command_type (GhosttyOscCommand command) |
| GHOSTTY_API bool | ghostty_osc_command_data (GhosttyOscCommand command, GhosttyOscCommandData data, void *out) |
| typedef struct GhosttyOscCommandImpl* GhosttyOscCommand |
Opaque handle to a single OSC command.
This handle represents a parsed OSC (Operating System Command) command. The command can be queried for its type and associated data.
| typedef struct GhosttyOscParserImpl* GhosttyOscParser |
Opaque handle to an OSC parser instance.
This handle represents an OSC (Operating System Command) parser that can be used to parse the contents of OSC sequences.
OSC command data types.
These values specify what type of data to extract from an OSC command using ghostty_osc_command_data.
| Enumerator | |
|---|---|
| GHOSTTY_OSC_DATA_INVALID | Invalid data type. Never results in any data extraction. |
| GHOSTTY_OSC_DATA_CHANGE_WINDOW_TITLE_STR | Window title string data. Valid for: GHOSTTY_OSC_COMMAND_CHANGE_WINDOW_TITLE Output type: const char ** (pointer to null-terminated string) Lifetime: Valid until the next call to any ghostty_osc_* function with the same parser instance. Memory is owned by the parser. |
| GHOSTTY_OSC_DATA_UNKNOWN_CONTENT | The raw bytes of an unknown sequence: everything that was passed to ghostty_osc_next(), including the number at the start. For example, the sequence ESC ] 7400;status=busy BEL gives 7400;status=busy. The bytes are not null-terminated. Valid for: GHOSTTY_OSC_COMMAND_UNKNOWN Output type: GhosttyString * Lifetime: Valid until the next call to any ghostty_osc_* function with the same parser instance. Memory is owned by the parser. |
| GHOSTTY_OSC_DATA_UNKNOWN_TRUNCATED | True if the unknown sequence was longer than GHOSTTY_OSC_OPT_UNKNOWN_MAX_BYTES, or memory ran out while reading it. In that case the content holds only the beginning of the sequence. Valid for: GHOSTTY_OSC_COMMAND_UNKNOWN Output type: bool * |
| GHOSTTY_OSC_DATA_UNKNOWN_TERMINATOR | How the unknown sequence was ended, based on the terminator passed to ghostty_osc_end(). If you reply to the sequence, end the reply the same way. Valid for: GHOSTTY_OSC_COMMAND_UNKNOWN Output type: GhosttyOscTerminator * |
OSC command types.
| enum GhosttyOscOption |
OSC parser options, set with ghostty_osc_set().
| enum GhosttyOscTerminator |
How an OSC sequence was ended.
Programs can end an OSC sequence in two ways. When you reply to a sequence, end the reply the same way the program ended its request. Some programs only recognize replies that match.
| Enumerator | |
|---|---|
| GHOSTTY_OSC_TERMINATOR_ST | The string terminator (ST): ESC followed by a backslash (0x1B 0x5C). |
| GHOSTTY_OSC_TERMINATOR_BEL | The bell character, BEL (byte 0x07). |
| GHOSTTY_API bool ghostty_osc_command_data | ( | GhosttyOscCommand | command, |
| GhosttyOscCommandData | data, | ||
| void * | out ) |
Extract data from an OSC command.
Extracts typed data from the given OSC command based on the specified data type. The output pointer must be of the appropriate type for the requested data kind. Valid command types, output types, and memory safety information are documented in the GhosttyOscCommandData enum.
| command | The OSC command handle to query (may be NULL) |
| data | The type of data to extract |
| out | Pointer to store the extracted data (type depends on data parameter) |
References ghostty_osc_command_data().
Referenced by ghostty_osc_command_data().
| GHOSTTY_API GhosttyOscCommandType ghostty_osc_command_type | ( | GhosttyOscCommand | command | ) |
Get the type of an OSC command.
Returns the type identifier for the given OSC command. This can be used to determine what kind of command was parsed and what data might be available from it.
| command | The OSC command handle to query (may be NULL) |
References ghostty_osc_command_type().
Referenced by ghostty_osc_command_type().
| GHOSTTY_API GhosttyOscCommand ghostty_osc_end | ( | GhosttyOscParser | parser, |
| uint8_t | terminator ) |
Finalize OSC parsing and retrieve the parsed command.
Call this function after feeding all bytes of an OSC sequence to the parser using ghostty_osc_next() with the exception of the terminating character (ESC or ST). This function finalizes the parsing process and returns the parsed OSC command.
If the sequence is not a valid command, this returns NULL. You don't need to check for NULL before calling ghostty_osc_command_type(), which returns GHOSTTY_OSC_COMMAND_INVALID for it.
The terminator parameter specifies the byte that terminated the OSC sequence (typically 0x07 for BEL or 0x5C for ST after ESC). This information is preserved in the parsed command so that responses can use the same terminator format for better compatibility with the calling program. For commands that do not require a response, this parameter is ignored and the resulting command will not retain the terminator information.
If the program cancelled the sequence with CAN (0x18) or SUB (0x1A), pass that byte as the terminator. A cancelled sequence is never reported as GHOSTTY_OSC_COMMAND_UNKNOWN.
The returned command handle is valid until the next call to any ghostty_osc_* function with the same parser instance with the exception of command introspection functions such as ghostty_osc_command_type.
| parser | The parser handle, must not be null. |
| terminator | The terminating byte of the OSC sequence (0x07 for BEL, 0x5C for ST) |
References ghostty_osc_end().
Referenced by ghostty_osc_end().
| GHOSTTY_API void ghostty_osc_free | ( | GhosttyOscParser | parser | ) |
Free an OSC parser instance.
Releases all resources associated with the OSC parser. After this call, the parser handle becomes invalid and must not be used.
| parser | The parser handle to free (may be NULL) |
References ghostty_osc_free().
Referenced by ghostty_osc_free().
| GHOSTTY_API GhosttyResult ghostty_osc_new | ( | const GhosttyAllocator * | allocator, |
| GhosttyOscParser * | parser ) |
Create a new OSC parser instance.
Creates a new OSC (Operating System Command) parser using the provided allocator. The parser must be freed using ghostty_vt_osc_free() when no longer needed.
| allocator | Pointer to the allocator to use for memory management, or NULL to use the default allocator |
| parser | Pointer to store the created parser handle |
References ghostty_osc_new().
Referenced by ghostty_osc_new().
| GHOSTTY_API void ghostty_osc_next | ( | GhosttyOscParser | parser, |
| uint8_t | byte ) |
Parse the next byte in an OSC sequence.
Processes a single byte as part of an OSC sequence. The parser maintains internal state to track the progress through the sequence. Call this function for each byte in the sequence data.
When finished pumping the parser with bytes, call ghostty_osc_end to get the final result.
| parser | The parser handle, must not be null. |
| byte | The next byte to parse |
References ghostty_osc_next().
Referenced by ghostty_osc_next().
| GHOSTTY_API void ghostty_osc_reset | ( | GhosttyOscParser | parser | ) |
Reset an OSC parser instance to its initial state.
Resets the parser state, clearing any partially parsed OSC sequences and returning the parser to its initial state. This is useful for reusing a parser instance or recovering from parse errors.
| parser | The parser handle to reset, must not be null. |
References ghostty_osc_reset().
Referenced by ghostty_osc_reset().
| GHOSTTY_API GhosttyResult ghostty_osc_set | ( | GhosttyOscParser | parser, |
| GhosttyOscOption | option, | ||
| const void * | value ) |
Set an option on an OSC parser.
value points to the option's input type, which is listed in the documentation for each GhosttyOscOption value. Pass NULL to restore the option's default.
Options stay set across ghostty_osc_reset(). You can change an option at any time, but a sequence that is already being parsed may keep the old setting. It is simplest to set options before the first sequence.
| parser | The parser handle |
| option | The option to set |
| value | Pointer to the new value, or NULL to restore the default |
References ghostty_osc_set().
Referenced by ghostty_osc_set().