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