aboutsummaryrefslogtreecommitdiff
path: root/termkey.h.in
diff options
context:
space:
mode:
Diffstat (limited to 'termkey.h.in')
-rw-r--r--termkey.h.in416
1 files changed, 217 insertions, 199 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)
-
-typedef enum {
- 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 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 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,
-
- /* et cetera ad nauseum */
- TERMKEY_N_SYMS
-} TermKeySym;
-
-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 */
-
- TERMKEY_TYPE_UNKNOWN_CSI = -1
-} TermKeyType;
-
-typedef enum {
- TERMKEY_RES_NONE,
- TERMKEY_RES_KEY,
- TERMKEY_RES_EOF,
- TERMKEY_RES_AGAIN,
- TERMKEY_RES_ERROR
-} TermKeyResult;
-
-typedef enum {
- TERMKEY_MOUSE_UNKNOWN,
- TERMKEY_MOUSE_PRESS,
- TERMKEY_MOUSE_DRAG,
- TERMKEY_MOUSE_RELEASE
-} TermKeyMouseEvent;
-
-enum {
- TERMKEY_KEYMOD_SHIFT = 1 << 0,
- TERMKEY_KEYMOD_ALT = 1 << 1,
- TERMKEY_KEYMOD_CTRL = 1 << 2
+ termkey_check_version (TERMKEY_VERSION_MAJOR, TERMKEY_VERSION_MINOR)
+
+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 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 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,
+
+ TERMKEY_N_SYMS
};
-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;
-
- int modifiers;
-
- /* Any Unicode character can be UTF-8 encoded in no more than 6 bytes, plus
- * terminating NUL */
- char utf8[7];
-} TermKeyKey;
-
-typedef struct TermKey TermKey;
-
-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 */
+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
};
-enum {
- TERMKEY_CANON_SPACESYMBOL = 1 << 0, /* Space is symbolic rather than Unicode */
- TERMKEY_CANON_DELBS = 1 << 1 /* Del is converted to Backspace */
+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
};
-void termkey_check_version(int major, int minor);
+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
+};
-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);
+enum
+{
+ TERMKEY_KEYMOD_SHIFT = 1 << 0,
+ TERMKEY_KEYMOD_ALT = 1 << 1,
+ TERMKEY_KEYMOD_CTRL = 1 << 2
+};
-int termkey_start(TermKey *tk);
-int termkey_stop(TermKey *tk);
-int termkey_is_started(TermKey *tk);
+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;
+
+ /* The raw multibyte sequence for the key */
+ char utf8[MB_LEN_MAX + 1];
+};
-int termkey_get_fd(TermKey *tk);
+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 */
+};
-int termkey_get_flags(TermKey *tk);
-void termkey_set_flags(TermKey *tk, int newflags);
+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);
-int termkey_get_waittime(TermKey *tk);
-void termkey_set_waittime(TermKey *tk, int msec);
+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_canonflags(TermKey *tk);
-void termkey_set_canonflags(TermKey *tk, int);
+int termkey_start (termkey_t *tk);
+int termkey_stop (termkey_t *tk);
+int termkey_is_started (termkey_t *tk);
-size_t termkey_get_buffer_size(TermKey *tk);
-int termkey_set_buffer_size(TermKey *tk, size_t size);
+int termkey_get_fd (termkey_t *tk);
-size_t termkey_get_buffer_remaining(TermKey *tk);
+int termkey_get_flags (termkey_t *tk);
+void termkey_set_flags (termkey_t *tk, int newflags);
-void termkey_canonicalise(TermKey *tk, TermKeyKey *key);
+int termkey_get_waittime (termkey_t *tk);
+void termkey_set_waittime (termkey_t *tk, int msec);
-TermKeyResult termkey_getkey(TermKey *tk, TermKeyKey *key);
-TermKeyResult termkey_getkey_force(TermKey *tk, TermKeyKey *key);
-TermKeyResult termkey_waitkey(TermKey *tk, TermKeyKey *key);
+int termkey_get_canonflags (termkey_t *tk);
+void termkey_set_canonflags (termkey_t *tk, int flags);
-TermKeyResult termkey_advisereadable(TermKey *tk);
+size_t termkey_get_buffer_size (termkey_t *tk);
+int termkey_set_buffer_size (termkey_t *tk, size_t size);
-size_t termkey_push_bytes(TermKey *tk, const char *bytes, size_t len);
+size_t termkey_get_buffer_remaining (termkey_t *tk);
-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);
+void termkey_canonicalise (termkey_t *tk, termkey_key_t *key);
-TermKeySym termkey_keyname2sym(TermKey *tk, const char *keyname);
+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);
-TermKeyResult termkey_interpret_mouse(TermKey *tk, const TermKeyKey *key, TermKeyMouseEvent *event, int *button, int *line, int *col);
+termkey_result_t termkey_advisereadable (termkey_t *tk);
-TermKeyResult termkey_interpret_position(TermKey *tk, const TermKeyKey *key, int *line, int *col);
+size_t termkey_push_bytes (termkey_t *tk, const char *bytes, size_t len);
-TermKeyResult termkey_interpret_modereport(TermKey *tk, const TermKeyKey *key, int *initial, int *mode, int *value);
+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_csi(TermKey *tk, const TermKeyKey *key, long args[], size_t *nargs, unsigned long *cmd);
+termkey_sym_t termkey_keyname2sym (termkey_t *tk, const char *keyname);
-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_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);
- TERMKEY_FORMAT_MOUSE_POS = 1 << 8 /* Include mouse position if relevant; @ col,line */
-} TermKeyFormat;
+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 */
+
+ 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