From 44029221e8423f1ca93470952542a0517a208d42 Mon Sep 17 00:00:00 2001 From: Pierre Le Marre Date: Mon, 18 Sep 2023 11:59:30 +0200 Subject: [PATCH] Interactive tools: Escape control character for Unicode output Currently the interactive tools print the string result of key strokes as it is, without any escape. This is especially annoying for trivial keysyms such as: Return, BackSpace and Escape. Fix this by displaying the Unicode code point notation (e.g U+000D for Return) for single control characters from the C0 set and DEL. This is a hack: ideally we would like to escape any non-printable character in the utf-8 string. --- tools/tools-common.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/tools/tools-common.c b/tools/tools-common.c index 63fce4e..a94466c 100644 --- a/tools/tools-common.c +++ b/tools/tools-common.c @@ -32,6 +32,7 @@ #include "config.h" +#include #include #include #include @@ -99,7 +100,17 @@ tools_print_keycode_state(struct xkb_state *state, xkb_compose_state_get_utf8(compose_state, s, sizeof(s)); else xkb_state_key_get_utf8(state, keycode, s, sizeof(s)); - printf("unicode [ %s ] ", s); + /* HACK: escape single control characters from C0 set using the + * Unicode codepoint convention. Ideally we would like to escape + * any non-printable character in the string. + */ + if (!*s) { + printf("unicode [ ] "); + } else if (strlen(s) == 1 && (*s <= 0x1F || *s == 0x7F)) { + printf("unicode [ U+%04hX ] ", *s); + } else { + printf("unicode [ %s ] ", s); + } layout = xkb_state_key_get_layout(state, keycode); printf("layout [ %s (%d) ] ",