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.
master
Pierre Le Marre 2023-09-18 11:59:30 +02:00 committed by Wismill
parent cf228acd26
commit 44029221e8
1 changed files with 12 additions and 1 deletions

View File

@ -32,6 +32,7 @@
#include "config.h" #include "config.h"
#include <ctype.h>
#include <errno.h> #include <errno.h>
#include <limits.h> #include <limits.h>
#include <fcntl.h> #include <fcntl.h>
@ -99,7 +100,17 @@ tools_print_keycode_state(struct xkb_state *state,
xkb_compose_state_get_utf8(compose_state, s, sizeof(s)); xkb_compose_state_get_utf8(compose_state, s, sizeof(s));
else else
xkb_state_key_get_utf8(state, keycode, s, sizeof(s)); 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); layout = xkb_state_key_get_layout(state, keycode);
printf("layout [ %s (%d) ] ", printf("layout [ %s (%d) ] ",