summaryrefslogtreecommitdiffstats
path: root/usr.bin/tmux/xterm-keys.c
diff options
context:
space:
mode:
authornicm <nicm@openbsd.org>2015-11-12 11:05:34 +0000
committernicm <nicm@openbsd.org>2015-11-12 11:05:34 +0000
commit885a46987fa37c3ab9f797b657cf591a414f800f (patch)
tree8affdbe66f542715691e2756b150ba5e8fd64eff /usr.bin/tmux/xterm-keys.c
parentcan just IFQ_DEQUEUE instead of POLL followed immediately by DEQUEUE (diff)
downloadwireguard-openbsd-885a46987fa37c3ab9f797b657cf591a414f800f.tar.xz
wireguard-openbsd-885a46987fa37c3ab9f797b657cf591a414f800f.zip
Support UTF-8 key bindings by expanding the key type from int to
uint64_t and converting UTF-8 to Unicode on input and the reverse on output. (This allows key bindings, there are still omissions - the largest being that the various prompts do not accept UTF-8.)
Diffstat (limited to 'usr.bin/tmux/xterm-keys.c')
-rw-r--r--usr.bin/tmux/xterm-keys.c23
1 files changed, 13 insertions, 10 deletions
diff --git a/usr.bin/tmux/xterm-keys.c b/usr.bin/tmux/xterm-keys.c
index 92a0a5dc0ce..7f8bc362812 100644
--- a/usr.bin/tmux/xterm-keys.c
+++ b/usr.bin/tmux/xterm-keys.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: xterm-keys.c,v 1.16 2015/08/30 15:43:40 nicm Exp $ */
+/* $OpenBSD: xterm-keys.c,v 1.17 2015/11/12 11:05:34 nicm Exp $ */
/*
* Copyright (c) 2009 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -40,11 +40,12 @@
* We accept any but always output the latter (it comes first in the table).
*/
-int xterm_keys_match(const char *, const char *, size_t, size_t *, u_int *);
-int xterm_keys_modifiers(const char *, size_t, size_t *, u_int *);
+int xterm_keys_match(const char *, const char *, size_t, size_t *,
+ key_code *);
+int xterm_keys_modifiers(const char *, size_t, size_t *, key_code *);
struct xterm_keys_entry {
- int key;
+ key_code key;
const char *template;
};
@@ -115,7 +116,7 @@ const struct xterm_keys_entry xterm_keys_table[] = {
*/
int
xterm_keys_match(const char *template, const char *buf, size_t len,
- size_t *size, u_int *modifiers)
+ size_t *size, key_code *modifiers)
{
size_t pos;
int retval;
@@ -148,7 +149,8 @@ xterm_keys_match(const char *template, const char *buf, size_t len,
/* Find modifiers from buffer. */
int
-xterm_keys_modifiers(const char *buf, size_t len, size_t *pos, u_int *modifiers)
+xterm_keys_modifiers(const char *buf, size_t len, size_t *pos,
+ key_code *modifiers)
{
u_int flags;
@@ -179,11 +181,12 @@ xterm_keys_modifiers(const char *buf, size_t len, size_t *pos, u_int *modifiers)
* key), -1 for not found, 1 for partial match.
*/
int
-xterm_keys_find(const char *buf, size_t len, size_t *size, int *key)
+xterm_keys_find(const char *buf, size_t len, size_t *size, key_code *key)
{
const struct xterm_keys_entry *entry;
- u_int i, modifiers;
+ u_int i;
int matched;
+ key_code modifiers;
for (i = 0; i < nitems(xterm_keys_table); i++) {
entry = &xterm_keys_table[i];
@@ -201,11 +204,11 @@ xterm_keys_find(const char *buf, size_t len, size_t *size, int *key)
/* Lookup a key number from the table. */
char *
-xterm_keys_lookup(int key)
+xterm_keys_lookup(key_code key)
{
const struct xterm_keys_entry *entry;
u_int i;
- int modifiers;
+ key_code modifiers;
char *out;
modifiers = 1;