aboutsummaryrefslogtreecommitdiff
path: root/termkey-internal.h
diff options
context:
space:
mode:
authorPaul LeoNerd Evans <leonerd@leonerd.org.uk>2008-10-08 00:12:41 +0100
committerPaul LeoNerd Evans <leonerd@leonerd.org.uk>2008-10-08 00:12:41 +0100
commitd46f72fc1af33a3f184bd1ffe4e3eb656ae5147d (patch)
treeb25f4fbcf853d7b809a5c8c67ebca19b6677df33 /termkey-internal.h
parent8407c53726309aeb7388fe8a60ede102aef623a6 (diff)
downloadtermo-d46f72fc1af33a3f184bd1ffe4e3eb656ae5147d.tar.gz
termo-d46f72fc1af33a3f184bd1ffe4e3eb656ae5147d.tar.xz
termo-d46f72fc1af33a3f184bd1ffe4e3eb656ae5147d.zip
Moved all of the C0 registration and 'do_codepoint' logic out of driver-csi back into termkey via another protected method 'emit_codepoint'
Diffstat (limited to 'termkey-internal.h')
-rw-r--r--termkey-internal.h22
1 files changed, 22 insertions, 0 deletions
diff --git a/termkey-internal.h b/termkey-internal.h
index 271e628..9abc43d 100644
--- a/termkey-internal.h
+++ b/termkey-internal.h
@@ -13,6 +13,13 @@ struct termkey_driver
termkey_result (*getkey)(termkey_t *tk, termkey_key *key);
};
+struct keyinfo {
+ termkey_type type;
+ termkey_keysym sym;
+ int modifier_mask;
+ int modifier_set;
+};
+
struct termkey {
int fd;
int flags;
@@ -31,6 +38,9 @@ struct termkey {
int nkeynames;
const char **keynames;
+ // There are 32 C0 codes
+ struct keyinfo c0[32];
+
struct termkey_driver driver;
void *driver_info;
@@ -38,9 +48,21 @@ struct termkey {
// want exported as real symbols in the library
struct {
void (*eat_bytes)(termkey_t *tk, size_t count);
+ void (*emit_codepoint)(termkey_t *tk, int codepoint, termkey_key *key);
} method;
};
extern struct termkey_driver termkey_driver_csi;
+// Keep this here for now since it's tiny
+static inline int utf8_seqlen(int codepoint)
+{
+ if(codepoint < 0x0000080) return 1;
+ if(codepoint < 0x0000800) return 2;
+ if(codepoint < 0x0010000) return 3;
+ if(codepoint < 0x0200000) return 4;
+ if(codepoint < 0x4000000) return 5;
+ return 6;
+}
+
#endif