-my $keysymh;
-open $keysymh, '<', 'data/keysymdef.h'
- or open $keysymh, '<', '/usr/include/X11/keysymdef.h'
- or die "Could not find keysym definitions: $!\n";
-
-my %keysym;
-while (readline $keysymh) {
- m{
- \A [#]define[ ]XK_ (?<name>[a-zA-Z_0-9]+)
- \h+ 0x(?<value>[0-9a-f]+)
- \h* [/][*] [\h(] U[+] (?<unicode>[0-9A-F]{4,6})
- }msx or next;
- $keysym{ $+{name} } = chr hex $+{unicode};
-}
+my $symname = eval {
+ open my $keysymh, '<', 'data/keysymdef.json' or die $!;
+ local $/;
+ return decode_json(readline $keysymh);
+} or die "Could not read keysym definitions: $@\n";