#!/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