2 * xkeysym.c: mapping from X keysyms to Unicode values
4 * The basic idea of this is shamelessly cribbed from xterm. The
5 * actual character data is generated from Markus Kuhn's proposed
6 * redraft of the X11 keysym mapping table, using the following
7 * piece of Perl/sh code:
9 wget -q -O - http://www.cl.cam.ac.uk/~mgk25/ucs/X11.keysyms | \
10 perl -ne '/^(\d+)\s+(\d+)\s+[\d\/]+\s+U\+([\dA-Fa-f]+)/ and' \
11 -e ' do { $a{$1 * 256+ $2} = hex $3; };' \
12 -e 'END { foreach $i (sort {$a <=> $b} keys %a) {' \
13 -e ' printf " {0x%x, 0x%x},\n", $i, $a{$i} } }' \
14 -e 'BEGIN { $a{0x13a4} = 0x20ac }'
16 * (The BEGIN clause inserts a mapping for the Euro sign which for
17 * some reason isn't in the list but xterm supports. *shrug*.)
24 * Currently nothing in here is above 0xFFFF, so I'll use
25 * `unsigned short' to save space.
27 unsigned short keysym;
28 unsigned short unicode;
31 static struct keysym keysyms[] = {
994 int keysym_to_unicode(int keysym)
1001 while (j - i >= 2) {
1003 if (keysyms[k].keysym == keysym)
1004 return keysyms[k].unicode;
1005 else if (keysyms[k].keysym < keysym)