#ifndef FENRIR_TERMINAL_NATIVE_H #define FENRIR_TERMINAL_NATIVE_H #include #include #include typedef struct TerminalX TerminalX; typedef struct { int type, keycode, value; unsigned int state; unsigned long symbol, time; char text[128]; int length; } TerminalEvent; int terminal_pty(int *master, int *slave, int rows, int cols); int terminal_raw(int fd, struct termios *saved, int *flags); int terminal_restore(int fd, struct termios *saved, int flags); int terminal_size(int fd, int *rows, int *cols); int terminal_resize(int fd, int rows, int cols); int terminal_wait(int master, int input, int output, int xfd, int wake, int writing, int output_pending); VTerm *terminal_vterm(int rows, int cols); void terminal_vterm_free(VTerm *vt); uint64_t terminal_generation(VTerm *vt); typedef struct { uint32_t foreground, background, style; } TerminalAttribute; void terminal_cells(VTerm *vt, uint32_t *cells, TerminalAttribute *attributes, int count, int *x, int *y); int terminal_key(VTerm *vt, const TerminalEvent *event, char *bytes, int size); TerminalX *terminal_x_open(unsigned long window, int *error); int terminal_x_caps_lock(TerminalX *x, int enabled); int terminal_x_toggle_caps(TerminalX *x); int terminal_x_script_keys(TerminalX *x, const int *keys, int count); int terminal_x_update_keys(TerminalX *x, const int *keys, int count); void terminal_x_close(TerminalX *x); int terminal_x_fd(TerminalX *x); int terminal_x_down(TerminalX *x, int code); int terminal_x_keys_down(TerminalX *x); int terminal_x_pending(TerminalX *x); int terminal_x_state(TerminalX *x, int *active, int *numlock, int *capslock); int terminal_x_next(TerminalX *x, TerminalEvent *event); enum { TERMINAL_CAPTURE_INACTIVE = 5 }; // Zero means captured; positive values are X grab refusal statuses or // TERMINAL_CAPTURE_INACTIVE, distinct from GrabSuccess through GrabFrozen (0..4). int terminal_x_consume(TerminalX *x); void terminal_x_replay(TerminalX *x, unsigned long time); void terminal_x_release(TerminalX *x); int terminal_key_code(unsigned long symbol, int keycode); #endif