#ifndef TERM_INPUT_TYPES_H #define TERM_INPUT_TYPES_H #include #include #include #include "term_types.h" #ifdef __cplusplus extern "C" { #endif enum term_key { TERM_KEY_NONE = 0, TERM_KEY_RETURN, TERM_KEY_BACKSPACE, TERM_KEY_TAB, TERM_KEY_ESCAPE, TERM_KEY_UP, TERM_KEY_DOWN, TERM_KEY_RIGHT, TERM_KEY_LEFT, TERM_KEY_HOME, TERM_KEY_END, TERM_KEY_PAGE_UP, TERM_KEY_PAGE_DOWN, TERM_KEY_INSERT, TERM_KEY_DELETE, TERM_KEY_F1, TERM_KEY_F2, TERM_KEY_F3, TERM_KEY_F4, TERM_KEY_F5, TERM_KEY_F6, TERM_KEY_F7, TERM_KEY_F8, TERM_KEY_F9, TERM_KEY_F10, TERM_KEY_F11, TERM_KEY_F12, TERM_KEY_F13, TERM_KEY_F14, TERM_KEY_F15, TERM_KEY_F16, TERM_KEY_F17, TERM_KEY_F18, TERM_KEY_F19, TERM_KEY_F20, TERM_KEY_F21, TERM_KEY_F22, TERM_KEY_F23, TERM_KEY_F24, TERM_KEY_F25, TERM_KEY_F26, TERM_KEY_F27, TERM_KEY_F28, TERM_KEY_F29, TERM_KEY_F30, TERM_KEY_F31, TERM_KEY_F32, TERM_KEY_F33, TERM_KEY_F34, TERM_KEY_F35, TERM_KEY_KP_0, TERM_KEY_KP_1, TERM_KEY_KP_2, TERM_KEY_KP_3, TERM_KEY_KP_4, TERM_KEY_KP_5, TERM_KEY_KP_6, TERM_KEY_KP_7, TERM_KEY_KP_8, TERM_KEY_KP_9, TERM_KEY_KP_DECIMAL, TERM_KEY_KP_ENTER, TERM_KEY_KP_ADD, TERM_KEY_KP_SUBTRACT, TERM_KEY_KP_MULTIPLY, TERM_KEY_KP_DIVIDE, TERM_KEY_KP_EQUAL, TERM_KEY_KP_SEPARATOR, TERM_KEY_KP_LEFT, TERM_KEY_KP_RIGHT, TERM_KEY_KP_UP, TERM_KEY_KP_DOWN, TERM_KEY_KP_PAGE_UP, TERM_KEY_KP_PAGE_DOWN, TERM_KEY_KP_HOME, TERM_KEY_KP_END, TERM_KEY_KP_INSERT, TERM_KEY_KP_DELETE, TERM_KEY_KP_BEGIN, TERM_KEY_CAPS_LOCK, TERM_KEY_SCROLL_LOCK, TERM_KEY_NUM_LOCK, TERM_KEY_PRINT_SCREEN, TERM_KEY_PAUSE, TERM_KEY_MENU, TERM_KEY_MEDIA_PLAY, TERM_KEY_MEDIA_PAUSE, TERM_KEY_MEDIA_STOP, TERM_KEY_MEDIA_FORWARD, TERM_KEY_MEDIA_REWIND, TERM_KEY_MEDIA_NEXT, TERM_KEY_MEDIA_PREV, TERM_KEY_MEDIA_RECORD, TERM_KEY_VOLUME_DOWN, TERM_KEY_VOLUME_UP, TERM_KEY_MUTE, TERM_KEY_LSHIFT, TERM_KEY_LCTRL, TERM_KEY_LALT, TERM_KEY_LSUPER, TERM_KEY_LHYPER, TERM_KEY_LMETA, TERM_KEY_RSHIFT, TERM_KEY_RCTRL, TERM_KEY_RALT, TERM_KEY_RSUPER, TERM_KEY_RHYPER, TERM_KEY_RMETA, TERM_KEY_ISO_LEVEL3_SHIFT, TERM_KEY_ISO_LEVEL5_SHIFT, TERM_KEY_COUNT }; enum term_mod { TERM_MOD_SHIFT = 1, TERM_MOD_ALT = 2, TERM_MOD_CTRL = 4, TERM_MOD_SUPER = 8, TERM_MOD_HYPER = 16, TERM_MOD_META = 32, TERM_MOD_CAPS = 64, TERM_MOD_NUM = 128, }; enum term_key_action { TERM_KEY_PRESS = 1, TERM_KEY_REPEAT = 2, TERM_KEY_RELEASE = 3, }; enum term_mouse_button { TERM_MOUSE_BUTTON_PRIMARY = 0, TERM_MOUSE_BUTTON_MIDDLE, TERM_MOUSE_BUTTON_SECONDARY, TERM_MOUSE_BUTTON_NONE, /* Extra buttons 8 through 11 in xterm mouse reporting (encoded as 128..131). */ TERM_MOUSE_BUTTON_EXTRA_1, TERM_MOUSE_BUTTON_EXTRA_2, TERM_MOUSE_BUTTON_EXTRA_3, TERM_MOUSE_BUTTON_EXTRA_4, TERM_MOUSE_WHEEL_UP = 16, TERM_MOUSE_WHEEL_DOWN, TERM_MOUSE_WHEEL_LEFT, TERM_MOUSE_WHEEL_RIGHT, }; enum term_mouse_event_kind { TERM_MOUSE_PRESS = 0, TERM_MOUSE_RELEASE, TERM_MOUSE_MOTION, TERM_MOUSE_SCROLL, TERM_MOUSE_LEAVE, }; struct term_key_event { enum term_key_action action; uint16_t key; /* enum term_key; TERM_KEY_NONE for a text key */ uint16_t keypad; /* the TERM_KEY_KP_* key when the key is on the keypad */ unsigned mods; /* enum term_mod */ uint32_t codepoint; /* the code point of the key without modifiers */ uint32_t shifted; /* the code point of the key with Shift */ uint32_t base; /* the code point of the key in the US layout */ uint32_t text; /* the code point the key types, or 0 */ bool text_deferred; /* an input method sends the text later */ }; struct term_mouse_event { struct term_vector2i pos; /* Grid cell coordinates (col, row) */ struct term_vector2i pixel; /* Absolute pixel position in terminal grid */ /* * Button identifier: * - Press and release: the button that changed state (TERM_MOUSE_BUTTON_*). * - Motion: the held button for drag events, or TERM_MOUSE_BUTTON_NONE for hover. * - Scroll: the wheel direction (TERM_MOUSE_WHEEL_*). */ int button; unsigned mods; int scroll_lines; float scroll_delta; enum term_mouse_event_kind kind; }; /* The keys that are down. An all-zero value has no keys down. */ struct term_keyboard_state { uint64_t down[(TERM_KEY_COUNT + 63) / 64]; }; /* Record a press, repeat, or release in s. */ TERM_API void term_keyboard_update(struct term_keyboard_state *s, const struct term_key_event *ev); TERM_API bool term_keyboard_key_down(const struct term_keyboard_state *s, enum term_key key); /* Kitty keyboard protocol flags, as in term_modes.keyboard. */ enum term_keyboard_flag { TERM_KEYBOARD_DISAMBIGUATE = 1, TERM_KEYBOARD_EVENT_TYPES = 2, TERM_KEYBOARD_ALTERNATE_KEYS = 4, TERM_KEYBOARD_ALL_KEYS = 8, TERM_KEYBOARD_ASSOCIATED_TEXT = 16, }; enum term_input_status { TERM_INPUT_UNHANDLED = 0, /* the terminal does not use the event */ TERM_INPUT_CONSUMED, /* the terminal uses the event but sends nothing */ TERM_INPUT_BYTES, /* send the len bytes in buf to the program */ TERM_INPUT_BUFFER_FULL, /* buf is too small; len is 0 */ }; struct term_input_result { size_t len; enum term_input_status status; }; #ifdef __cplusplus } #endif #endif /* TERM_INPUT_TYPES_H */