diff options
Diffstat (limited to 'ht/gen-keysyms.sh')
-rwxr-xr-x | ht/gen-keysyms.sh | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/ht/gen-keysyms.sh b/ht/gen-keysyms.sh new file mode 100755 index 0000000..064dec4 --- /dev/null +++ b/ht/gen-keysyms.sh @@ -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 |