From 9ec09b90c9bb023bb69a6b703ce4df40d397f5e6 Mon Sep 17 00:00:00 2001
From: Přemysl Janouch
Date: Sun, 24 Jul 2016 00:41:49 +0200
Subject: Make ASCII NUL imply Ctrl-Space instead of C-@
Seems mostly arbitrary.
---
termo.c | 10 +++++++++-
tests/02getkey.c | 11 ++++++++++-
2 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/termo.c b/termo.c
index 38caba2..953bc88 100644
--- a/termo.c
+++ b/termo.c
@@ -778,7 +778,15 @@ parse_multibyte (termo_t *tk, const unsigned char *bytes, size_t len,
static void
emit_codepoint (termo_t *tk, uint32_t codepoint, termo_key_t *key)
{
- if (codepoint < 0x20)
+ if (codepoint == 0)
+ {
+ // ASCII NUL = Ctrl-Space as well as Ctrl-@ but let's prefer
+ // the former to follow the behaviour of libtermkey
+ key->type = TERMO_TYPE_KEYSYM;
+ key->code.sym = TERMO_SYM_SPACE;
+ key->modifiers = TERMO_KEYMOD_CTRL;
+ }
+ else if (codepoint < 0x20)
{
// C0 range
key->code.codepoint = 0;
diff --git a/tests/02getkey.c b/tests/02getkey.c
index b36eb9e..a5443e2 100644
--- a/tests/02getkey.c
+++ b/tests/02getkey.c
@@ -7,7 +7,7 @@ main (int argc, char *argv[])
termo_t *tk;
termo_key_t key;
- plan_tests (38);
+ plan_tests (42);
tk = termo_new_abstract ("vt100", NULL, 0);
@@ -86,6 +86,15 @@ main (int argc, char *argv[])
is_int (key.modifiers, TERMO_KEYMOD_CTRL,
"key.modifiers after Ctrl-Escape");
+ termo_push_bytes (tk, "\0", 1);
+
+ is_int (termo_getkey (tk, &key), TERMO_RES_KEY,
+ "getkey yields RES_KEY after Ctrl-Space");
+
+ is_int (key.type, TERMO_TYPE_KEY, "key.type after Ctrl-Space");
+ is_int (key.code.codepoint, ' ', "key.code.codepoint after Ctrl-Space");
+ is_int (key.modifiers, TERMO_KEYMOD_CTRL, "key.modifiers after Ctrl-Space");
+
// Escape key in various amounts
termo_push_bytes (tk, "\x1b\x1b", 2);
--
cgit v1.2.3-70-g09d2