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.
#include <errno.h>
#include <limits.h>
#include <fcntl.h>
#include <errno.h>
#include <limits.h>
#include <fcntl.h>
xkb_compose_state_get_utf8(compose_state, s, sizeof(s));
else
xkb_state_key_get_utf8(state, keycode, s, sizeof(s));
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) ] ",
layout = xkb_state_key_get_layout(state, keycode);
printf("layout [ %s (%d) ] ",