![]() |
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-key-encode in the repository.
Typedefs | |
typedef struct GhosttyKeyEncoder * | GhosttyKeyEncoder |
typedef uint8_t | GhosttyKittyKeyFlags |
typedef struct GhosttyKeyEvent * | 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 } |
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 } |
enum | GhosttyKeyAction { GHOSTTY_KEY_ACTION_RELEASE = 0 , GHOSTTY_KEY_ACTION_PRESS = 1 , GHOSTTY_KEY_ACTION_REPEAT = 2 } |
enum | GhosttyKey |
typedef struct GhosttyKeyEncoder* GhosttyKeyEncoder |
Opaque handle to a key encoder instance.
This handle represents a key encoder that converts key events into terminal escape sequences.
typedef struct GhosttyKeyEvent* 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.
typedef uint8_t GhosttyKittyKeyFlags |
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.
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
enum GhosttyKeyAction |
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) |
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.
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_MEMORY 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) |
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) |
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.
allocator | Pointer to the allocator to use for memory management, or NULL to use the default allocator |
encoder | Pointer to store the created encoder handle |
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).
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) |
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) |
GhosttyKeyAction ghostty_key_event_get_action | ( | GhosttyKeyEvent | event | ) |
Get the key action (press, release, repeat).
event | The key event handle, must not be NULL |
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 |
GhosttyMods ghostty_key_event_get_consumed_mods | ( | GhosttyKeyEvent | event | ) |
Get the consumed modifiers bitmask.
event | The key event handle, must not be NULL |
GhosttyKey ghostty_key_event_get_key | ( | GhosttyKeyEvent | event | ) |
Get the physical key code.
event | The key event handle, must not be NULL |
GhosttyMods ghostty_key_event_get_mods | ( | GhosttyKeyEvent | event | ) |
Get the modifier keys bitmask.
event | The key event handle, must not be NULL |
uint32_t ghostty_key_event_get_unshifted_codepoint | ( | GhosttyKeyEvent | event | ) |
Get the unshifted Unicode codepoint.
event | The key event handle, must not be NULL |
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) |
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.
allocator | 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 |
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 |
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 |
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 |
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 | The physical key code to set |
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 |
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 |
void ghostty_key_event_set_utf8 | ( | GhosttyKeyEvent | event, |
const char * | utf8, | ||
size_t | len ) |
Set the UTF-8 text generated by the key event.
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 |