![]() |
libghostty
|
Utilities for encoding key events into terminal escape sequences, supporting both legacy encoding as well as Kitty Keyboard Protocol.
For a complete working example, see example/c-vt-encode-key in the repository.
When you have a GhosttyTerminal, you can sync its modes (cursor key application, Kitty flags, etc.) into the encoder automatically:
Typedefs | |
| typedef struct GhosttyKeyEncoderImpl * | GhosttyKeyEncoder |
| typedef uint8_t | GhosttyKittyKeyFlags |
| typedef struct GhosttyKeyEventImpl * | GhosttyKeyEvent |
| typedef uint16_t | GhosttyMods |
Enumerations | |
| enum | GhosttyOptionAsAlt { GHOSTTY_OPTION_AS_ALT_FALSE = 0 , GHOSTTY_OPTION_AS_ALT_TRUE = 1 , GHOSTTY_OPTION_AS_ALT_LEFT = 2 , GHOSTTY_OPTION_AS_ALT_RIGHT = 3 , GHOSTTY_OPTION_AS_ALT_MAX_VALUE = GHOSTTY_ENUM_MAX_VALUE } |
| enum | GhosttyKeyEncoderOption { GHOSTTY_KEY_ENCODER_OPT_CURSOR_KEY_APPLICATION = 0 , GHOSTTY_KEY_ENCODER_OPT_KEYPAD_KEY_APPLICATION = 1 , GHOSTTY_KEY_ENCODER_OPT_IGNORE_KEYPAD_WITH_NUMLOCK = 2 , GHOSTTY_KEY_ENCODER_OPT_ALT_ESC_PREFIX = 3 , GHOSTTY_KEY_ENCODER_OPT_MODIFY_OTHER_KEYS_STATE_2 = 4 , GHOSTTY_KEY_ENCODER_OPT_KITTY_FLAGS = 5 , GHOSTTY_KEY_ENCODER_OPT_MACOS_OPTION_AS_ALT = 6 , GHOSTTY_KEY_ENCODER_OPT_BACKARROW_KEY_MODE = 7 , GHOSTTY_KEY_ENCODER_OPT_MAX_VALUE = GHOSTTY_ENUM_MAX_VALUE } |
| enum | GhosttyKeyAction { GHOSTTY_KEY_ACTION_RELEASE = 0 , GHOSTTY_KEY_ACTION_PRESS = 1 , GHOSTTY_KEY_ACTION_REPEAT = 2 , GHOSTTY_KEY_ACTION_MAX_VALUE = GHOSTTY_ENUM_MAX_VALUE } |
| enum | GhosttyKey |
| typedef struct GhosttyKeyEncoderImpl* GhosttyKeyEncoder |
Opaque handle to a key encoder instance.
This handle represents a key encoder that converts key events into terminal escape sequences.
Definition at line 25 of file key/encoder.h.
| typedef struct GhosttyKeyEventImpl* GhosttyKeyEvent |
Opaque handle to a key event.
This handle represents a keyboard input event containing information about the physical key pressed, modifiers, and generated text.
Definition at line 24 of file key/event.h.
| typedef uint8_t GhosttyKittyKeyFlags |
Kitty keyboard protocol flags.
Bitflags representing the various modes of the Kitty keyboard protocol. These can be combined using bitwise OR operations. Valid values all start with GHOSTTY_KITTY_KEY_.
Definition at line 36 of file key/encoder.h.
| typedef uint16_t GhosttyMods |
Keyboard modifier keys bitmask.
A bitmask representing all keyboard modifiers. This tracks which modifier keys are pressed and, where supported by the platform, which side (left or right) of each modifier is active.
Use the GHOSTTY_MODS_* constants to test and set individual modifiers.
Modifier side bits are only meaningful when the corresponding modifier bit is set. Not all platforms support distinguishing between left and right modifier keys and Ghostty is built to expect that some platforms may not provide this information.
Definition at line 57 of file key/event.h.
| enum GhosttyKey |
Physical key codes.
The set of key codes that Ghostty is aware of. These represent physical keys on the keyboard and are layout-independent. For example, the "a" key on a US keyboard is the same as the "ф" key on a Russian keyboard, but both will report the same key_a value.
Layout-dependent strings are provided separately as UTF-8 text and are produced by the platform. These values are based on the W3C UI Events KeyboardEvent code standard. See: https://www.w3.org/TR/uievents-code
Definition at line 107 of file key/event.h.
| enum GhosttyKeyAction |
Keyboard input event types.
| Enumerator | |
|---|---|
| GHOSTTY_KEY_ACTION_RELEASE | Key was released |
| GHOSTTY_KEY_ACTION_PRESS | Key was pressed |
| GHOSTTY_KEY_ACTION_REPEAT | Key is being repeated (held down) |
Definition at line 31 of file key/event.h.
Key encoder option identifiers.
These values are used with ghostty_key_encoder_setopt() to configure the behavior of the key encoder.
| Enumerator | |
|---|---|
| GHOSTTY_KEY_ENCODER_OPT_CURSOR_KEY_APPLICATION | Terminal DEC mode 1: cursor key application mode (value: bool) |
| GHOSTTY_KEY_ENCODER_OPT_KEYPAD_KEY_APPLICATION | Terminal DEC mode 66: keypad key application mode (value: bool) |
| GHOSTTY_KEY_ENCODER_OPT_IGNORE_KEYPAD_WITH_NUMLOCK | Terminal DEC mode 1035: ignore keypad with numlock (value: bool) |
| GHOSTTY_KEY_ENCODER_OPT_ALT_ESC_PREFIX | Terminal DEC mode 1036: alt sends escape prefix (value: bool) |
| GHOSTTY_KEY_ENCODER_OPT_MODIFY_OTHER_KEYS_STATE_2 | xterm modifyOtherKeys mode 2 (value: bool) |
| GHOSTTY_KEY_ENCODER_OPT_KITTY_FLAGS | Kitty keyboard protocol flags (value: GhosttyKittyKeyFlags bitmask) |
| GHOSTTY_KEY_ENCODER_OPT_MACOS_OPTION_AS_ALT | macOS option-as-alt setting (value: GhosttyOptionAsAlt) |
| GHOSTTY_KEY_ENCODER_OPT_BACKARROW_KEY_MODE | Backarrow key mode (value: bool) See https://vt100.net/dec/ek-vt3xx-tp-002.pdf page 170 If false (the default), backspace emits 0x7f If true, backspace emits 0x08 |
Definition at line 87 of file key/encoder.h.
| enum GhosttyOptionAsAlt |
macOS option key behavior.
Determines whether the "option" key on macOS is treated as "alt" or not. See the Ghostty macos-option-as-alt configuration option for more details.
Definition at line 67 of file key/encoder.h.
| GHOSTTY_API GhosttyResult ghostty_key_encoder_encode | ( | GhosttyKeyEncoder | encoder, |
| GhosttyKeyEvent | event, | ||
| char * | out_buf, | ||
| size_t | out_buf_size, | ||
| size_t * | out_len ) |
Encode a key event into a terminal escape sequence.
Converts a key event into the appropriate terminal escape sequence based on the encoder's current options. The sequence is written to the provided buffer.
Not all key events produce output. For example, unmodified modifier keys typically don't generate escape sequences. Check the out_len parameter to determine if any data was written.
If the output buffer is too small, this function returns GHOSTTY_OUT_OF_SPACE and out_len will contain the required buffer size. The caller can then allocate a larger buffer and call the function again.
| encoder | The encoder handle, must not be NULL |
| event | The key event to encode, must not be NULL |
| out_buf | Buffer to write the encoded sequence to |
| out_buf_size | Size of the output buffer in bytes |
| out_len | Pointer to store the number of bytes written (may be NULL) |
| GHOSTTY_API void ghostty_key_encoder_free | ( | GhosttyKeyEncoder | encoder | ) |
Free a key encoder instance.
Releases all resources associated with the key encoder. After this call, the encoder handle becomes invalid and must not be used.
| encoder | The encoder handle to free (may be NULL) |
| GHOSTTY_API GhosttyResult ghostty_key_encoder_new | ( | const GhosttyAllocator * | allocator, |
| GhosttyKeyEncoder * | encoder ) |
Create a new key encoder instance.
Creates a new key encoder with default options. The encoder can be configured using ghostty_key_encoder_setopt() and must be freed using ghostty_key_encoder_free() when no longer needed.
| Memory Management | Pointer to the allocator to use for memory management, or NULL to use the default allocator |
| encoder | Pointer to store the created encoder handle |
| GHOSTTY_API void ghostty_key_encoder_setopt | ( | GhosttyKeyEncoder | encoder, |
| GhosttyKeyEncoderOption | option, | ||
| const void * | value ) |
Set an option on the key encoder.
Configures the behavior of the key encoder. Options control various aspects of encoding such as terminal modes (cursor key application mode, keypad mode), protocol selection (Kitty keyboard protocol flags), and platform-specific behaviors (macOS option-as-alt).
If you are using a terminal instance, you can set the key encoding options based on the active terminal state (e.g. legacy vs Kitty mode and associated flags) with ghostty_key_encoder_setopt_from_terminal().
A null pointer value does nothing. It does not reset the value to the default. The setopt call will do nothing.
| encoder | The encoder handle, must not be NULL |
| option | The option to set |
| value | Pointer to the value to set (type depends on the option) |
| GHOSTTY_API void ghostty_key_encoder_setopt_from_terminal | ( | GhosttyKeyEncoder | encoder, |
| GhosttyTerminal | terminal ) |
Set encoder options from a terminal's current state.
Reads the terminal's current modes and flags and applies them to the encoder's options. This sets cursor key application mode, keypad mode, alt escape prefix, modifyOtherKeys state, and Kitty keyboard protocol flags from the terminal state.
Note that the macos_option_as_alt option cannot be determined from terminal state and is reset to GHOSTTY_OPTION_AS_ALT_FALSE by this call. Use ghostty_key_encoder_setopt() to set it afterward if needed.
| encoder | The encoder handle, must not be NULL |
| Terminal | The terminal handle, must not be NULL |
| GHOSTTY_API void ghostty_key_event_free | ( | GhosttyKeyEvent | event | ) |
Free a key event instance.
Releases all resources associated with the key event. After this call, the event handle becomes invalid and must not be used.
| event | The key event handle to free (may be NULL) |
| GHOSTTY_API GhosttyKeyAction ghostty_key_event_get_action | ( | GhosttyKeyEvent | event | ) |
Get the key action (press, release, repeat).
| event | The key event handle, must not be NULL |
| GHOSTTY_API bool ghostty_key_event_get_composing | ( | GhosttyKeyEvent | event | ) |
Get whether the key event is part of a composition sequence.
| event | The key event handle, must not be NULL |
| GHOSTTY_API GhosttyMods ghostty_key_event_get_consumed_mods | ( | GhosttyKeyEvent | event | ) |
Get the consumed modifiers bitmask.
| event | The key event handle, must not be NULL |
| GHOSTTY_API GhosttyKey ghostty_key_event_get_key | ( | GhosttyKeyEvent | event | ) |
Get the physical key code.
| event | The key event handle, must not be NULL |
| GHOSTTY_API GhosttyMods ghostty_key_event_get_mods | ( | GhosttyKeyEvent | event | ) |
Get the modifier keys bitmask.
| event | The key event handle, must not be NULL |
| GHOSTTY_API uint32_t ghostty_key_event_get_unshifted_codepoint | ( | GhosttyKeyEvent | event | ) |
Get the unshifted Unicode codepoint.
| event | The key event handle, must not be NULL |
| GHOSTTY_API const char * ghostty_key_event_get_utf8 | ( | GhosttyKeyEvent | event, |
| size_t * | len ) |
Get the UTF-8 text generated by the key event.
The returned pointer is valid until the event is freed or the UTF-8 text is modified.
| event | The key event handle, must not be NULL |
| len | Pointer to store the length of the UTF-8 text in bytes (may be NULL) |
| GHOSTTY_API GhosttyResult ghostty_key_event_new | ( | const GhosttyAllocator * | allocator, |
| GhosttyKeyEvent * | event ) |
Create a new key event instance.
Creates a new key event with default values. The event must be freed using ghostty_key_event_free() when no longer needed.
| Memory Management | Pointer to the allocator to use for memory management, or NULL to use the default allocator |
| event | Pointer to store the created key event handle |
| GHOSTTY_API void ghostty_key_event_set_action | ( | GhosttyKeyEvent | event, |
| GhosttyKeyAction | action ) |
Set the key action (press, release, repeat).
| event | The key event handle, must not be NULL |
| action | The action to set |
| GHOSTTY_API void ghostty_key_event_set_composing | ( | GhosttyKeyEvent | event, |
| bool | composing ) |
Set whether the key event is part of a composition sequence.
| event | The key event handle, must not be NULL |
| composing | Whether the key event is part of a composition sequence |
| GHOSTTY_API void ghostty_key_event_set_consumed_mods | ( | GhosttyKeyEvent | event, |
| GhosttyMods | consumed_mods ) |
Set the consumed modifiers bitmask.
| event | The key event handle, must not be NULL |
| consumed_mods | The consumed modifiers bitmask to set |
| GHOSTTY_API void ghostty_key_event_set_key | ( | GhosttyKeyEvent | event, |
| GhosttyKey | key ) |
Set the physical key code.
| event | The key event handle, must not be NULL |
| Key Encoding | The physical key code to set |
| GHOSTTY_API void ghostty_key_event_set_mods | ( | GhosttyKeyEvent | event, |
| GhosttyMods | mods ) |
Set the modifier keys bitmask.
| event | The key event handle, must not be NULL |
| mods | The modifier keys bitmask to set |
| GHOSTTY_API void ghostty_key_event_set_unshifted_codepoint | ( | GhosttyKeyEvent | event, |
| uint32_t | codepoint ) |
Set the unshifted Unicode codepoint.
| event | The key event handle, must not be NULL |
| codepoint | The unshifted Unicode codepoint to set |
| GHOSTTY_API void ghostty_key_event_set_utf8 | ( | GhosttyKeyEvent | event, |
| const char * | utf8, | ||
| size_t | len ) |
Set the UTF-8 text generated by the key for the current keyboard layout.
Must contain the unmodified character before any Ctrl/Meta transformations. The encoder derives modifier sequences from the logical key and mods bitmask, not from this text. Do not pass C0 control characters (U+0000-U+001F, U+007F) or platform function key codes (e.g. macOS PUA U+F700-U+F8FF); pass NULL instead and let the encoder use the logical key.
The key event does NOT take ownership of the text pointer. The caller must ensure the string remains valid for the lifetime needed by the event.
| event | The key event handle, must not be NULL |
| utf8 | The UTF-8 text to set (or NULL for empty) |
| len | Length of the UTF-8 text in bytes |