diff options
Diffstat (limited to 'termkey.h.in')
| -rw-r--r-- | termkey.h.in | 390 | 
1 files changed, 204 insertions, 186 deletions
| diff --git a/termkey.h.in b/termkey.h.in index 87c5e5b..e621eab 100644 --- a/termkey.h.in +++ b/termkey.h.in @@ -1,240 +1,258 @@ -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef GUARD_TERMKEY_H_ -#define GUARD_TERMKEY_H_ +#ifndef TERMKEY_H +#define TERMKEY_H  #include <stdint.h>  #include <stdlib.h> +#include <limits.h>  #define TERMKEY_VERSION_MAJOR @@VERSION_MAJOR@@  #define TERMKEY_VERSION_MINOR @@VERSION_MINOR@@  #define TERMKEY_CHECK_VERSION \ -        termkey_check_version(TERMKEY_VERSION_MAJOR, TERMKEY_VERSION_MINOR) +	termkey_check_version (TERMKEY_VERSION_MAJOR, TERMKEY_VERSION_MINOR) -typedef enum { -  TERMKEY_SYM_UNKNOWN = -1, -  TERMKEY_SYM_NONE = 0, +typedef enum termkey_sym termkey_sym_t; +enum termkey_sym +{ +	TERMKEY_SYM_UNKNOWN = -1, +	TERMKEY_SYM_NONE = 0, -  /* Special names in C0 */ -  TERMKEY_SYM_BACKSPACE, -  TERMKEY_SYM_TAB, -  TERMKEY_SYM_ENTER, -  TERMKEY_SYM_ESCAPE, +	/* Special names in C0 */ +	TERMKEY_SYM_BACKSPACE, +	TERMKEY_SYM_TAB, +	TERMKEY_SYM_ENTER, +	TERMKEY_SYM_ESCAPE, -  /* Special names in G0 */ -  TERMKEY_SYM_SPACE, -  TERMKEY_SYM_DEL, +	/* Special names in G0 */ +	TERMKEY_SYM_SPACE, +	TERMKEY_SYM_DEL, -  /* Special keys */ -  TERMKEY_SYM_UP, -  TERMKEY_SYM_DOWN, -  TERMKEY_SYM_LEFT, -  TERMKEY_SYM_RIGHT, -  TERMKEY_SYM_BEGIN, -  TERMKEY_SYM_FIND, -  TERMKEY_SYM_INSERT, -  TERMKEY_SYM_DELETE, -  TERMKEY_SYM_SELECT, -  TERMKEY_SYM_PAGEUP, -  TERMKEY_SYM_PAGEDOWN, -  TERMKEY_SYM_HOME, -  TERMKEY_SYM_END, +	/* Special keys */ +	TERMKEY_SYM_UP, +	TERMKEY_SYM_DOWN, +	TERMKEY_SYM_LEFT, +	TERMKEY_SYM_RIGHT, +	TERMKEY_SYM_BEGIN, +	TERMKEY_SYM_FIND, +	TERMKEY_SYM_INSERT, +	TERMKEY_SYM_DELETE, +	TERMKEY_SYM_SELECT, +	TERMKEY_SYM_PAGEUP, +	TERMKEY_SYM_PAGEDOWN, +	TERMKEY_SYM_HOME, +	TERMKEY_SYM_END, -  /* Special keys from terminfo */ -  TERMKEY_SYM_CANCEL, -  TERMKEY_SYM_CLEAR, -  TERMKEY_SYM_CLOSE, -  TERMKEY_SYM_COMMAND, -  TERMKEY_SYM_COPY, -  TERMKEY_SYM_EXIT, -  TERMKEY_SYM_HELP, -  TERMKEY_SYM_MARK, -  TERMKEY_SYM_MESSAGE, -  TERMKEY_SYM_MOVE, -  TERMKEY_SYM_OPEN, -  TERMKEY_SYM_OPTIONS, -  TERMKEY_SYM_PRINT, -  TERMKEY_SYM_REDO, -  TERMKEY_SYM_REFERENCE, -  TERMKEY_SYM_REFRESH, -  TERMKEY_SYM_REPLACE, -  TERMKEY_SYM_RESTART, -  TERMKEY_SYM_RESUME, -  TERMKEY_SYM_SAVE, -  TERMKEY_SYM_SUSPEND, -  TERMKEY_SYM_UNDO, +	/* Special keys from terminfo */ +	TERMKEY_SYM_CANCEL, +	TERMKEY_SYM_CLEAR, +	TERMKEY_SYM_CLOSE, +	TERMKEY_SYM_COMMAND, +	TERMKEY_SYM_COPY, +	TERMKEY_SYM_EXIT, +	TERMKEY_SYM_HELP, +	TERMKEY_SYM_MARK, +	TERMKEY_SYM_MESSAGE, +	TERMKEY_SYM_MOVE, +	TERMKEY_SYM_OPEN, +	TERMKEY_SYM_OPTIONS, +	TERMKEY_SYM_PRINT, +	TERMKEY_SYM_REDO, +	TERMKEY_SYM_REFERENCE, +	TERMKEY_SYM_REFRESH, +	TERMKEY_SYM_REPLACE, +	TERMKEY_SYM_RESTART, +	TERMKEY_SYM_RESUME, +	TERMKEY_SYM_SAVE, +	TERMKEY_SYM_SUSPEND, +	TERMKEY_SYM_UNDO, -  /* Numeric keypad special keys */ -  TERMKEY_SYM_KP0, -  TERMKEY_SYM_KP1, -  TERMKEY_SYM_KP2, -  TERMKEY_SYM_KP3, -  TERMKEY_SYM_KP4, -  TERMKEY_SYM_KP5, -  TERMKEY_SYM_KP6, -  TERMKEY_SYM_KP7, -  TERMKEY_SYM_KP8, -  TERMKEY_SYM_KP9, -  TERMKEY_SYM_KPENTER, -  TERMKEY_SYM_KPPLUS, -  TERMKEY_SYM_KPMINUS, -  TERMKEY_SYM_KPMULT, -  TERMKEY_SYM_KPDIV, -  TERMKEY_SYM_KPCOMMA, -  TERMKEY_SYM_KPPERIOD, -  TERMKEY_SYM_KPEQUALS, +	/* Numeric keypad special keys */ +	TERMKEY_SYM_KP0, +	TERMKEY_SYM_KP1, +	TERMKEY_SYM_KP2, +	TERMKEY_SYM_KP3, +	TERMKEY_SYM_KP4, +	TERMKEY_SYM_KP5, +	TERMKEY_SYM_KP6, +	TERMKEY_SYM_KP7, +	TERMKEY_SYM_KP8, +	TERMKEY_SYM_KP9, +	TERMKEY_SYM_KPENTER, +	TERMKEY_SYM_KPPLUS, +	TERMKEY_SYM_KPMINUS, +	TERMKEY_SYM_KPMULT, +	TERMKEY_SYM_KPDIV, +	TERMKEY_SYM_KPCOMMA, +	TERMKEY_SYM_KPPERIOD, +	TERMKEY_SYM_KPEQUALS, -  /* et cetera ad nauseum */ -  TERMKEY_N_SYMS -} TermKeySym; +	TERMKEY_N_SYMS +}; -typedef enum { -  TERMKEY_TYPE_UNICODE, -  TERMKEY_TYPE_FUNCTION, -  TERMKEY_TYPE_KEYSYM, -  TERMKEY_TYPE_MOUSE, -  TERMKEY_TYPE_POSITION, -  TERMKEY_TYPE_MODEREPORT, -  /* add other recognised types here */ +typedef enum termkey_type termkey_type_t; +enum termkey_type +{ +	TERMKEY_TYPE_UNICODE, +	TERMKEY_TYPE_FUNCTION, +	TERMKEY_TYPE_KEYSYM, +	TERMKEY_TYPE_MOUSE, +	TERMKEY_TYPE_POSITION, +	TERMKEY_TYPE_MODEREPORT, +	/* add other recognised types here */ -  TERMKEY_TYPE_UNKNOWN_CSI = -1 -} TermKeyType; +	TERMKEY_TYPE_UNKNOWN_CSI = -1 +}; -typedef enum { -  TERMKEY_RES_NONE, -  TERMKEY_RES_KEY, -  TERMKEY_RES_EOF, -  TERMKEY_RES_AGAIN, -  TERMKEY_RES_ERROR -} TermKeyResult; +typedef enum termkey_result termkey_result_t; +enum termkey_result +{ +	TERMKEY_RES_NONE, +	TERMKEY_RES_KEY, +	TERMKEY_RES_EOF, +	TERMKEY_RES_AGAIN, +	TERMKEY_RES_ERROR +}; -typedef enum { -  TERMKEY_MOUSE_UNKNOWN, -  TERMKEY_MOUSE_PRESS, -  TERMKEY_MOUSE_DRAG, -  TERMKEY_MOUSE_RELEASE -} TermKeyMouseEvent; +typedef enum termkey_mouse_event termkey_mouse_event_t; +enum termkey_mouse_event +{ +	TERMKEY_MOUSE_UNKNOWN, +	TERMKEY_MOUSE_PRESS, +	TERMKEY_MOUSE_DRAG, +	TERMKEY_MOUSE_RELEASE +}; -enum { -  TERMKEY_KEYMOD_SHIFT = 1 << 0, -  TERMKEY_KEYMOD_ALT   = 1 << 1, -  TERMKEY_KEYMOD_CTRL  = 1 << 2 +enum +{ +	TERMKEY_KEYMOD_SHIFT = 1 << 0, +	TERMKEY_KEYMOD_ALT   = 1 << 1, +	TERMKEY_KEYMOD_CTRL  = 1 << 2  }; -typedef struct { -  TermKeyType type; -  union { -    long       codepoint; /* TERMKEY_TYPE_UNICODE */ -    int        number;    /* TERMKEY_TYPE_FUNCTION */ -    TermKeySym sym;       /* TERMKEY_TYPE_KEYSYM */ -    char       mouse[4];  /* TERMKEY_TYPE_MOUSE */ -                          /* opaque. see termkey_interpret_mouse */ -  } code; +typedef struct termkey_key termkey_key_t; +struct termkey_key +{ +	termkey_type_t type; +	union +	{ +		long          codepoint; /* TERMKEY_TYPE_UNICODE */ +		int           number;    /* TERMKEY_TYPE_FUNCTION */ +		termkey_sym_t sym;       /* TERMKEY_TYPE_KEYSYM */ +		char          mouse[4];  /* TERMKEY_TYPE_MOUSE */ +								 /* opaque, see termkey_interpret_mouse() */ +	} code; -  int modifiers; +	int modifiers; -  /* Any Unicode character can be UTF-8 encoded in no more than 6 bytes, plus -   * terminating NUL */ -  char utf8[7]; -} TermKeyKey; +	/* The raw multibyte sequence for the key */ +	char utf8[MB_LEN_MAX + 1]; +}; -typedef struct TermKey TermKey; +typedef struct termkey termkey_t; -enum { -  TERMKEY_FLAG_NOINTERPRET = 1 << 0, /* Do not interpret C0//DEL codes if possible */ -  TERMKEY_FLAG_CONVERTKP   = 1 << 1, /* Convert KP codes to regular keypresses */ -  TERMKEY_FLAG_RAW         = 1 << 2, /* Input is raw bytes, not UTF-8 */ -  TERMKEY_FLAG_UTF8        = 1 << 3, /* Input is definitely UTF-8 */ -  TERMKEY_FLAG_NOTERMIOS   = 1 << 4, /* Do not make initial termios calls on construction */ -  TERMKEY_FLAG_SPACESYMBOL = 1 << 5, /* Sets TERMKEY_CANON_SPACESYMBOL */ -  TERMKEY_FLAG_CTRLC       = 1 << 6, /* Allow Ctrl-C to be read as normal, disabling SIGINT */ -  TERMKEY_FLAG_EINTR       = 1 << 7  /* Return ERROR on signal (EINTR) rather than retry */ +enum +{ +	TERMKEY_FLAG_NOINTERPRET = 1 << 0, /* Do not interpret C0//DEL codes if possible */ +	TERMKEY_FLAG_CONVERTKP   = 1 << 1, /* Convert KP codes to regular keypresses */ +	TERMKEY_FLAG_RAW         = 1 << 2, /* Input is raw bytes, not UTF-8 */ +	TERMKEY_FLAG_UTF8        = 1 << 3, /* Input is definitely UTF-8 */ +	TERMKEY_FLAG_NOTERMIOS   = 1 << 4, /* Do not make initial termios calls on construction */ +	TERMKEY_FLAG_SPACESYMBOL = 1 << 5, /* Sets TERMKEY_CANON_SPACESYMBOL */ +	TERMKEY_FLAG_CTRLC       = 1 << 6, /* Allow Ctrl-C to be read as normal, disabling SIGINT */ +	TERMKEY_FLAG_EINTR       = 1 << 7  /* Return ERROR on signal (EINTR) rather than retry */  }; -enum { -  TERMKEY_CANON_SPACESYMBOL = 1 << 0, /* Space is symbolic rather than Unicode */ -  TERMKEY_CANON_DELBS       = 1 << 1  /* Del is converted to Backspace */ +enum +{ +	TERMKEY_CANON_SPACESYMBOL = 1 << 0, /* Space is symbolic rather than Unicode */ +	TERMKEY_CANON_DELBS       = 1 << 1  /* Del is converted to Backspace */  }; -void termkey_check_version(int major, int minor); - -TermKey *termkey_new(int fd, int flags); -TermKey *termkey_new_abstract(const char *term, int flags); -void     termkey_free(TermKey *tk); -void     termkey_destroy(TermKey *tk); - -int termkey_start(TermKey *tk); -int termkey_stop(TermKey *tk); -int termkey_is_started(TermKey *tk); +void termkey_check_version (int major, int minor); -int termkey_get_fd(TermKey *tk); +termkey_t *termkey_new (int fd, int flags); +termkey_t *termkey_new_abstract (const char *term, int flags); +void termkey_free (termkey_t *tk); +void termkey_destroy (termkey_t *tk); -int  termkey_get_flags(TermKey *tk); -void termkey_set_flags(TermKey *tk, int newflags); +int termkey_start (termkey_t *tk); +int termkey_stop (termkey_t *tk); +int termkey_is_started (termkey_t *tk); -int  termkey_get_waittime(TermKey *tk); -void termkey_set_waittime(TermKey *tk, int msec); +int termkey_get_fd (termkey_t *tk); -int  termkey_get_canonflags(TermKey *tk); -void termkey_set_canonflags(TermKey *tk, int); +int termkey_get_flags (termkey_t *tk); +void termkey_set_flags (termkey_t *tk, int newflags); -size_t termkey_get_buffer_size(TermKey *tk); -int    termkey_set_buffer_size(TermKey *tk, size_t size); +int termkey_get_waittime (termkey_t *tk); +void termkey_set_waittime (termkey_t *tk, int msec); -size_t termkey_get_buffer_remaining(TermKey *tk); +int termkey_get_canonflags (termkey_t *tk); +void termkey_set_canonflags (termkey_t *tk, int flags); -void termkey_canonicalise(TermKey *tk, TermKeyKey *key); +size_t termkey_get_buffer_size (termkey_t *tk); +int termkey_set_buffer_size (termkey_t *tk, size_t size); -TermKeyResult termkey_getkey(TermKey *tk, TermKeyKey *key); -TermKeyResult termkey_getkey_force(TermKey *tk, TermKeyKey *key); -TermKeyResult termkey_waitkey(TermKey *tk, TermKeyKey *key); +size_t termkey_get_buffer_remaining (termkey_t *tk); -TermKeyResult termkey_advisereadable(TermKey *tk); +void termkey_canonicalise (termkey_t *tk, termkey_key_t *key); -size_t termkey_push_bytes(TermKey *tk, const char *bytes, size_t len); +termkey_result_t termkey_getkey (termkey_t *tk, termkey_key_t *key); +termkey_result_t termkey_getkey_force (termkey_t *tk, termkey_key_t *key); +termkey_result_t termkey_waitkey (termkey_t *tk, termkey_key_t *key); -TermKeySym termkey_register_keyname(TermKey *tk, TermKeySym sym, const char *name); -const char *termkey_get_keyname(TermKey *tk, TermKeySym sym); -const char *termkey_lookup_keyname(TermKey *tk, const char *str, TermKeySym *sym); +termkey_result_t termkey_advisereadable (termkey_t *tk); -TermKeySym termkey_keyname2sym(TermKey *tk, const char *keyname); +size_t termkey_push_bytes (termkey_t *tk, const char *bytes, size_t len); -TermKeyResult termkey_interpret_mouse(TermKey *tk, const TermKeyKey *key, TermKeyMouseEvent *event, int *button, int *line, int *col); +termkey_sym_t termkey_register_keyname (termkey_t *tk, +	termkey_sym_t sym, const char *name); +const char *termkey_get_keyname (termkey_t *tk, termkey_sym_t sym); +const char *termkey_lookup_keyname (termkey_t *tk, +	const char *str, termkey_sym_t *sym); -TermKeyResult termkey_interpret_position(TermKey *tk, const TermKeyKey *key, int *line, int *col); +termkey_sym_t termkey_keyname2sym (termkey_t *tk, const char *keyname); -TermKeyResult termkey_interpret_modereport(TermKey *tk, const TermKeyKey *key, int *initial, int *mode, int *value); +termkey_result_t termkey_interpret_mouse (termkey_t *tk, +	const termkey_key_t *key, termkey_mouse_event_t *event, +	int *button, int *line, int *col); +termkey_result_t termkey_interpret_position (termkey_t *tk, +	const termkey_key_t *key, int *line, int *col); +termkey_result_t termkey_interpret_modereport (termkey_t *tk, +	const termkey_key_t *key, int *initial, int *mode, int *value); +termkey_result_t termkey_interpret_csi (termkey_t *tk, +	const termkey_key_t *key, long args[], size_t *nargs, unsigned long *cmd); -TermKeyResult termkey_interpret_csi(TermKey *tk, const TermKeyKey *key, long args[], size_t *nargs, unsigned long *cmd); +typedef enum termkey_format termkey_format_t; +enum termkey_format +{ +	TERMKEY_FORMAT_LONGMOD     = 1 << 0, /* Shift-... instead of S-... */ +	TERMKEY_FORMAT_CARETCTRL   = 1 << 1, /* ^X instead of C-X */ +	TERMKEY_FORMAT_ALTISMETA   = 1 << 2, /* Meta- or M- instead of Alt- or A- */ +	TERMKEY_FORMAT_WRAPBRACKET = 1 << 3, /* Wrap special keys in brackets like <Escape> */ +	TERMKEY_FORMAT_SPACEMOD    = 1 << 4, /* M Foo instead of M-Foo */ +	TERMKEY_FORMAT_LOWERMOD    = 1 << 5, /* meta or m instead of Meta or M */ +	TERMKEY_FORMAT_LOWERSPACE  = 1 << 6, /* page down instead of PageDown */ -typedef enum { -  TERMKEY_FORMAT_LONGMOD     = 1 << 0, /* Shift-... instead of S-... */ -  TERMKEY_FORMAT_CARETCTRL   = 1 << 1, /* ^X instead of C-X */ -  TERMKEY_FORMAT_ALTISMETA   = 1 << 2, /* Meta- or M- instead of Alt- or A- */ -  TERMKEY_FORMAT_WRAPBRACKET = 1 << 3, /* Wrap special keys in brackets like <Escape> */ -  TERMKEY_FORMAT_SPACEMOD    = 1 << 4, /* M Foo instead of M-Foo */ -  TERMKEY_FORMAT_LOWERMOD    = 1 << 5, /* meta or m instead of Meta or M */ -  TERMKEY_FORMAT_LOWERSPACE  = 1 << 6, /* page down instead of PageDown */ - -  TERMKEY_FORMAT_MOUSE_POS   = 1 << 8  /* Include mouse position if relevant; @ col,line */ -} TermKeyFormat; +	TERMKEY_FORMAT_MOUSE_POS   = 1 << 8  /* Include mouse position if relevant; @ col,line */ +};  /* Some useful combinations */ -#define TERMKEY_FORMAT_VIM (TermKeyFormat)(TERMKEY_FORMAT_ALTISMETA|TERMKEY_FORMAT_WRAPBRACKET) -#define TERMKEY_FORMAT_URWID (TermKeyFormat)(TERMKEY_FORMAT_LONGMOD|TERMKEY_FORMAT_ALTISMETA| \ -          TERMKEY_FORMAT_LOWERMOD|TERMKEY_FORMAT_SPACEMOD|TERMKEY_FORMAT_LOWERSPACE) +#define TERMKEY_FORMAT_VIM (termkey_format_t) \ +	(TERMKEY_FORMAT_ALTISMETA | TERMKEY_FORMAT_WRAPBRACKET) +#define TERMKEY_FORMAT_URWID (termkey_format_t) \ +	(TERMKEY_FORMAT_LONGMOD | TERMKEY_FORMAT_ALTISMETA | \ +	 TERMKEY_FORMAT_LOWERMOD | TERMKEY_FORMAT_SPACEMOD | \ +	 TERMKEY_FORMAT_LOWERSPACE) -size_t      termkey_strfkey(TermKey *tk, char *buffer, size_t len, TermKeyKey *key, TermKeyFormat format); -const char *termkey_strpkey(TermKey *tk, const char *str, TermKeyKey *key, TermKeyFormat format); +size_t termkey_strfkey (termkey_t *tk, char *buffer, size_t len, +	termkey_key_t *key, termkey_format_t format); +const char *termkey_strpkey (termkey_t *tk, const char *str, +	termkey_key_t *key, termkey_format_t format); -int termkey_keycmp(TermKey *tk, const TermKeyKey *key1, const TermKeyKey *key2); +int termkey_keycmp (termkey_t *tk, +	const termkey_key_t *key1, const termkey_key_t *key2); -#endif +#endif  // ! TERMKEY_H -#ifdef __cplusplus -} -#endif | 
