From cd6c9e4d8c6a49eb91091c00b55e0f879c9220bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C5=99emysl=20Janouch?= Date: Wed, 12 Sep 2018 13:38:33 +0200 Subject: ht: add generated X11 keysym maps Now we can make sense of keysyms and translate them to text. --- ht/gen-unicode-map.sh | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100755 ht/gen-unicode-map.sh (limited to 'ht/gen-unicode-map.sh') diff --git a/ht/gen-unicode-map.sh b/ht/gen-unicode-map.sh new file mode 100755 index 0000000..7e94880 --- /dev/null +++ b/ht/gen-unicode-map.sh @@ -0,0 +1,49 @@ +#!/bin/sh +gofmt <= 0x20 && ks <= 0x7e) || (ks >= 0xa0 && ks <= 0xff) { + return rune(ks) + } + // Directly encoded 24-bit Unicode (going even above plane 16) + if (ks & 0xff000000) == 0x01000000 { + return rune(ks & 0x00ffffff) + } + + min, max := 0, len(keysymToRuneTable)-1 + for max >= min { + mid := (min + max) / 2 + if keysymToRuneTable[mid].keysym < ks { + min = mid + 1 + } else if keysymToRuneTable[mid].keysym > ks { + max = mid - 1 + } else { + return keysymToRuneTable[mid].unicode + } + } + return -1 +} + +var keysymToRuneTable = []struct{ + keysym xproto.Keysym + unicode rune +}{ +$(curl --silent --show-error --location \ + https://invisible-island.net/datafiles/release/xterm.tar.gz | \ +tar --wildcards -xzOf - 'xterm-*/unicode/keysym.map' | \ +sort | perl -lne ' + next unless /^(0x([0-9a-f]{4}))\s+U([0-9a-f]{4})\s*(?:\#\s*(.*))?$/; + my ($keysym, $ks, $unicode, $comment) = ($1, hex($2), $3, ($4 // "")); + print "{$keysym, 0x$unicode}, // $comment" + if $ks >= 0x100 && $unicode ne "0000"; +') +} +EOF -- cgit v1.2.3