diff --git a/doc/message-registry.md b/doc/message-registry.md
index 69027be9f..dac417599 100644
--- a/doc/message-registry.md
+++ b/doc/message-registry.md
@@ -6,7 +6,7 @@ NOTE: This file has been generated automatically by “update-message-registry.p
-->
This page lists the warnings and errors generated by xkbcommon.
-There are currently 20 entries.
+There are currently 21 entries.
@todo The documentation of the log messages is a work in progress.
@@ -23,6 +23,7 @@ There are currently 20 entries.
| [XKB-305] | `non-base-group-name` | Warn if a group name was defined for group other than the first one | Warning |
| [XKB-312] | `unsupported-shift-level` | Warn when a shift level is not supported | Error |
| [XKB-461] | `conflicting-key-symbol` | Warn if there are conflicting keysyms while merging keys | Warning |
+| [XKB-489] | `numeric-keysym` | Warn on numeric keysym (other than 0-9) | Warning |
| [XKB-516] | `extra-symbols-ignored` | TODO: add description | Warning |
| [XKB-578] | `wrong-field-type` | Warn when a field has not the expected type | Error |
| [XKB-645] | `unknown-char-escape-sequence` | Warn on unknown escape sequence in string literal | Warning |
@@ -165,6 +166,53 @@ as numbers and as identifiers `LevelN`, where `N` is in the range (1..8).
SummaryWarn if there are conflicting keysyms while merging keys
+### XKB-489 – Numeric keysym {#XKB-489}
+
+
+ - Since
- 1.6.0
+ - Type
- Warning
+ - Summary
- Warn on numeric keysym (other than 0-9)
+
+
+Numeric keysyms are not human-friendly. Use the corresponding named keysym
+or Unicode keysym, if available.
+
+
+#### Examples
+
+
+ Hexadecimal keysym `0x1001ed0`
+
+**Error message:**
+
+```
+xkbcommon: WARNING: [XKB-489] numeric keysym "0x1001ed0"
+```
+
+**Fix:**
+
+
+
+
Before
+```c
+key
{ [ 0x1001ed0] };
+```
+
+
+
+
+
After
+```c
+// Preferred form: human-friendly
+key
{ [ Ocircumflexacute ] };
+// or
+key { [ U1ED0 ] };
+```
+
+
+
+
+
### XKB-516 – Extra symbols ignored {#XKB-516}
@@ -280,6 +328,7 @@ xkbcommon support the following escape sequences in string literals:
[XKB-305]: @ref XKB-305
[XKB-312]: @ref XKB-312
[XKB-461]: @ref XKB-461
+[XKB-489]: @ref XKB-489
[XKB-516]: @ref XKB-516
[XKB-578]: @ref XKB-578
[XKB-645]: @ref XKB-645
diff --git a/doc/message-registry.yaml b/doc/message-registry.yaml
index fea46585f..f7e0c2e17 100644
--- a/doc/message-registry.yaml
+++ b/doc/message-registry.yaml
@@ -100,6 +100,33 @@
added: ALWAYS
type: warning
description: "Warn if there are conflicting keysyms while merging keys"
+- id: "numeric-keysym"
+ code: 489
+ added: 1.6.0
+ type: warning
+ description: "Warn on numeric keysym (other than 0-9)"
+ details: |
+ Numeric keysyms are not human-friendly. Use the corresponding named keysym
+ or Unicode keysym, if available.
+ examples:
+ - name: Hexadecimal keysym `0x1001ed0`
+ description: |
+ **Error message:**
+
+ ```
+ xkbcommon: WARNING: [XKB-489] numeric keysym "0x1001ed0"
+ ```
+ before: |
+ ```c
+ key { [ 0x1001ed0] };
+ ```
+ after: |
+ ```c
+ // Preferred form: human-friendly
+ key { [ Ocircumflexacute ] };
+ // or
+ key { [ U1ED0 ] };
+ ```
- id: "extra-symbols-ignored"
code: 516
added: ALWAYS
diff --git a/src/messages-codes.h b/src/messages-codes.h
index 64a6177c7..1ba568c63 100644
--- a/src/messages-codes.h
+++ b/src/messages-codes.h
@@ -32,6 +32,8 @@ enum xkb_message_code {
XKB_ERROR_UNSUPPORTED_SHIFT_LEVEL = 312,
/** Warn if there are conflicting keysyms while merging keys */
XKB_WARNING_CONFLICTING_KEY_SYMBOL = 461,
+ /** Warn on numeric keysym (other than 0-9) */
+ XKB_WARNING_NUMERIC_KEYSYM = 489,
/** TODO: add description */
XKB_WARNING_EXTRA_SYMBOLS_IGNORED = 516,
/** Warn when a field has not the expected type */
diff --git a/src/xkbcomp/expr.c b/src/xkbcomp/expr.c
index f935ce6db..558fef3ef 100644
--- a/src/xkbcomp/expr.c
+++ b/src/xkbcomp/expr.c
@@ -673,6 +673,9 @@ ExprResolveKeySym(struct xkb_context *ctx, const ExprDef *expr,
}
if (val <= XKB_KEYSYM_MAX) {
+ log_warn_with_code(ctx, XKB_WARNING_NUMERIC_KEYSYM,
+ "numeric keysym \"0x%x\" (%d)",
+ (unsigned int) val, val);
*sym_rtrn = (xkb_keysym_t) val;
return true;
}
diff --git a/src/xkbcomp/parser.y b/src/xkbcomp/parser.y
index 1beb30bbe..e1226b1e4 100644
--- a/src/xkbcomp/parser.y
+++ b/src/xkbcomp/parser.y
@@ -765,6 +765,11 @@ KeySym : IDENT
);
$$ = XKB_KEY_NoSymbol;
}
+ parser_warn(
+ param, XKB_WARNING_NUMERIC_KEYSYM,
+ "numeric keysym \"0x%"PRIx64"\" (%"PRId64")",
+ $1, $1
+ );
}
}
;
diff --git a/tools/messages.c b/tools/messages.c
index 365792b25..abda073a6 100644
--- a/tools/messages.c
+++ b/tools/messages.c
@@ -47,6 +47,7 @@ static const struct xkb_message_entry xkb_messages[] = {
{XKB_WARNING_NON_BASE_GROUP_NAME, "Non base group name"},
{XKB_ERROR_UNSUPPORTED_SHIFT_LEVEL, "Unsupported shift level"},
{XKB_WARNING_CONFLICTING_KEY_SYMBOL, "Conflicting key symbol"},
+ {XKB_WARNING_NUMERIC_KEYSYM, "Numeric keysym"},
{XKB_WARNING_EXTRA_SYMBOLS_IGNORED, "Extra symbols ignored"},
{XKB_ERROR_WRONG_FIELD_TYPE, "Wrong field type"},
{XKB_WARNING_UNKNOWN_CHAR_ESCAPE_SEQUENCE, "Unknown char escape sequence"},