ht: add generated X11 keysym maps
Now we can make sense of keysyms and translate them to text.
This commit is contained in:
49
ht/gen-keysyms.sh
Executable file
49
ht/gen-keysyms.sh
Executable file
@@ -0,0 +1,49 @@
|
||||
#!/bin/sh
|
||||
gofmt <<EOF | sed 's, *//$,,'
|
||||
// Code generated by running "go generate" in janouch.name/haven. DO NOT EDIT.
|
||||
|
||||
package $GOPACKAGE
|
||||
|
||||
import "janouch.name/haven/nexgb/xproto"
|
||||
|
||||
$(curl --silent --show-error \
|
||||
https://cgit.freedesktop.org/xorg/proto/x11proto/plain/keysymdef.h \
|
||||
https://cgit.freedesktop.org/xorg/proto/x11proto/plain/XF86keysym.h \
|
||||
| perl -lne '
|
||||
next unless /^\#define\s+
|
||||
(XF86)?(XK_)([a-zA-Z_0-9]+)\s+
|
||||
0x([0-9a-fA-F]+)\s*
|
||||
(?:\/\*\s*(.*?)\s*\*\/)?\s*
|
||||
$/x;
|
||||
|
||||
my ($name, $ident, $hex, $comment) =
|
||||
(($1 // "") . $3, ($1 // "") . $2 . $3, lc $4, ($5 // ""));
|
||||
|
||||
# They are already somewhat sorted in the source file.
|
||||
push @a, { hex => $hex, ident => $ident, comment => $comment };
|
||||
|
||||
$nametokeysym{$name} = $ident;
|
||||
|
||||
# All but the first name listed should be considered deprecated.
|
||||
$keysymtoname{$ident} = $name unless exists $seen{$hex};
|
||||
$seen{$hex}++;
|
||||
|
||||
END {
|
||||
print "const (";
|
||||
print "$_->{ident} = 0x$_->{hex} // $_->{comment}" for @a;
|
||||
print ")";
|
||||
|
||||
# Very large tables, should be an on-demand package :(
|
||||
|
||||
print "// KeysymToName maps X11 keysym constants to their names";
|
||||
print "var KeysymToName = map[xproto.Keysym]string{";
|
||||
print "$_: \"$keysymtoname{$_}\"," for sort keys %keysymtoname;
|
||||
print "}";
|
||||
|
||||
print "// NameToKeysym maps X11 keysym names to their constants";
|
||||
print "var NameToKeysym = map[string]xproto.Keysym{";
|
||||
print "\"$_\": $nametokeysym{$_}," for sort keys %nametokeysym;
|
||||
print "}";
|
||||
}
|
||||
')
|
||||
EOF
|
||||
Reference in New Issue
Block a user