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.
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 <ctype.h>
#include <errno.h>
#include <limits.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));
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) ] ",