-/* $OpenBSD: input-keys.c,v 1.83 2021/04/09 07:02:00 nicm Exp $ */
+/* $OpenBSD: input-keys.c,v 1.84 2021/06/10 07:38:28 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
input_key_write(__func__, bev, &ud.data[0], 1);
return (0);
}
- if (justkey > 0x7f && justkey < KEYC_BASE) {
+ if (KEYC_IS_UNICODE(justkey)) {
if (key & KEYC_META)
input_key_write(__func__, bev, "\033", 1);
utf8_to_data(justkey, &ud);
-/* $OpenBSD: key-string.c,v 1.66 2021/06/10 07:21:09 nicm Exp $ */
+/* $OpenBSD: key-string.c,v 1.67 2021/06/10 07:38:28 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
}
/* Convert the standard control keys. */
- if (key < KEYC_BASE &&
+ if (key <= 127 &&
(modifiers & KEYC_CTRL) &&
strchr(other, key) == NULL &&
key != 9 &&
goto out;
}
- /* Is this a UTF-8 key? */
- if (key > 127 && key < KEYC_BASE) {
+ /* Is this a Unicode key? */
+ if (KEYC_IS_UNICODE(key)) {
utf8_to_data(key, &ud);
off = strlen(out);
memcpy(out + off, ud.data, ud.size);
-/* $OpenBSD: tmux.h,v 1.1106 2021/06/10 07:36:47 nicm Exp $ */
+/* $OpenBSD: tmux.h,v 1.1107 2021/06/10 07:38:28 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
#define VISUAL_ON 1
#define VISUAL_BOTH 2
-/* Special key codes. */
-#define KEYC_NONE 0x00ff000000000ULL
-#define KEYC_UNKNOWN 0x00fe000000000ULL
-#define KEYC_BASE 0x0001000000000ULL
-#define KEYC_USER 0x0002000000000ULL
+/* No key or unknown key. */
+#define KEYC_NONE 0x000ff000000000ULL
+#define KEYC_UNKNOWN 0x000fe000000000ULL
+
+/*
+ * Base for special (that is, not Unicode) keys. An enum must be at most a
+ * signed int, so these are based in the highest Unicode PUA.
+ */
+#define KEYC_BASE 0x0000000010e000ULL
+#define KEYC_USER 0x0000000010f000ULL
/* Key modifier bits. */
#define KEYC_META 0x00100000000000ULL
#define KEYC_NUSER 1000
/* Is this a mouse key? */
-#define KEYC_IS_MOUSE(key) (((key) & KEYC_MASK_KEY) >= KEYC_MOUSE && \
- ((key) & KEYC_MASK_KEY) < KEYC_BSPACE)
+#define KEYC_IS_MOUSE(key) \
+ (((key) & KEYC_MASK_KEY) >= KEYC_MOUSE && \
+ ((key) & KEYC_MASK_KEY) < KEYC_BSPACE)
+
+/* Is this a Unicode key? */
+#define KEYC_IS_UNICODE(key) \
+ (((key) & KEYC_MASK_KEY) > 0x7f && \
+ (((key) & KEYC_MASK_KEY) < KEYC_BASE || \
+ ((key) & KEYC_MASK_KEY) >= KEYC_BASE_END))
/* Multiple click timeout. */
#define KEYC_CLICK_TIMEOUT 300
{ #s "Border", KEYC_ ## name ## _BORDER }
/*
- * A single key. This can be ASCII or Unicode or one of the keys starting at
- * KEYC_BASE.
+ * A single key. This can be ASCII or Unicode or one of the keys between
+ * KEYC_BASE and KEYC_BASE_END.
*/
typedef unsigned long long key_code;
KEYC_KP_ENTER,
KEYC_KP_ZERO,
KEYC_KP_PERIOD,
+
+ /* End of special keys. */
+ KEYC_BASE_END
};
/* Termcap codes. */