GithubHelp home page GithubHelp logo

legionus / kbd Goto Github PK

View Code? Open in Web Editor NEW
82.0 9.0 39.0 9.43 MB

Mirror of https://git.kernel.org/pub/scm/linux/kernel/git/legion/kbd.git

Home Page: https://kbd-project.org

License: Other

Shell 4.34% C 65.96% Lex 1.67% Yacc 1.44% C++ 0.45% Makefile 2.36% M4 19.07% Perl 0.76% NASL 3.22% HTML 0.43% sed 0.03% BitBake 0.27%
kbd keyboard linux-console keymap loadkeys setfont linux

kbd's Introduction

KBD (Linux keyboard tools) CI

This package contains tools for managing Linux console (Linux console, virtual terminals, keyboard, etc.) – mainly, what they do is loading console fonts and keyboard maps.

This distribution contains no binaries - the sources depend on the kernel version - compile them yourself.

The home site of this package:

Mailing list

To protect subscribers from spam, the mailing list requires a subscription.

Bug reporting

Report problems with this package to the mailing list or directly to the Alexey Gladkov <[email protected]>.

Source code

The latest stable version of kbd can always be found on:

Web interface:

Versioning:

  • Standard releases: <major>.<minor>[.<maint>]

    • major -- fatal and deep changes;
    • minor -- typical release with new features;
    • maint -- bug fixes.
  • Development releases: <major>.<minor>-rc<N>

To summarize, the stable release is 2.1.0 while 2.0.9x is a pre-releases.

Git repository:

Git Branches: git branch -a

  • master branch

    • current development.
    • the source for stable releases when deemed ready.
  • for-master branch

    • unstable changes for master. These changes can be reversed or rolled back.

Tags: git tag

  • a new tag object is created for every release.
  • tag name: v<version>.
  • all tags are signed by the maintainer's PGP key.

See also:

NLS (PO translations)

PO files are maintained by: https://translationproject.org/domain/kbd.html

License

Kbd is licensed under the GNU General Public License (GPL), version 2, or at your option any later version.

kbd's People

Contributors

aakoskin avatar acperkins avatar adamwill avatar alexxed avatar alicaccs avatar andhe avatar anisse avatar arkdchst avatar asakovets avatar blp avatar caratorn avatar daandemeyer avatar dmage avatar doughdemon avatar eric-s-raymond avatar frno7 avatar kanavin avatar ldv-alt avatar legionus avatar mbfarah avatar michaelforney avatar myllynen avatar oskude avatar rbalint avatar schutte avatar servcubed avatar tocodeabluejay avatar vapier avatar vcrhonek avatar voins avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

kbd's Issues

There is no CapsLock indication of CapsLock key using Caps Lock LED on the keyboard while using plain TTY (such as Ctrl+Alt+F1)

Steps to reproduce:

  1. Have minimal Ubuntu 20.04 LTS installed with all default settings and minimal set of packages on the laptop or desktop with physical CapsLock / Caps Lock LED indicator on the case or keyboard.
  2. Boot the system using default settings
  3. Login to the system
  4. Press <Caps Lock> key, enter some letters in CAPITALS (while CapsLock LED is on)
  5. Press <Caps Lock> key again, enter some letters in lowercase (while CapsLock LED is off)

Expected results:

  • CapsLock key toggles CapsLock LED, the LED state indicates current CapsLock key function

Actual results:

  • CapsLock LED is always off

Downstream bug-report:

Feature Request: Te Reo Māori dvorak

There exist only 5 special characters in Māori - each of the vowels with an accentuation line overhead (to symolise a long/emphasised sound), these are called macrons. This alphabet is common to the Cook Islands also so it's of wider appeal than just New Zealand. How they deal with this elsewhere is to have the grave/tilde act as a modifier such that:

`+a = ā
`+e = ē
`+i = ī 
`+o = ō 
`+u = ū
`+A = Ā
`+E = Ē
`+I = Ī
`+O = Ō
`+U = Ū
`+`=`

In other implementations (I've seen on debian based systems) they simply use RightAlt as a modifier to get to a third keyboard layer. This would also be an acceptable implementation.

I've had a quick look around and it appears that all that's required is a file in kbd/data/keymaps/i386/dvorak/ called dvorak-mao.map or dvorak-mi.map it appears that you can simply import the standard dvorak.map, and make these modifications.

These characters are included as follows in ISO-8859-13 as follows:

0xC2    0x0100  #       LATIN CAPITAL LETTER A WITH MACRON
0xC7    0x0112  #       LATIN CAPITAL LETTER E WITH MACRON
0xCE    0x012A  #       LATIN CAPITAL LETTER I WITH MACRON
0xD4    0x014C  #       LATIN CAPITAL LETTER O WITH MACRON
0xDB    0x016A  #       LATIN CAPITAL LETTER U WITH MACRON
0xE2    0x0101  #       LATIN SMALL LETTER A WITH MACRON
0xE7    0x0113  #       LATIN SMALL LETTER E WITH MACRON
0xEE    0x012B  #       LATIN SMALL LETTER I WITH MACRON
0xF4    0x014D  #       LATIN SMALL LETTER O WITH MACRON
0xFB    0x016B  #       LATIN SMALL LETTER U WITH MACRON

Or they're a part of UTF-8 as follows:

CAPITAL LETTER A WITH MACRON | U+0100 | C4 80
SMALL   LETTER A WITH MACRON | U+0101 | C4 81
CAPITAL LETTER E WITH MACRON | U+0112 | C4 92
SMALL   LETTER E WITH MACRON | U+0113 | C4 93
CAPITAL LETTER I WITH MACRON | U+012A | C4 AA
SMALL   LETTER I WITH MACRON | U+012B | C4 AB
CAPITAL LETTER O WITH MACRON | U+014C | C5 8C
SMALL   LETTER O WITH MACRON | U+014D | C5 8D
CAPITAL LETTER U WITH MACRON | U+016A | C5 AA
SMALL   LETTER U WITH MACRON | U+016B | C5 AB

Sorry to dump this request here rather than make a contribution directly, keyboard mapping intricacies are a little beyond my knowledge (having read the dvorak-fr.map which has similar requirements) though this appears simple enough to implement for someone with the requisite know-how.

Reference materials

2.5.0: test suite is failing

Just stested new 2.5.0 and looks like test suite is failing in one unit.

+ cd kbd-2.5.0
+ /usr/bin/make -O -j48 V=1 VERBOSE=1 check
Making check in src
Making check in libcommon
make[2]: Nothing to be done for 'check'.
Making check in libkbdfile
make[2]: Nothing to be done for 'check'.
Making check in libkfont
make[2]: Nothing to be done for 'check'.
Making check in libkeymap
/usr/bin/make  check-am
make[3]: Nothing to be done for 'check-am'.
Making check in vlock
make[2]: Nothing to be done for 'check'.
make[2]: Nothing to be done for 'check-am'.
Making check in data
make[1]: Nothing to be done for 'check'.
Making check in po
make[1]: Nothing to be done for 'check'.
Making check in docs
Making check in man
Making check in man1
make[3]: Nothing to be done for 'check'.
Making check in man5
make[3]: Nothing to be done for 'check'.
Making check in man8
make[3]: Nothing to be done for 'check'.
make[3]: Nothing to be done for 'check-am'.
Making check in reference
make[3]: Nothing to be done for 'check-am'.
make[2]: Nothing to be done for 'check-am'.
Making check in tests
Making check in helpers
make[2]: Nothing to be done for 'check'.
Making check in libkbdfile
make[2]: Nothing to be done for 'check'.
Making check in libkeymap
make[2]: Nothing to be done for 'check'.
Making check in libtswrap
make[2]: Nothing to be done for 'check'.
/usr/bin/make  check-local
make[3]: Entering directory '/home/tkloczko/rpmbuild/BUILD/kbd-2.5.0/tests'
/bin/sh '/home/tkloczko/rpmbuild/BUILD/kbd-2.5.0/tests/testsuite'  --keywords=unittest
## --------------------- ##
## kbd 2.5.0 test suite. ##
## --------------------- ##

libkeymap unit tests

  1: test 01                                         ok
  2: test 02                                         ok
  3: test 03                                         ok
  4: test 04                                         ok
  5: test 05                                         ok
  6: test 06                                         ok
  7: test 07                                         ok
  8: test 08                                         ok
  9: test 09                                         ok
 10: test 10                                         ok
 11: test 11                                         ok
 12: test 12                                         ok
 13: test 13                                         ok
 14: test 14                                         ok
 15: test 15                                         ok
 16: test 16                                         ok
 17: test 17                                         ok
 18: test 18                                         ok
 19: test 19 (alt-is-meta)                           ok
 20: test 20 (bkeymap)                               ok
 21: test 21 (mktable)                               ok
 22: test 22 (fulltable numeric=1 ts=FULL_TABLE)     ok
 23: test 23 (fulltable numeric=0 ts=DEFAULT)        ok
 24: test 24 (fulltable numeric=0 ts=SEPARATE_LINES) ok
 25: binary keymap (us.map)                          ok
 26: binary keymap (pt-latin9.map)                   ok
 27: binary keymap (cz.map)                          FAILED (libkeymap.at:176)

libkbdfile unit tests

 28: test 01                                         ok
 29: test 02                                         ok
 30: test 03                                         ok
 31: test 04                                         ok
 32: test 05                                         ok
 33: test 06                                         ok
 34: test 07                                         ok
 35: test 08                                         ok
 36: test 09                                         ok
 37: test 10                                         ok
 38: test 11                                         ok
 39: test 12                                         ok
 40: test 13                                         ok

## ------------- ##
## Test results. ##
## ------------- ##

ERROR: All 40 tests were run,
1 failed unexpectedly.
## -------------------------- ##
## testsuite.log was created. ##
## -------------------------- ##

Please send `tests/testsuite.log' and all information you think might help:

   To: <[email protected]>
   Subject: [kbd 2.5.0] testsuite: 27 failed

You may investigate any problem if you feel able to do so, in which
case the test suite provides a good starting point.  Its output may
be found below `tests/testsuite.dir'.

make[3]: *** [Makefile:728: check-local] Error 1

Content of the tests/testsuite.log in attachment
testsuite.log.txt

Question: How to run as user

Hi,
im trying to run command with openvt from running X session. When i run:
openvt bash
i get:
openvt: Unable to open /dev/tty5: Permission denied
when i run:
sudo openvt bash
i end up running the bash as root. Ultimately i want to be able to run openvt xinit... as logged user.
This should be possible to do with:
sudo openvt -u bash
but then i get:
openvt: Couldn't find owner of current tty!
if i try:
sudo openvt -- sudo -i -u ${user} xinit ...
then the x will crash on not having access to the vt.

Is it possible to do this?

Dvorak german missing

Strange as it may seem, there is no german dvorak layout in the package.
I would see to that, but I'm not familiar with the format kbd uses.
If there's a hint on how to convert an existing german dvorak map, I'd be happy to help.

dumpkeys-bkeymap test fails on big-endian processors

We encountered a test failure on Gentoo Linux.

FAIL: dumpkeys-bkeymap
======================

++ readlink -ev .
+ cwd=/var/tmp/portage/sys-apps/kbd-2.2.0-r2/work/kbd-2.2.0/tests
+ cd /var/tmp/portage/sys-apps/kbd-2.2.0-r2/work/kbd-2.2.0/tests
+ rc=0
++ mktemp ./temp.XXXXXXXXX
+ temp=./temp.HK4tsKB7q
+ datadir=.
+ ./libkeymap-bkeymap ./../data/keymaps/i386/qwerty/defkeymap.map
+ cmp -s ./data/dumpkeys-bkeymap/bkeymap.bin ./temp.HK4tsKB7q
+ rc=1
+ '[' 1 '!=' 0 ']'
+ printf 'failed\n'
failed
+ exit 1
FAIL dumpkeys-bkeymap (exit status: 1)

This test dumps a keymap to a binary file, and compares it with some pre-generated reference data.

The binary data contains multi-byte integer values in the machine's native byte order.

The reference data appears to have been generated on a little-endian machine, so this test fails on big-endian machines.

See the Gentoo Linux bug report for more details.

https://bugs.gentoo.org/727822

us.map maps Right Alt to AltGr and Shift+Tab to Alt+Tab.

  • I have never seen a US layout keyboard with AltGr at the position of Right Alt. Using emacs ergonomically demands pressing two alt keys freely. GNU readline is an often-used program that also benefits from Right Alt.
  • I don't see a good reason to map Shift+Tab to Alt+Tab unless parts of keymaps were forgotten or neglected.

For now, I use my own keymap that inherits us.map and linux-with-two-alt-keys and maps Alt+Tab to Alt+Tab and Shift+Tab to Shift+Tab

include "us.map"
include "linux-with-two-alt-keys"

alt keycode 15 = Meta_Tab
shift keycode 15 = F26
string F26 = "\033[Z"

I propose mapping Right Alt to Alt and Shift+Tab to Esc[Z and Alt+Tab to Meta_Tab in us.map or a (modern) variant of us.map. Perhaps, it could be named us-english.map.

Incorrect acentuation pt-latin9

At the console, if I set keymap to pt-latin9, the characters accentuation will be wrong.
e.g. é would be displayed ´e
To correct this I need to change the keymap to pt-latin1

Add the "iberoamericano español" keymap

(feature request)

Hello, I have a friend from Spain who is learning to use Linux now. It's just that he's missing a very specific keymap called IberAmEs (iberoamerican español Keyboard Layout) that he's used to using.

I tried to create a keyboard layout of my own, but all my attempts failed (My distribution is Manjaro). So I decided to research which project is responsible for keyboard layouts in Linux and I got here.

Can you please add this layout? All the information I got about the layout is described on these two pages.

https://www.farah.cl/DistribucionesDeTeclado/IberAmEs/index_es.html
http://kbdlayout.info/IberAmEs/

setfont doesn't invoke gzip?

My Linux distribution (Alpine Linux) recently received an upgrade from kbd 2.0.4 to kbd 2.2.0. I noticed that 2.2.0 behaves a bit different in regards to file handling:

  • setfont ter-v16n.psf.gzBad input file size
  • setfont ter-v16n.psf → works
  • setfont /usr/share/consolefonts/ter-v16n.psf.gz → also works

The first setfont invocation definitely used to work with kbd 2.0.4. Is it possible that the decompressor (gzip) is not invoked for the first invocation for some reason and kbd tries to parse the gzip compressed data and fails? strace -f setfont ter-v16n.psf.gz seems to confirm this hypothesis: https://tpaste.us/NKjk

[Question] No information on how contribute.

I was reading the webpage and this mirror but I noticed there is no information available on how contribute.

Actually the page just point on cloning the repo and get the latest version but nothing more, and the mailist look abandoned.

So this raise question like

  • Is there a standard coding?
  • I send a patch to the mailist, a pull request here or a patch in a bugzilla (that either is not mentioned)?
  • Is there a concientrated place on where check abailable patches?

Could you either add that info (or at least a "contribute patch here <inser github/bugzilla/mailist>") for other that want contributing?

Build fails with error: unknown type name ‘YYSTYPE’

It works if I comment out this line:

#define YY_YY_Y_TAB_H_INCLUDED 1

Package versions:

[I] sys-devel/bison
     Installed versions:  3.3.2(13:42:42 2019.02.04.)(nls -examples -static -test)

[I] sys-devel/flex
     Installed versions:  2.6.4-r1(15:05:19 2017.12.05.)(nls -static -test ABI_MIPS="-n32 -n64 -o32" ABI_PPC="-32 -64" ABI_S390="-32 -64" ABI_X86="32 64 -x32")

[I] sys-devel/gcc
     Installed versions:  8.3.0(8.3.0)^s(22:40:53 2019.03.30.)(cxx fortran graphite multilib nls nptl openmp pch pie sanitize ssp vtv -altivec -debug -doc -fixed-point -go -hardened -jit -libssp -mpx -objc -objc++ -objc-gc -pgo -systemtap -test -vanilla)

Build log:

 * Package:    sys-apps/kbd-9999
 * Repository: local
 * USE:        abi_x86_64 amd64 elibc_glibc kernel_linux nls pam userland_GNU
 * FEATURES:   network-sandbox preserve-libs sandbox userpriv usersandbox
 * Package:    sys-apps/kbd-9999
 * Repository: local
 * USE:        abi_x86_64 amd64 elibc_glibc kernel_linux nls pam userland_GNU
 * FEATURES:   network-sandbox preserve-libs sandbox userpriv usersandbox
>>> Unpacking source...
 * Repository id: legionus_kbd.git
 * To override fetched repository properties, use:
 *   EGIT_OVERRIDE_REPO_LEGIONUS_KBD
 *   EGIT_OVERRIDE_BRANCH_LEGIONUS_KBD
 *   EGIT_OVERRIDE_COMMIT_LEGIONUS_KBD
 *   EGIT_OVERRIDE_COMMIT_DATE_LEGIONUS_KBD
 * 
 * Fetching https://github.com/legionus/kbd.git ...
git fetch https://github.com/legionus/kbd.git +refs/heads/master:refs/heads/master
git symbolic-ref refs/git-r3/sys-apps/kbd/0/__main__ refs/heads/master
 * Checking out https://github.com/legionus/kbd.git to /var/tmp/portage/sys-apps/kbd-9999/work/kbd-9999 ...
git checkout --quiet master
GIT update -->
   repository:               https://github.com/legionus/kbd.git
   at the commit:            08dc021d7226ad203f4b63f2c85131b4b4a115f7
>>> Source unpacked in /var/tmp/portage/sys-apps/kbd-9999/work
>>> Preparing source in /var/tmp/portage/sys-apps/kbd-9999/work/kbd-9999 ...
 * Running eautoreconf in '/var/tmp/portage/sys-apps/kbd-9999/work/kbd-9999' ...
 * Running autopoint --force ...
 [ ok ]
 * Running libtoolize --install --copy --force --automake ...
 [ ok ]
 * Running aclocal -I m4 ...
 [ ok ]
 * Running autoconf --force ...
 [ ok ]
 * Running autoheader ...
 [ ok ]
 * Running automake --add-missing --copy --force-missing ...
 [ ok ]
 * Running elibtoolize in: kbd-9999/
 * Running elibtoolize in: kbd-9999/config/
 *   Applying portage/1.2.0 patch ...
 *   Applying sed/1.5.6 patch ...
 *   Applying as-needed/2.4.3 patch ...
>>> Source prepared.
>>> Configuring source in /var/tmp/portage/sys-apps/kbd-9999/work/kbd-9999 ...
 * econf: updating kbd-9999/config/config.sub with /usr/share/gnuconfig/config.sub
 * econf: updating kbd-9999/config/config.guess with /usr/share/gnuconfig/config.guess
./configure --prefix=/usr --build=x86_64-pc-linux-gnu --host=x86_64-pc-linux-gnu --mandir=/usr/share/man --infodir=/usr/share/info --datadir=/usr/share --sysconfdir=/etc --localstatedir=/var/lib --disable-dependency-tracking --disable-silent-rules --docdir=/usr/share/doc/kbd-9999 --htmldir=/usr/share/doc/kbd-9999/html --libdir=/usr/lib64 --enable-nls --enable-vlock --disable-tests
checking for a BSD-compatible install... /usr/lib/portage/python3.7/ebuild-helpers/xattr/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking for x86_64-pc-linux-gnu-pkg-config... /usr/bin/x86_64-pc-linux-gnu-pkg-config
checking pkg-config is at least version 0.9.0... yes
checking whether to build with code coverage support... no
checking whether make supports nested variables... (cached) yes
checking for x86_64-pc-linux-gnu-gcc... x86_64-pc-linux-gnu-gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables... 
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether x86_64-pc-linux-gnu-gcc accepts -g... yes
checking for x86_64-pc-linux-gnu-gcc option to accept ISO C89... none needed
checking whether x86_64-pc-linux-gnu-gcc understands -c and -o together... yes
checking whether make supports the include directive... yes (GNU style)
checking dependency style of x86_64-pc-linux-gnu-gcc... none
checking for x86_64-pc-linux-gnu-gcc option to accept ISO C99... none needed
checking for bison... bison -y
checking for flex... flex
checking lex output file root... lex.yy
checking lex library... -lfl
checking whether yytext is a pointer... yes
checking for a sed that does not truncate output... /bin/sed
checking whether ln -s works... yes
checking whether make sets $(MAKE)... (cached) yes
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking for x86_64-pc-linux-gnu-ar... x86_64-pc-linux-gnu-ar
checking the archiver (x86_64-pc-linux-gnu-ar) interface... ar
checking how to print strings... printf
checking for a sed that does not truncate output... (cached) /bin/sed
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for fgrep... /bin/grep -F
checking for ld used by x86_64-pc-linux-gnu-gcc... /usr/x86_64-pc-linux-gnu/bin/ld
checking if the linker (/usr/x86_64-pc-linux-gnu/bin/ld) is GNU ld... yes
checking for BSD- or MS-compatible name lister (nm)... /usr/bin/x86_64-pc-linux-gnu-nm -B
checking the name lister (/usr/bin/x86_64-pc-linux-gnu-nm -B) interface... BSD nm
checking the maximum length of command line arguments... 1572864
checking how to convert x86_64-pc-linux-gnu file names to x86_64-pc-linux-gnu format... func_convert_file_noop
checking how to convert x86_64-pc-linux-gnu file names to toolchain format... func_convert_file_noop
checking for /usr/x86_64-pc-linux-gnu/bin/ld option to reload object files... -r
checking for x86_64-pc-linux-gnu-objdump... x86_64-pc-linux-gnu-objdump
checking how to recognize dependent libraries... pass_all
checking for x86_64-pc-linux-gnu-dlltool... no
checking for dlltool... no
checking how to associate runtime and link libraries... printf %s\n
checking for x86_64-pc-linux-gnu-ar... (cached) x86_64-pc-linux-gnu-ar
checking for archiver @FILE support... @
checking for x86_64-pc-linux-gnu-strip... x86_64-pc-linux-gnu-strip
checking for x86_64-pc-linux-gnu-ranlib... x86_64-pc-linux-gnu-ranlib
checking command to parse /usr/bin/x86_64-pc-linux-gnu-nm -B output from x86_64-pc-linux-gnu-gcc object... ok
checking for sysroot... no
checking for a working dd... /bin/dd
checking how to truncate binary pipes... /bin/dd bs=4096 count=1
checking for x86_64-pc-linux-gnu-mt... no
checking for mt... no
checking if : is a manifest tool... no
checking how to run the C preprocessor... x86_64-pc-linux-gnu-gcc -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking for dlfcn.h... yes
checking for objdir... .libs
checking if x86_64-pc-linux-gnu-gcc supports -fno-rtti -fno-exceptions... no
checking for x86_64-pc-linux-gnu-gcc option to produce PIC... -fPIC -DPIC
checking if x86_64-pc-linux-gnu-gcc PIC flag -fPIC -DPIC works... yes
checking if x86_64-pc-linux-gnu-gcc static flag -static works... yes
checking if x86_64-pc-linux-gnu-gcc supports -c -o file.o... yes
checking if x86_64-pc-linux-gnu-gcc supports -c -o file.o... (cached) yes
checking whether the x86_64-pc-linux-gnu-gcc linker (/usr/x86_64-pc-linux-gnu/bin/ld -m elf_x86_64) supports shared libraries... yes
checking whether -lc should be explicitly linked in... no
checking dynamic linker characteristics... GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking whether stripping libraries is possible... yes
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... yes
checking whether to build static libraries... yes
checking whether NLS is requested... yes
checking for msgfmt... /usr/bin/msgfmt
checking for gmsgfmt... /usr/bin/gmsgfmt
checking for xgettext... /usr/bin/xgettext
checking for msgmerge... /usr/bin/msgmerge
checking for ld used by GCC... /usr/x86_64-pc-linux-gnu/bin/ld -m elf_x86_64
checking if the linker (/usr/x86_64-pc-linux-gnu/bin/ld -m elf_x86_64) is GNU ld... yes
checking for shared library run path origin... done
checking whether NLS is requested... yes
checking for GNU gettext in libc... yes
checking whether to use NLS... yes
checking where the gettext function comes from... libc
checking for dirent.h that defines DIR... yes
checking for library containing opendir... none required
checking for ANSI C header files... (cached) yes
checking for sys/wait.h that is POSIX.1 compatible... yes
checking fcntl.h usability... yes
checking fcntl.h presence... yes
checking for fcntl.h... yes
checking libintl.h usability... yes
checking libintl.h presence... yes
checking for libintl.h... yes
checking locale.h usability... yes
checking locale.h presence... yes
checking for locale.h... yes
checking for memory.h... (cached) yes
checking for stdlib.h... (cached) yes
checking for string.h... (cached) yes
checking sys/file.h usability... yes
checking sys/file.h presence... yes
checking for sys/file.h... yes
checking sys/ioctl.h usability... yes
checking sys/ioctl.h presence... yes
checking for sys/ioctl.h... yes
checking termios.h usability... yes
checking termios.h presence... yes
checking for termios.h... yes
checking for unistd.h... (cached) yes
checking for an ANSI C-conforming const... yes
checking for inline... inline
checking for size_t... yes
checking whether struct tm is in sys/time.h or time.h... time.h
checking for uid_t in sys/types.h... yes
checking for unistd.h... (cached) yes
checking for working chown... yes
checking whether closedir returns void... no
checking for pid_t... yes
checking vfork.h usability... no
checking vfork.h presence... no
checking for vfork.h... no
checking for fork... yes
checking for vfork... yes
checking for working fork... yes
checking for working vfork... (cached) yes
checking whether x86_64-pc-linux-gnu-gcc needs -traditional... no
checking return type of signal handlers... void
checking whether lstat correctly handles trailing slash... yes
checking whether stat accepts an empty string... no
checking for alarm... yes
checking for memset... yes
checking for setlocale... yes
checking for strcasecmp... yes
checking for strchr... yes
checking for strdup... yes
checking for strerror... yes
checking for strspn... yes
checking for strstr... yes
checking for strtol... yes
checking for strtoul... yes
checking for setpgrp... yes
checking for malloc... yes
checking for realloc... yes
checking if x86_64-pc-linux-gnu-gcc supports -Waggregate-return flag... yes
checking if x86_64-pc-linux-gnu-gcc supports -Wall flag... yes
checking if x86_64-pc-linux-gnu-gcc supports -Wcast-align flag... yes
checking if x86_64-pc-linux-gnu-gcc supports -Wconversion flag... yes
checking if x86_64-pc-linux-gnu-gcc supports -Wdisabled-optimization flag... yes
checking if x86_64-pc-linux-gnu-gcc supports -Wextra flag... yes
checking if x86_64-pc-linux-gnu-gcc supports -Wmissing-declarations flag... yes
checking if x86_64-pc-linux-gnu-gcc supports -Wmissing-format-attribute flag... yes
checking if x86_64-pc-linux-gnu-gcc supports -Wmissing-noreturn flag... yes
checking if x86_64-pc-linux-gnu-gcc supports -Wmissing-prototypes flag... yes
checking if x86_64-pc-linux-gnu-gcc supports -Wredundant-decls flag... yes
checking if x86_64-pc-linux-gnu-gcc supports -Wshadow flag... yes
checking if x86_64-pc-linux-gnu-gcc supports -Wstrict-prototypes flag... yes
checking if x86_64-pc-linux-gnu-gcc supports -Wwrite-strings flag... yes
checking for pam_start in -lpam... yes
checking security/pam_appl.h usability... yes
checking security/pam_appl.h presence... yes
checking for security/pam_appl.h... yes
checking for misc_conv in -lpam_misc... yes
checking security/pam_misc.h usability... yes
checking security/pam_misc.h presence... yes
checking for security/pam_misc.h... yes
checking for doxygen... yes
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating Makefile
config.status: creating data/Makefile
config.status: creating docs/Makefile
config.status: creating docs/man/Makefile
config.status: creating docs/man/man1/Makefile
config.status: creating docs/man/man1/dumpkeys.1
config.status: creating docs/man/man1/loadkeys.1
config.status: creating docs/man/man1misc/Makefile
config.status: creating docs/man/man5/Makefile
config.status: creating docs/man/man8/Makefile
config.status: creating docs/man/man8/loadunimap.8
config.status: creating docs/man/man8/mapscrn.8
config.status: creating docs/man/man8/setfont.8
config.status: creating docs/man/man8misc/Makefile
config.status: creating docs/reference/Makefile
config.status: creating docs/reference/libkeymap/Makefile
config.status: creating po/Makefile.in
config.status: WARNING:  'po/Makefile.in.in' seems to ignore the --datarootdir setting
config.status: creating src/Makefile
config.status: creating src/libcommon/Makefile
config.status: creating src/libkbdfile/Makefile
config.status: creating src/libkeymap/Makefile
config.status: creating src/vlock/Makefile
config.status: creating tests/Makefile
config.status: creating config.h
config.status: executing depfiles commands
config.status: executing libtool commands
config.status: executing default-1 commands
config.status: creating po/POTFILES
config.status: creating po/Makefile

	kbd 2.0.4
	======

	prefix:			/usr
	libdir:			/usr/lib64
	bindir:			${exec_prefix}/bin
	datadir:		/usr/share

	compiler:		x86_64-pc-linux-gnu-gcc
	cflags:			-g -O2 -D_FORTIFY_SOURCE=2 -Waggregate-return -Wall -Wcast-align -Wconversion -Wdisabled-optimization -Wextra -Wmissing-declarations -Wmissing-format-attribute -Wmissing-noreturn -Wmissing-prototypes -Wredundant-decls -Wshadow -Wstrict-prototypes -Wwrite-strings

	{get,set}keycodes:	yes
	resizecons:		yes
	optional progs:		no
	vlock:			yes
	libkbdfile:		no
	libkeymap:		no

>>> Source configured.
>>> Compiling source in /var/tmp/portage/sys-apps/kbd-9999/work/kbd-9999 ...
make -j1 
make  all-recursive
make[1]: Entering directory '/var/tmp/portage/sys-apps/kbd-9999/work/kbd-9999'
Making all in src
make[2]: Entering directory '/var/tmp/portage/sys-apps/kbd-9999/work/kbd-9999/src'
Making all in libcommon
make[3]: Entering directory '/var/tmp/portage/sys-apps/kbd-9999/work/kbd-9999/src/libcommon'
x86_64-pc-linux-gnu-gcc -DHAVE_CONFIG_H -I. -I../..     -g -O2 -D_FORTIFY_SOURCE=2 -Waggregate-return -Wall -Wcast-align -Wconversion -Wdisabled-optimization -Wextra -Wmissing-declarations -Wmissing-format-attribute -Wmissing-noreturn -Wmissing-prototypes -Wredundant-decls -Wshadow -Wstrict-prototypes -Wwrite-strings -c -o getfd.o getfd.c
x86_64-pc-linux-gnu-gcc -DHAVE_CONFIG_H -I. -I../..     -g -O2 -D_FORTIFY_SOURCE=2 -Waggregate-return -Wall -Wcast-align -Wconversion -Wdisabled-optimization -Wextra -Wmissing-declarations -Wmissing-format-attribute -Wmissing-noreturn -Wmissing-prototypes -Wredundant-decls -Wshadow -Wstrict-prototypes -Wwrite-strings -c -o error.o error.c
x86_64-pc-linux-gnu-gcc -DHAVE_CONFIG_H -I. -I../..     -g -O2 -D_FORTIFY_SOURCE=2 -Waggregate-return -Wall -Wcast-align -Wconversion -Wdisabled-optimization -Wextra -Wmissing-declarations -Wmissing-format-attribute -Wmissing-noreturn -Wmissing-prototypes -Wredundant-decls -Wshadow -Wstrict-prototypes -Wwrite-strings -c -o version.o version.c
x86_64-pc-linux-gnu-gcc -DHAVE_CONFIG_H -I. -I../..     -g -O2 -D_FORTIFY_SOURCE=2 -Waggregate-return -Wall -Wcast-align -Wconversion -Wdisabled-optimization -Wextra -Wmissing-declarations -Wmissing-format-attribute -Wmissing-noreturn -Wmissing-prototypes -Wredundant-decls -Wshadow -Wstrict-prototypes -Wwrite-strings -c -o xmalloc.o xmalloc.c
rm -f libcommon.a
x86_64-pc-linux-gnu-ar cru libcommon.a getfd.o error.o version.o xmalloc.o 
x86_64-pc-linux-gnu-ranlib libcommon.a
make[3]: Leaving directory '/var/tmp/portage/sys-apps/kbd-9999/work/kbd-9999/src/libcommon'
Making all in libkbdfile
make[3]: Entering directory '/var/tmp/portage/sys-apps/kbd-9999/work/kbd-9999/src/libkbdfile'
/bin/sh ../../libtool  --tag=CC   --mode=compile x86_64-pc-linux-gnu-gcc -DHAVE_CONFIG_H -I. -I../..   -I. -I. -I./.. -I./.. -I./../libcommon -I./../libcommon -DDATADIR=\"/usr/share\" -DLOCALEDIR=\"/usr/share/locale\" -U_GNU_SOURCE -funit-at-a-time   -g -O2 -D_FORTIFY_SOURCE=2 -Waggregate-return -Wall -Wcast-align -Wconversion -Wdisabled-optimization -Wextra -Wmissing-declarations -Wmissing-format-attribute -Wmissing-noreturn -Wmissing-prototypes -Wredundant-decls -Wshadow -Wstrict-prototypes -Wwrite-strings -c -o init.lo init.c
libtool: compile:  x86_64-pc-linux-gnu-gcc -DHAVE_CONFIG_H -I. -I../.. -I. -I. -I./.. -I./.. -I./../libcommon -I./../libcommon -DDATADIR=\"/usr/share\" -DLOCALEDIR=\"/usr/share/locale\" -U_GNU_SOURCE -funit-at-a-time -g -O2 -D_FORTIFY_SOURCE=2 -Waggregate-return -Wall -Wcast-align -Wconversion -Wdisabled-optimization -Wextra -Wmissing-declarations -Wmissing-format-attribute -Wmissing-noreturn -Wmissing-prototypes -Wredundant-decls -Wshadow -Wstrict-prototypes -Wwrite-strings -c init.c  -fPIC -DPIC -o .libs/init.o
libtool: compile:  x86_64-pc-linux-gnu-gcc -DHAVE_CONFIG_H -I. -I../.. -I. -I. -I./.. -I./.. -I./../libcommon -I./../libcommon -DDATADIR=\"/usr/share\" -DLOCALEDIR=\"/usr/share/locale\" -U_GNU_SOURCE -funit-at-a-time -g -O2 -D_FORTIFY_SOURCE=2 -Waggregate-return -Wall -Wcast-align -Wconversion -Wdisabled-optimization -Wextra -Wmissing-declarations -Wmissing-format-attribute -Wmissing-noreturn -Wmissing-prototypes -Wredundant-decls -Wshadow -Wstrict-prototypes -Wwrite-strings -c init.c -o init.o >/dev/null 2>&1
/bin/sh ../../libtool  --tag=CC   --mode=compile x86_64-pc-linux-gnu-gcc -DHAVE_CONFIG_H -I. -I../..   -I. -I. -I./.. -I./.. -I./../libcommon -I./../libcommon -DDATADIR=\"/usr/share\" -DLOCALEDIR=\"/usr/share/locale\" -U_GNU_SOURCE -funit-at-a-time   -g -O2 -D_FORTIFY_SOURCE=2 -Waggregate-return -Wall -Wcast-align -Wconversion -Wdisabled-optimization -Wextra -Wmissing-declarations -Wmissing-format-attribute -Wmissing-noreturn -Wmissing-prototypes -Wredundant-decls -Wshadow -Wstrict-prototypes -Wwrite-strings -c -o kbdfile.lo kbdfile.c
libtool: compile:  x86_64-pc-linux-gnu-gcc -DHAVE_CONFIG_H -I. -I../.. -I. -I. -I./.. -I./.. -I./../libcommon -I./../libcommon -DDATADIR=\"/usr/share\" -DLOCALEDIR=\"/usr/share/locale\" -U_GNU_SOURCE -funit-at-a-time -g -O2 -D_FORTIFY_SOURCE=2 -Waggregate-return -Wall -Wcast-align -Wconversion -Wdisabled-optimization -Wextra -Wmissing-declarations -Wmissing-format-attribute -Wmissing-noreturn -Wmissing-prototypes -Wredundant-decls -Wshadow -Wstrict-prototypes -Wwrite-strings -c kbdfile.c  -fPIC -DPIC -o .libs/kbdfile.o
libtool: compile:  x86_64-pc-linux-gnu-gcc -DHAVE_CONFIG_H -I. -I../.. -I. -I. -I./.. -I./.. -I./../libcommon -I./../libcommon -DDATADIR=\"/usr/share\" -DLOCALEDIR=\"/usr/share/locale\" -U_GNU_SOURCE -funit-at-a-time -g -O2 -D_FORTIFY_SOURCE=2 -Waggregate-return -Wall -Wcast-align -Wconversion -Wdisabled-optimization -Wextra -Wmissing-declarations -Wmissing-format-attribute -Wmissing-noreturn -Wmissing-prototypes -Wredundant-decls -Wshadow -Wstrict-prototypes -Wwrite-strings -c kbdfile.c -o kbdfile.o >/dev/null 2>&1
/bin/sh ../../libtool  --tag=CC   --mode=link x86_64-pc-linux-gnu-gcc  -g -O2 -D_FORTIFY_SOURCE=2 -Waggregate-return -Wall -Wcast-align -Wconversion -Wdisabled-optimization -Wextra -Wmissing-declarations -Wmissing-format-attribute -Wmissing-noreturn -Wmissing-prototypes -Wredundant-decls -Wshadow -Wstrict-prototypes -Wwrite-strings  -Wl,-O1 -Wl,--as-needed -o libkbdfile.la   init.lo kbdfile.lo  
libtool: link: x86_64-pc-linux-gnu-ar cru .libs/libkbdfile.a .libs/init.o .libs/kbdfile.o 
libtool: link: x86_64-pc-linux-gnu-ranlib .libs/libkbdfile.a
libtool: link: ( cd ".libs" && rm -f "libkbdfile.la" && ln -s "../libkbdfile.la" "libkbdfile.la" )
make[3]: Leaving directory '/var/tmp/portage/sys-apps/kbd-9999/work/kbd-9999/src/libkbdfile'
Making all in libkeymap
make[3]: Entering directory '/var/tmp/portage/sys-apps/kbd-9999/work/kbd-9999/src/libkeymap'
/bin/sh ../../config/ylwrap parser.y y.tab.c parser.c y.tab.h `echo parser.c | sed -e s/cc$/hh/ -e s/cpp$/hpp/ -e s/cxx$/hxx/ -e s/c++$/h++/ -e s/c$/h/` y.output parser.output -- bison -y  
/var/tmp/portage/sys-apps/kbd-9999/work/kbd-9999/src/libkeymap/parser.y:27.1-5: warning: POSIX Yacc does not support %code [-Wyacc]
 %code requires {
 ^~~~~
/var/tmp/portage/sys-apps/kbd-9999/work/kbd-9999/src/libkeymap/parser.y:41.1-9: warning: POSIX Yacc does not support %language [-Wyacc]
 %language "C"
 ^~~~~~~~~
/var/tmp/portage/sys-apps/kbd-9999/work/kbd-9999/src/libkeymap/parser.y:41.11-13: warning: POSIX Yacc does not support string literals [-Wyacc]
 %language "C"
           ^~~
/var/tmp/portage/sys-apps/kbd-9999/work/kbd-9999/src/libkeymap/parser.y:42.1-5: warning: POSIX Yacc does not support %yacc [-Wyacc]
 %yacc
 ^~~~~
/var/tmp/portage/sys-apps/kbd-9999/work/kbd-9999/src/libkeymap/parser.y:42.1-5: warning: duplicate directive [-Wother]
 %yacc
 ^~~~~
<command line>:1:                                                                   previous declaration
/var/tmp/portage/sys-apps/kbd-9999/work/kbd-9999/src/libkeymap/parser.y:43.1-8: warning: POSIX Yacc does not support %defines [-Wyacc]
 %defines
 ^~~~~~~~
/var/tmp/portage/sys-apps/kbd-9999/work/kbd-9999/src/libkeymap/parser.y:45.1-14: warning: POSIX Yacc does not support %error-verbose [-Wyacc]
 %error-verbose
 ^~~~~~~~~~~~~~
/var/tmp/portage/sys-apps/kbd-9999/work/kbd-9999/src/libkeymap/parser.y:45.1-14: warning: deprecated directive, use ‘%define parse.error verbose’ [-Wdeprecated]
 %error-verbose
 ^~~~~~~~~~~~~~
/var/tmp/portage/sys-apps/kbd-9999/work/kbd-9999/src/libkeymap/parser.y:48.1-7: warning: POSIX Yacc does not support %define [-Wyacc]
 %define api.pure
 ^~~~~~~
/var/tmp/portage/sys-apps/kbd-9999/work/kbd-9999/src/libkeymap/parser.y: warning: fix-its can be applied.  Rerun with option '--update'. [-Wother]
updating parser.h
/bin/sh ../../config/ylwrap analyze.l lex.yy.c analyze.c -- flex --header-file=/var/tmp/portage/sys-apps/kbd-9999/work/kbd-9999/src/libkeymap/analyze.h 
../../contrib/gen_charset_syms.pl -n latin1_syms -s 160 <../../data/consoletrans/8859-1_to_uni.trans >./syms.latin1.h
../../contrib/gen_charset_syms.pl -n latin2_syms -s 160 <../../data/consoletrans/8859-2_to_uni.trans >./syms.latin2.h
../../contrib/gen_charset_syms.pl -n latin3_syms -s 160 <../../data/consoletrans/8859-3_to_uni.trans >./syms.latin3.h
../../contrib/gen_charset_syms.pl -n latin4_syms -s 160 <../../data/consoletrans/8859-4_to_uni.trans >./syms.latin4.h
../../contrib/gen_charset_syms.pl -n iso8859_5_syms -s 160 <../../data/consoletrans/8859-5_to_uni.trans >./syms.iso8859_5.h
../../contrib/gen_charset_syms.pl -n iso8859_7_syms -s 160 <../../data/consoletrans/8859-7_to_uni.trans >./syms.iso8859_7.h
../../contrib/gen_charset_syms.pl -n iso8859_8_syms -s 160 <../../data/consoletrans/8859-8_to_uni.trans >./syms.iso8859_8.h
../../contrib/gen_charset_syms.pl -n iso8859_9_syms -s 160 <../../data/consoletrans/8859-9_to_uni.trans >./syms.iso8859_9.h
../../contrib/gen_charset_syms.pl -n iso8859_15_syms -s 160 <../../data/consoletrans/8859-15_to_uni.trans >./syms.iso8859_15.h
../../contrib/gen_charset_syms.pl -n cp1250_syms -s 128 <../../data/consoletrans/cp1250_to_uni.trans >./syms.cp1250.h
../../contrib/gen_charset_syms.pl -n koi8_syms -s 128 <../../data/consoletrans/koi8-u_to_uni.trans >./syms.koi8.h
make  all-am
make[4]: Entering directory '/var/tmp/portage/sys-apps/kbd-9999/work/kbd-9999/src/libkeymap'
/bin/sh ../../libtool  --tag=CC   --mode=compile x86_64-pc-linux-gnu-gcc -DHAVE_CONFIG_H -I. -I../..   -I. -I. -I./.. -I./.. -I./../libcommon -I./../libcommon -I./../libkbdfile -I./../libkbdfile -DDATADIR=\"/usr/share\" -DLOCALEDIR=\"/usr/share/locale\" -U_GNU_SOURCE -funit-at-a-time   -g -O2 -D_FORTIFY_SOURCE=2 -Waggregate-return -Wall -Wcast-align -Wconversion -Wdisabled-optimization -Wextra -Wmissing-declarations -Wmissing-format-attribute -Wmissing-noreturn -Wmissing-prototypes -Wredundant-decls -Wshadow -Wstrict-prototypes -Wwrite-strings -c -o array.lo array.c
libtool: compile:  x86_64-pc-linux-gnu-gcc -DHAVE_CONFIG_H -I. -I../.. -I. -I. -I./.. -I./.. -I./../libcommon -I./../libcommon -I./../libkbdfile -I./../libkbdfile -DDATADIR=\"/usr/share\" -DLOCALEDIR=\"/usr/share/locale\" -U_GNU_SOURCE -funit-at-a-time -g -O2 -D_FORTIFY_SOURCE=2 -Waggregate-return -Wall -Wcast-align -Wconversion -Wdisabled-optimization -Wextra -Wmissing-declarations -Wmissing-format-attribute -Wmissing-noreturn -Wmissing-prototypes -Wredundant-decls -Wshadow -Wstrict-prototypes -Wwrite-strings -c array.c  -fPIC -DPIC -o .libs/array.o
libtool: compile:  x86_64-pc-linux-gnu-gcc -DHAVE_CONFIG_H -I. -I../.. -I. -I. -I./.. -I./.. -I./../libcommon -I./../libcommon -I./../libkbdfile -I./../libkbdfile -DDATADIR=\"/usr/share\" -DLOCALEDIR=\"/usr/share/locale\" -U_GNU_SOURCE -funit-at-a-time -g -O2 -D_FORTIFY_SOURCE=2 -Waggregate-return -Wall -Wcast-align -Wconversion -Wdisabled-optimization -Wextra -Wmissing-declarations -Wmissing-format-attribute -Wmissing-noreturn -Wmissing-prototypes -Wredundant-decls -Wshadow -Wstrict-prototypes -Wwrite-strings -c array.c -o array.o >/dev/null 2>&1
/bin/sh ../../libtool  --tag=CC   --mode=compile x86_64-pc-linux-gnu-gcc -DHAVE_CONFIG_H -I. -I../..   -I. -I. -I./.. -I./.. -I./../libcommon -I./../libcommon -I./../libkbdfile -I./../libkbdfile -DDATADIR=\"/usr/share\" -DLOCALEDIR=\"/usr/share/locale\" -U_GNU_SOURCE -funit-at-a-time   -g -O2 -D_FORTIFY_SOURCE=2 -Waggregate-return -Wall -Wcast-align -Wconversion -Wdisabled-optimization -Wextra -Wmissing-declarations -Wmissing-format-attribute -Wmissing-noreturn -Wmissing-prototypes -Wredundant-decls -Wshadow -Wstrict-prototypes -Wwrite-strings -c -o common.lo common.c
libtool: compile:  x86_64-pc-linux-gnu-gcc -DHAVE_CONFIG_H -I. -I../.. -I. -I. -I./.. -I./.. -I./../libcommon -I./../libcommon -I./../libkbdfile -I./../libkbdfile -DDATADIR=\"/usr/share\" -DLOCALEDIR=\"/usr/share/locale\" -U_GNU_SOURCE -funit-at-a-time -g -O2 -D_FORTIFY_SOURCE=2 -Waggregate-return -Wall -Wcast-align -Wconversion -Wdisabled-optimization -Wextra -Wmissing-declarations -Wmissing-format-attribute -Wmissing-noreturn -Wmissing-prototypes -Wredundant-decls -Wshadow -Wstrict-prototypes -Wwrite-strings -c common.c  -fPIC -DPIC -o .libs/common.o
libtool: compile:  x86_64-pc-linux-gnu-gcc -DHAVE_CONFIG_H -I. -I../.. -I. -I. -I./.. -I./.. -I./../libcommon -I./../libcommon -I./../libkbdfile -I./../libkbdfile -DDATADIR=\"/usr/share\" -DLOCALEDIR=\"/usr/share/locale\" -U_GNU_SOURCE -funit-at-a-time -g -O2 -D_FORTIFY_SOURCE=2 -Waggregate-return -Wall -Wcast-align -Wconversion -Wdisabled-optimization -Wextra -Wmissing-declarations -Wmissing-format-attribute -Wmissing-noreturn -Wmissing-prototypes -Wredundant-decls -Wshadow -Wstrict-prototypes -Wwrite-strings -c common.c -o common.o >/dev/null 2>&1
/bin/sh ../../libtool  --tag=CC   --mode=compile x86_64-pc-linux-gnu-gcc -DHAVE_CONFIG_H -I. -I../..   -I. -I. -I./.. -I./.. -I./../libcommon -I./../libcommon -I./../libkbdfile -I./../libkbdfile -DDATADIR=\"/usr/share\" -DLOCALEDIR=\"/usr/share/locale\" -U_GNU_SOURCE -funit-at-a-time   -g -O2 -D_FORTIFY_SOURCE=2 -Waggregate-return -Wall -Wcast-align -Wconversion -Wdisabled-optimization -Wextra -Wmissing-declarations -Wmissing-format-attribute -Wmissing-noreturn -Wmissing-prototypes -Wredundant-decls -Wshadow -Wstrict-prototypes -Wwrite-strings -c -o kernel.lo kernel.c
libtool: compile:  x86_64-pc-linux-gnu-gcc -DHAVE_CONFIG_H -I. -I../.. -I. -I. -I./.. -I./.. -I./../libcommon -I./../libcommon -I./../libkbdfile -I./../libkbdfile -DDATADIR=\"/usr/share\" -DLOCALEDIR=\"/usr/share/locale\" -U_GNU_SOURCE -funit-at-a-time -g -O2 -D_FORTIFY_SOURCE=2 -Waggregate-return -Wall -Wcast-align -Wconversion -Wdisabled-optimization -Wextra -Wmissing-declarations -Wmissing-format-attribute -Wmissing-noreturn -Wmissing-prototypes -Wredundant-decls -Wshadow -Wstrict-prototypes -Wwrite-strings -c kernel.c  -fPIC -DPIC -o .libs/kernel.o
libtool: compile:  x86_64-pc-linux-gnu-gcc -DHAVE_CONFIG_H -I. -I../.. -I. -I. -I./.. -I./.. -I./../libcommon -I./../libcommon -I./../libkbdfile -I./../libkbdfile -DDATADIR=\"/usr/share\" -DLOCALEDIR=\"/usr/share/locale\" -U_GNU_SOURCE -funit-at-a-time -g -O2 -D_FORTIFY_SOURCE=2 -Waggregate-return -Wall -Wcast-align -Wconversion -Wdisabled-optimization -Wextra -Wmissing-declarations -Wmissing-format-attribute -Wmissing-noreturn -Wmissing-prototypes -Wredundant-decls -Wshadow -Wstrict-prototypes -Wwrite-strings -c kernel.c -o kernel.o >/dev/null 2>&1
/bin/sh ../../libtool  --tag=CC   --mode=compile x86_64-pc-linux-gnu-gcc -DHAVE_CONFIG_H -I. -I../..   -I. -I. -I./.. -I./.. -I./../libcommon -I./../libcommon -I./../libkbdfile -I./../libkbdfile -DDATADIR=\"/usr/share\" -DLOCALEDIR=\"/usr/share/locale\" -U_GNU_SOURCE -funit-at-a-time   -g -O2 -D_FORTIFY_SOURCE=2 -Waggregate-return -Wall -Wcast-align -Wconversion -Wdisabled-optimization -Wextra -Wmissing-declarations -Wmissing-format-attribute -Wmissing-noreturn -Wmissing-prototypes -Wredundant-decls -Wshadow -Wstrict-prototypes -Wwrite-strings -c -o dump.lo dump.c
libtool: compile:  x86_64-pc-linux-gnu-gcc -DHAVE_CONFIG_H -I. -I../.. -I. -I. -I./.. -I./.. -I./../libcommon -I./../libcommon -I./../libkbdfile -I./../libkbdfile -DDATADIR=\"/usr/share\" -DLOCALEDIR=\"/usr/share/locale\" -U_GNU_SOURCE -funit-at-a-time -g -O2 -D_FORTIFY_SOURCE=2 -Waggregate-return -Wall -Wcast-align -Wconversion -Wdisabled-optimization -Wextra -Wmissing-declarations -Wmissing-format-attribute -Wmissing-noreturn -Wmissing-prototypes -Wredundant-decls -Wshadow -Wstrict-prototypes -Wwrite-strings -c dump.c  -fPIC -DPIC -o .libs/dump.o
libtool: compile:  x86_64-pc-linux-gnu-gcc -DHAVE_CONFIG_H -I. -I../.. -I. -I. -I./.. -I./.. -I./../libcommon -I./../libcommon -I./../libkbdfile -I./../libkbdfile -DDATADIR=\"/usr/share\" -DLOCALEDIR=\"/usr/share/locale\" -U_GNU_SOURCE -funit-at-a-time -g -O2 -D_FORTIFY_SOURCE=2 -Waggregate-return -Wall -Wcast-align -Wconversion -Wdisabled-optimization -Wextra -Wmissing-declarations -Wmissing-format-attribute -Wmissing-noreturn -Wmissing-prototypes -Wredundant-decls -Wshadow -Wstrict-prototypes -Wwrite-strings -c dump.c -o dump.o >/dev/null 2>&1
/bin/sh ../../libtool  --tag=CC   --mode=compile x86_64-pc-linux-gnu-gcc -DHAVE_CONFIG_H -I. -I../..   -I. -I. -I./.. -I./.. -I./../libcommon -I./../libcommon -I./../libkbdfile -I./../libkbdfile -DDATADIR=\"/usr/share\" -DLOCALEDIR=\"/usr/share/locale\" -U_GNU_SOURCE -funit-at-a-time   -g -O2 -D_FORTIFY_SOURCE=2 -Waggregate-return -Wall -Wcast-align -Wconversion -Wdisabled-optimization -Wextra -Wmissing-declarations -Wmissing-format-attribute -Wmissing-noreturn -Wmissing-prototypes -Wredundant-decls -Wshadow -Wstrict-prototypes -Wwrite-strings -c -o kmap.lo kmap.c
libtool: compile:  x86_64-pc-linux-gnu-gcc -DHAVE_CONFIG_H -I. -I../.. -I. -I. -I./.. -I./.. -I./../libcommon -I./../libcommon -I./../libkbdfile -I./../libkbdfile -DDATADIR=\"/usr/share\" -DLOCALEDIR=\"/usr/share/locale\" -U_GNU_SOURCE -funit-at-a-time -g -O2 -D_FORTIFY_SOURCE=2 -Waggregate-return -Wall -Wcast-align -Wconversion -Wdisabled-optimization -Wextra -Wmissing-declarations -Wmissing-format-attribute -Wmissing-noreturn -Wmissing-prototypes -Wredundant-decls -Wshadow -Wstrict-prototypes -Wwrite-strings -c kmap.c  -fPIC -DPIC -o .libs/kmap.o
libtool: compile:  x86_64-pc-linux-gnu-gcc -DHAVE_CONFIG_H -I. -I../.. -I. -I. -I./.. -I./.. -I./../libcommon -I./../libcommon -I./../libkbdfile -I./../libkbdfile -DDATADIR=\"/usr/share\" -DLOCALEDIR=\"/usr/share/locale\" -U_GNU_SOURCE -funit-at-a-time -g -O2 -D_FORTIFY_SOURCE=2 -Waggregate-return -Wall -Wcast-align -Wconversion -Wdisabled-optimization -Wextra -Wmissing-declarations -Wmissing-format-attribute -Wmissing-noreturn -Wmissing-prototypes -Wredundant-decls -Wshadow -Wstrict-prototypes -Wwrite-strings -c kmap.c -o kmap.o >/dev/null 2>&1
/bin/sh ../../libtool  --tag=CC   --mode=compile x86_64-pc-linux-gnu-gcc -DHAVE_CONFIG_H -I. -I../..   -I. -I. -I./.. -I./.. -I./../libcommon -I./../libcommon -I./../libkbdfile -I./../libkbdfile -DDATADIR=\"/usr/share\" -DLOCALEDIR=\"/usr/share/locale\" -U_GNU_SOURCE -funit-at-a-time   -g -O2 -D_FORTIFY_SOURCE=2 -Waggregate-return -Wall -Wcast-align -Wconversion -Wdisabled-optimization -Wextra -Wmissing-declarations -Wmissing-format-attribute -Wmissing-noreturn -Wmissing-prototypes -Wredundant-decls -Wshadow -Wstrict-prototypes -Wwrite-strings -c -o diacr.lo diacr.c
libtool: compile:  x86_64-pc-linux-gnu-gcc -DHAVE_CONFIG_H -I. -I../.. -I. -I. -I./.. -I./.. -I./../libcommon -I./../libcommon -I./../libkbdfile -I./../libkbdfile -DDATADIR=\"/usr/share\" -DLOCALEDIR=\"/usr/share/locale\" -U_GNU_SOURCE -funit-at-a-time -g -O2 -D_FORTIFY_SOURCE=2 -Waggregate-return -Wall -Wcast-align -Wconversion -Wdisabled-optimization -Wextra -Wmissing-declarations -Wmissing-format-attribute -Wmissing-noreturn -Wmissing-prototypes -Wredundant-decls -Wshadow -Wstrict-prototypes -Wwrite-strings -c diacr.c  -fPIC -DPIC -o .libs/diacr.o
libtool: compile:  x86_64-pc-linux-gnu-gcc -DHAVE_CONFIG_H -I. -I../.. -I. -I. -I./.. -I./.. -I./../libcommon -I./../libcommon -I./../libkbdfile -I./../libkbdfile -DDATADIR=\"/usr/share\" -DLOCALEDIR=\"/usr/share/locale\" -U_GNU_SOURCE -funit-at-a-time -g -O2 -D_FORTIFY_SOURCE=2 -Waggregate-return -Wall -Wcast-align -Wconversion -Wdisabled-optimization -Wextra -Wmissing-declarations -Wmissing-format-attribute -Wmissing-noreturn -Wmissing-prototypes -Wredundant-decls -Wshadow -Wstrict-prototypes -Wwrite-strings -c diacr.c -o diacr.o >/dev/null 2>&1
/bin/sh ../../libtool  --tag=CC   --mode=compile x86_64-pc-linux-gnu-gcc -DHAVE_CONFIG_H -I. -I../..   -I. -I. -I./.. -I./.. -I./../libcommon -I./../libcommon -I./../libkbdfile -I./../libkbdfile -DDATADIR=\"/usr/share\" -DLOCALEDIR=\"/usr/share/locale\" -U_GNU_SOURCE -funit-at-a-time   -g -O2 -D_FORTIFY_SOURCE=2 -Waggregate-return -Wall -Wcast-align -Wconversion -Wdisabled-optimization -Wextra -Wmissing-declarations -Wmissing-format-attribute -Wmissing-noreturn -Wmissing-prototypes -Wredundant-decls -Wshadow -Wstrict-prototypes -Wwrite-strings -c -o func.lo func.c
libtool: compile:  x86_64-pc-linux-gnu-gcc -DHAVE_CONFIG_H -I. -I../.. -I. -I. -I./.. -I./.. -I./../libcommon -I./../libcommon -I./../libkbdfile -I./../libkbdfile -DDATADIR=\"/usr/share\" -DLOCALEDIR=\"/usr/share/locale\" -U_GNU_SOURCE -funit-at-a-time -g -O2 -D_FORTIFY_SOURCE=2 -Waggregate-return -Wall -Wcast-align -Wconversion -Wdisabled-optimization -Wextra -Wmissing-declarations -Wmissing-format-attribute -Wmissing-noreturn -Wmissing-prototypes -Wredundant-decls -Wshadow -Wstrict-prototypes -Wwrite-strings -c func.c  -fPIC -DPIC -o .libs/func.o
libtool: compile:  x86_64-pc-linux-gnu-gcc -DHAVE_CONFIG_H -I. -I../.. -I. -I. -I./.. -I./.. -I./../libcommon -I./../libcommon -I./../libkbdfile -I./../libkbdfile -DDATADIR=\"/usr/share\" -DLOCALEDIR=\"/usr/share/locale\" -U_GNU_SOURCE -funit-at-a-time -g -O2 -D_FORTIFY_SOURCE=2 -Waggregate-return -Wall -Wcast-align -Wconversion -Wdisabled-optimization -Wextra -Wmissing-declarations -Wmissing-format-attribute -Wmissing-noreturn -Wmissing-prototypes -Wredundant-decls -Wshadow -Wstrict-prototypes -Wwrite-strings -c func.c -o func.o >/dev/null 2>&1
/bin/sh ../../libtool  --tag=CC   --mode=compile x86_64-pc-linux-gnu-gcc -DHAVE_CONFIG_H -I. -I../..   -I. -I. -I./.. -I./.. -I./../libcommon -I./../libcommon -I./../libkbdfile -I./../libkbdfile -DDATADIR=\"/usr/share\" -DLOCALEDIR=\"/usr/share/locale\" -U_GNU_SOURCE -funit-at-a-time   -g -O2 -D_FORTIFY_SOURCE=2 -Waggregate-return -Wall -Wcast-align -Wconversion -Wdisabled-optimization -Wextra -Wmissing-declarations -Wmissing-format-attribute -Wmissing-noreturn -Wmissing-prototypes -Wredundant-decls -Wshadow -Wstrict-prototypes -Wwrite-strings -c -o summary.lo summary.c
libtool: compile:  x86_64-pc-linux-gnu-gcc -DHAVE_CONFIG_H -I. -I../.. -I. -I. -I./.. -I./.. -I./../libcommon -I./../libcommon -I./../libkbdfile -I./../libkbdfile -DDATADIR=\"/usr/share\" -DLOCALEDIR=\"/usr/share/locale\" -U_GNU_SOURCE -funit-at-a-time -g -O2 -D_FORTIFY_SOURCE=2 -Waggregate-return -Wall -Wcast-align -Wconversion -Wdisabled-optimization -Wextra -Wmissing-declarations -Wmissing-format-attribute -Wmissing-noreturn -Wmissing-prototypes -Wredundant-decls -Wshadow -Wstrict-prototypes -Wwrite-strings -c summary.c  -fPIC -DPIC -o .libs/summary.o
libtool: compile:  x86_64-pc-linux-gnu-gcc -DHAVE_CONFIG_H -I. -I../.. -I. -I. -I./.. -I./.. -I./../libcommon -I./../libcommon -I./../libkbdfile -I./../libkbdfile -DDATADIR=\"/usr/share\" -DLOCALEDIR=\"/usr/share/locale\" -U_GNU_SOURCE -funit-at-a-time -g -O2 -D_FORTIFY_SOURCE=2 -Waggregate-return -Wall -Wcast-align -Wconversion -Wdisabled-optimization -Wextra -Wmissing-declarations -Wmissing-format-attribute -Wmissing-noreturn -Wmissing-prototypes -Wredundant-decls -Wshadow -Wstrict-prototypes -Wwrite-strings -c summary.c -o summary.o >/dev/null 2>&1
/bin/sh ../../libtool  --tag=CC   --mode=compile x86_64-pc-linux-gnu-gcc -DHAVE_CONFIG_H -I. -I../..   -I. -I. -I./.. -I./.. -I./../libcommon -I./../libcommon -I./../libkbdfile -I./../libkbdfile -DDATADIR=\"/usr/share\" -DLOCALEDIR=\"/usr/share/locale\" -U_GNU_SOURCE -funit-at-a-time   -g -O2 -D_FORTIFY_SOURCE=2 -Waggregate-return -Wall -Wcast-align -Wconversion -Wdisabled-optimization -Wextra -Wmissing-declarations -Wmissing-format-attribute -Wmissing-noreturn -Wmissing-prototypes -Wredundant-decls -Wshadow -Wstrict-prototypes -Wwrite-strings -c -o loadkeys.lo loadkeys.c
libtool: compile:  x86_64-pc-linux-gnu-gcc -DHAVE_CONFIG_H -I. -I../.. -I. -I. -I./.. -I./.. -I./../libcommon -I./../libcommon -I./../libkbdfile -I./../libkbdfile -DDATADIR=\"/usr/share\" -DLOCALEDIR=\"/usr/share/locale\" -U_GNU_SOURCE -funit-at-a-time -g -O2 -D_FORTIFY_SOURCE=2 -Waggregate-return -Wall -Wcast-align -Wconversion -Wdisabled-optimization -Wextra -Wmissing-declarations -Wmissing-format-attribute -Wmissing-noreturn -Wmissing-prototypes -Wredundant-decls -Wshadow -Wstrict-prototypes -Wwrite-strings -c loadkeys.c  -fPIC -DPIC -o .libs/loadkeys.o
libtool: compile:  x86_64-pc-linux-gnu-gcc -DHAVE_CONFIG_H -I. -I../.. -I. -I. -I./.. -I./.. -I./../libcommon -I./../libcommon -I./../libkbdfile -I./../libkbdfile -DDATADIR=\"/usr/share\" -DLOCALEDIR=\"/usr/share/locale\" -U_GNU_SOURCE -funit-at-a-time -g -O2 -D_FORTIFY_SOURCE=2 -Waggregate-return -Wall -Wcast-align -Wconversion -Wdisabled-optimization -Wextra -Wmissing-declarations -Wmissing-format-attribute -Wmissing-noreturn -Wmissing-prototypes -Wredundant-decls -Wshadow -Wstrict-prototypes -Wwrite-strings -c loadkeys.c -o loadkeys.o >/dev/null 2>&1
/bin/sh ../../libtool  --tag=CC   --mode=compile x86_64-pc-linux-gnu-gcc -DHAVE_CONFIG_H -I. -I../..   -I. -I. -I./.. -I./.. -I./../libcommon -I./../libcommon -I./../libkbdfile -I./../libkbdfile -DDATADIR=\"/usr/share\" -DLOCALEDIR=\"/usr/share/locale\" -U_GNU_SOURCE -funit-at-a-time   -g -O2 -D_FORTIFY_SOURCE=2 -Waggregate-return -Wall -Wcast-align -Wconversion -Wdisabled-optimization -Wextra -Wmissing-declarations -Wmissing-format-attribute -Wmissing-noreturn -Wmissing-prototypes -Wredundant-decls -Wshadow -Wstrict-prototypes -Wwrite-strings -c -o parser.lo parser.c
libtool: compile:  x86_64-pc-linux-gnu-gcc -DHAVE_CONFIG_H -I. -I../.. -I. -I. -I./.. -I./.. -I./../libcommon -I./../libcommon -I./../libkbdfile -I./../libkbdfile -DDATADIR=\"/usr/share\" -DLOCALEDIR=\"/usr/share/locale\" -U_GNU_SOURCE -funit-at-a-time -g -O2 -D_FORTIFY_SOURCE=2 -Waggregate-return -Wall -Wcast-align -Wconversion -Wdisabled-optimization -Wextra -Wmissing-declarations -Wmissing-format-attribute -Wmissing-noreturn -Wmissing-prototypes -Wredundant-decls -Wshadow -Wstrict-prototypes -Wwrite-strings -c parser.c  -fPIC -DPIC -o .libs/parser.o
In file included from parser.y:24:
/var/tmp/portage/sys-apps/kbd-9999/work/kbd-9999/src/libkeymap/analyze.h:292:1: error: unknown type name ‘YYSTYPE’
 
 ^      
/var/tmp/portage/sys-apps/kbd-9999/work/kbd-9999/src/libkeymap/analyze.h:294:19: error: unknown type name ‘YYSTYPE’
 
                   ^      
/var/tmp/portage/sys-apps/kbd-9999/work/kbd-9999/src/libkeymap/analyze.h:342:17: error: unknown type name ‘YYSTYPE’
 extern int yylex \
                 ^~     
parser.c:518:3: error: unknown type name ‘YYSTYPE’
   YYSTYPE yyvs_alloc;
   ^~~~~~~
parser.c:1208:44: error: unknown type name ‘YYSTYPE’
 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, void *scanner, struct lk_ctx *ctx)
                                            ^~~~~~~
parser.c:425:5: error: expected end of line before ‘push’
     _Pragma ("GCC diagnostic push") \
     ^~~~~~~
parser.c:1217:3: note: in expansion of macro ‘YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN’
   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
parser.c:426:5: error: expected end of line before ‘ignored’
     _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
     ^~~~~~~
parser.c:1217:3: note: in expansion of macro ‘YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN’
   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
parser.c:427:5: error: expected end of line before ‘ignored’
     _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
     ^~~~~~~
parser.c:1217:3: note: in expansion of macro ‘YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN’
   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
parser.c:429:5: error: expected end of line before ‘pop’
     _Pragma ("GCC diagnostic pop")
     ^~~~~~~
parser.c:1219:3: note: in expansion of macro ‘YY_IGNORE_MAYBE_UNINITIALIZED_END’
   YY_IGNORE_MAYBE_UNINITIALIZED_END
   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
parser.c:1230:1: warning: no previous prototype for ‘yyparse’ [-Wmissing-prototypes]
 yyparse (void *scanner, struct lk_ctx *ctx)
 ^~~~~~~
parser.c: In function ‘yyparse’:
parser.c:1240:1: error: unknown type name ‘YYSTYPE’
 YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default);
 ^~~~~~~
parser.c:1262:5: error: unknown type name ‘YYSTYPE’
     YYSTYPE yyvsa[YYINITDEPTH];
     ^~~~~~~
parser.c:1263:5: error: unknown type name ‘YYSTYPE’
     YYSTYPE *yyvs;
     ^~~~~~~
parser.c:1264:5: error: unknown type name ‘YYSTYPE’
     YYSTYPE *yyvsp;
     ^~~~~~~
parser.c:1274:3: error: unknown type name ‘YYSTYPE’
   YYSTYPE yyval;
   ^~~~~~~
parser.c:527:46: error: ‘YYSTYPE’ undeclared (first use in this function)
      ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
                                              ^~~~~~~
parser.c:1355:44: note: in expansion of macro ‘YYSTACK_BYTES’
           (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
                                            ^~~~~~~~~~~~~
parser.c:527:46: note: each undeclared identifier is reported only once for each function it appears in
      ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
                                              ^~~~~~~
parser.c:1355:44: note: in expansion of macro ‘YYSTACK_BYTES’
           (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
                                            ^~~~~~~~~~~~~
parser.c:1403:16: warning: implicit declaration of function ‘yylex’; did you mean ‘yyfree’? [-Wimplicit-function-declaration]
       yychar = yylex (&yylval, scanner);
                ^~~~~
                yyfree
parser.y:196:48: error: request for member ‘str’ in something not a structure or union
     if (lk_set_charset(ctx, (char *) $2.data)) {
                                                ^
In file included from parser.y:19:
parser.y:199:26: error: request for member ‘str’ in something not a structure or union
       (char *) $2.data);
                          ^
contextP.h:79:55: note: in definition of macro ‘lk_log_cond’
    lk_log(ctx, level, __FILE__, __LINE__, __func__, ##arg); \
                                                       ^~~
parser.y:197:6: note: in expansion of macro ‘ERR’
      ERR(ctx,
      ^~~
parser.y:207:40: error: request for member ‘str’ in something not a structure or union
         !strcasecmp((char *) $2.data, "iso-8859-1"))
                                        ^
parser.y:225:50: error: request for member ‘str’ in something not a structure or union
     if (compose_as_usual(ctx, (char *) $5.data) == -1)
                                                  ^
parser.y:245:24: error: request for member ‘num’ in something not a structure or union
     for (i = $1; i <= $3; i++) {
                        ^
parser.y:245:45: error: request for member ‘num’ in something not a structure or union
     for (i = $1; i <= $3; i++) {
                                             ^
parser.y:252:34: error: request for member ‘num’ in something not a structure or union
     if (lk_add_map(ctx, $1) == -1)
                                  ^
In file included from ./keymap/context.h:10,
                 from keymap.h:4,
                 from contextP.h:7,
                 from parser.y:19:
parser.y:260:24: error: request for member ‘num’ in something not a structure or union
     if (KTYP($2) != KT_FN) {
                        ^
parser.y:262:35: error: request for member ‘num’ in something not a structure or union
       get_sym(ctx, KTYP($2), KVAL($2)));
                                   ^
contextP.h:108:26: note: in expansion of macro ‘lk_log_cond’
 #define ERR(ctx, arg...) lk_log_cond(ctx, LOG_ERR, ##arg)
                          ^~~~~~~~~~~
parser.y:261:6: note: in expansion of macro ‘ERR’
      ERR(ctx, _("'%s' is not a function key symbol"),
      ^~~
parser.y:262:58: error: request for member ‘num’ in something not a structure or union
       get_sym(ctx, KTYP($2), KVAL($2)));
                                                          ^
contextP.h:108:26: note: in expansion of macro ‘lk_log_cond’
 #define ERR(ctx, arg...) lk_log_cond(ctx, LOG_ERR, ##arg)
                          ^~~~~~~~~~~
parser.y:261:6: note: in expansion of macro ‘ERR’
      ERR(ctx, _("'%s' is not a function key symbol"),
      ^~~
parser.y:266:49: error: request for member ‘num’ in something not a structure or union
     ke.kb_func = (unsigned char) KVAL($2);
                                                 ^
parser.y:269:32: error: request for member ‘str’ in something not a structure or union
             (char *) $4.data,
                                ^
parser.y:281:43: error: request for member ‘num’ in something not a structure or union
     ptr.diacr  = (unsigned int) $2;
                                           ^
parser.y:282:43: error: request for member ‘num’ in something not a structure or union
     ptr.base   = (unsigned int) $3;
                                           ^
parser.y:283:43: error: request for member ‘num’ in something not a structure or union
     ptr.result = (unsigned int) $5;
                                           ^
parser.y:291:43: error: request for member ‘num’ in something not a structure or union
     ptr.diacr  = (unsigned int) $2;
                                           ^
parser.y:292:43: error: request for member ‘num’ in something not a structure or union
     ptr.base   = (unsigned int) $3;
                                           ^
parser.y:293:43: error: request for member ‘num’ in something not a structure or union
     ptr.result = (unsigned int) $5;
                                           ^
parser.y:299:13: error: request for member ‘num’ in something not a structure or union
 compsym  : CCHAR  { $$ = $1;  }
             ^
parser.y:299:30: error: request for member ‘num’ in something not a structure or union
 compsym  : CCHAR  { $$ = $1;  }
                              ^
parser.y:300:13: error: request for member ‘num’ in something not a structure or union
   | UNUMBER { $$ = $1 ^ 0xf000; }
             ^
parser.y:300:30: error: request for member ‘num’ in something not a structure or union
   | UNUMBER { $$ = $1 ^ 0xf000; }
                              ^
parser.y:312:48: error: request for member ‘num’ in something not a structure or union
      lk_array_set(ctx->key_constant, $2, &one);
                                                ^
parser.y:321:40: error: request for member ‘num’ in something not a structure or union
       if (lk_del_key(ctx, j, $2) < 0)
                                        ^
parser.y:341:41: error: request for member ‘num’ in something not a structure or union
        if (lk_add_key(ctx, j, $2, keycode) < 0)
                                         ^
parser.y:356:40: error: request for member ‘num’ in something not a structure or union
       if (lk_add_key(ctx, i, $2, *val) < 0)
                                        ^
parser.y:364:45: error: request for member ‘num’ in something not a structure or union
     if (lk_add_key(ctx, ctx->mod, $3, $5) < 0)
                                             ^
parser.y:364:62: error: request for member ‘num’ in something not a structure or union
     if (lk_add_key(ctx, ctx->mod, $3, $5) < 0)
                                                              ^
parser.y:370:38: error: request for member ‘num’ in something not a structure or union
     if (lk_add_key(ctx, 0, $3, $5) < 0)
                                      ^
parser.y:370:55: error: request for member ‘num’ in something not a structure or union
     if (lk_add_key(ctx, 0, $3, $5) < 0)
                                                       ^
parser.y:395:24: error: request for member ‘num’ in something not a structure or union
     int val = $1;
                        ^
parser.y:399:13: error: request for member ‘num’ in something not a structure or union
 rvalue  : NUMBER { $$ = convert_code(ctx, $1, TO_AUTO);  }
             ^
parser.y:399:48: error: request for member ‘num’ in something not a structure or union
 rvalue  : NUMBER { $$ = convert_code(ctx, $1, TO_AUTO);  }
                                                ^
parser.y:400:13: error: request for member ‘num’ in something not a structure or union
                 | PLUS NUMBER { $$ = add_capslock(ctx, $2);   }
             ^
parser.y:400:48: error: request for member ‘num’ in something not a structure or union
                 | PLUS NUMBER { $$ = add_capslock(ctx, $2);   }
                                                ^
parser.y:401:13: error: request for member ‘num’ in something not a structure or union
   | UNUMBER { $$ = convert_code(ctx, $1^0xf000, TO_AUTO); }
             ^
parser.y:401:48: error: request for member ‘num’ in something not a structure or union
   | UNUMBER { $$ = convert_code(ctx, $1^0xf000, TO_AUTO); }
                                                ^
parser.y:402:13: error: request for member ‘num’ in something not a structure or union
   | PLUS UNUMBER { $$ = add_capslock(ctx, $2^0xf000);  }
             ^
parser.y:402:48: error: request for member ‘num’ in something not a structure or union
   | PLUS UNUMBER { $$ = add_capslock(ctx, $2^0xf000);  }
                                                ^
parser.y:403:13: error: request for member ‘num’ in something not a structure or union
   | LITERAL { $$ = $1;     }
             ^
parser.y:403:30: error: request for member ‘num’ in something not a structure or union
   | LITERAL { $$ = $1;     }
                              ^
parser.y:404:13: error: request for member ‘num’ in something not a structure or union
                 | PLUS LITERAL { $$ = add_capslock(ctx, $2);   }
             ^
parser.y:404:48: error: request for member ‘num’ in something not a structure or union
                 | PLUS LITERAL { $$ = add_capslock(ctx, $2);   }
                                                ^
parser.c:1913:11: warning: implicit declaration of function ‘yydestruct’; did you mean ‘yyrestart’? [-Wimplicit-function-declaration]
           yydestruct ("Error: discarding",
           ^~~~~~~~~~
           yyrestart
make[4]: *** [Makefile:611: parser.lo] Error 1
make[4]: Leaving directory '/var/tmp/portage/sys-apps/kbd-9999/work/kbd-9999/src/libkeymap'
make[3]: *** [Makefile:483: all] Error 2
make[3]: Leaving directory '/var/tmp/portage/sys-apps/kbd-9999/work/kbd-9999/src/libkeymap'
make[2]: *** [Makefile:1094: all-recursive] Error 1
make[2]: Leaving directory '/var/tmp/portage/sys-apps/kbd-9999/work/kbd-9999/src'
make[1]: *** [Makefile:480: all-recursive] Error 1
make[1]: Leaving directory '/var/tmp/portage/sys-apps/kbd-9999/work/kbd-9999'
make: *** [Makefile:411: all] Error 2
 * ERROR: sys-apps/kbd-9999::local failed (compile phase):
 *   emake failed
 * 
 * If you need support, post the output of `emerge --info '=sys-apps/kbd-9999::local'`,
 * the complete build log and the output of `emerge -pqv '=sys-apps/kbd-9999::local'`.
 * The complete build log is located at '/var/tmp/portage/sys-apps/kbd-9999/temp/build.log.gz'.
 * The ebuild environment file is located at '/var/tmp/portage/sys-apps/kbd-9999/temp/environment'.
 * Working directory: '/var/tmp/portage/sys-apps/kbd-9999/work/kbd-9999'
 * S: '/var/tmp/portage/sys-apps/kbd-9999/work/kbd-9999'

loadkeys from 2.1.0 release throws error messages

breakmygentoo:~ # loadkeys -q windowkeys de-latin1-nodeadkeys
kbdfile already opened: /usr/share/keymaps/i386/include/windowkeys.map.gz
cannot open file de-latin1-nodeadkeys
breakmygentoo:~ # loadkeys -q de-latin1-nodeadkeys
scandir: No such file or directory
scandir: No such file or directory
scandir: No such file or directory
scandir: No such file or directory
scandir: No such file or directory
scandir: No such file or directory
scandir: No such file or directory
breakmygentoo:~ # loadkeys -q /usr/share/keymaps/i386/qwertz/de-latin1-nodeadkeys.map.gz 
scandir: No such file or directory
scandir: No such file or directory
scandir: No such file or directory
scandir: No such file or directory
scandir: No such file or directory
scandir: No such file or directory
scandir: No such file or directory
breakmygentoo:~ #

Funnily, the keyboard layouts are getting loaded despite the error messages.

Euro at Portuguese keyboards

The Portuguese keyboard layout pt-latin1.map needs include "euro2.map" to be complete, like the de-latin1.map already do.
Most Portuguese keyboards, apart from having the euro at E key have it at 5 key too.

1920px-KB_Portuguese svg
image

is-latin1 circumflex

data/keymaps/i386/qwerty/is-latin1.map
Lines 79-80

The standard functionality is commented out in favour of a level-2 circumflex. This is fine, but the circumflex should also be available in its original level-3 position.

Current version:
keycode 40 = dead_acute asciicircum
#keycode 40 = dead_acute dead_acute asciicircum

My proposal:
keycode 40 = dead_acute asciicircum asciicircum
#keycode 40 = dead_acute dead_acute asciicircum

Add Arabic layout from Debian?

Debian has, for years, shipped an Arabic console keymap:

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=267451

AFAICT, it has never shown up in this project, thus Fedora and other distros which get their keymaps from here don't have it.

Could it be added to kbd?

In current Debian the layout exists in the 'console-data' package. You can find it, e.g., at https://sources.debian.org/src/console-data/2:1.12-5.1/keymaps/i386/qwerty/ar.kmap/ . I don't know what the ultimate 'source' of the file really is, I have trouble navigating the Debian packaging maze. I don't know what the "upstream" of console-data is, so far as Debian is concerned.

Debian also ships a Persian layout, in fact:

perhaps that one should be included too...

'loadkeys -d' from 2.1.0 and 2.2.0 throws syntax error, unexpected ERROR

Hi,

'loadkeys -d' loads defkeymap (e.g. 'defkeymap.map.gz') and if this filename is a symlink
(e.g. '/usr/share/kbd/keymaps/defkeymap.map.gz -> /usr/share/kbd/keymaps/i386/qwerty/pt-latin1.map.gz') it also looks for includes near its target (i.e. as of this example in '/usr/share/kbd/keymaps/i386/include' dir). 'find_standard_incl_file' uses 'readlink' and then calls 'find_incl_file_near_fn'. However, as of 2.1.0 and 2.2.0, in this situation the readlink code is never reached and thus 'loadkeys -d' is unable to load the includes from the location near the symlink target. Example, having the following:

/usr/share/kbd/keymaps/defkeymap.map.gz -> i386/qwerty/pt-latin1.map.gz
/usr/share/kbd/keymaps/i386/include/...
/usr/share/kbd/keymaps/i386/qwerty/...

/usr/share/kbd/keymaps
|-- defkeymap.map.gz -> i386/qwerty/pt-latin1.map.gz
`-- i386
    |-- include
    |   |-- (...)
    |   |-- linux-keys-bare.inc
    |   |-- linux-with-alt-and-altgr.inc
    |   |-- qwerty-layout.inc
    |   |-- (...)
    |   |-- unicode.map.gz
    |   `-- windowkeys.map.gz
    `-- qwerty
        |-- (...)
        |-- pt-latin1.map.gz
        |-- pt-latin9.map.gz
        |-- (...)
        |-- us-acentos.map.gz
        `-- us.map.gz

'loadkeys -d' loads the keymap 'i386/qwerty/pt-latin1.map.gz' and then fails finding the first declared include file 'qwerty-layout' that should be found at 'i386/include/' terminating the execution:

~# loadkeys -d -v
Loading defkeymap.map.gz
switching to qwerty-layout
syntax error, unexpected ERROR

(...)
open(".", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_CLOEXEC|O_DIRECTORY) = 4
fstat64(4, {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
getdents(4, /* 10 entries */, 32768)    = 184
getdents(4, /* 0 entries */, 32768)     = 0
close(4)                                = 0
stat64("./amiga", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat64("./atari", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat64("./defkeymap.map.gz", {st_mode=S_IFREG|0644, st_size=989, ...}) = 0
stat64("./i386", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat64("./include", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat64("./mac", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat64("./ppc", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat64("./sun", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
pipe2([4, 5], O_CLOEXEC)                = 0
clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0xb7dbf768) = 22689
close(5)                                = 0
fcntl64(4, F_SETFD, 0)                  = 0
fstat64(4, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
read(4, "# Derived from pt.map by lacyp@u"..., 4096) = 2696
read(4, "", 4096)                       = 0
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=22689, si_uid=0, si_status=0, si_utime=0, si_stime=0} ---
stat64("qwerty-layout", 0xbfd0e980)     = -1 ENOENT (No such file or directory)
open(".", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_CLOEXEC|O_DIRECTORY) = 5
fstat64(5, {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
getdents(5, /* 10 entries */, 32768)    = 184
getdents(5, /* 0 entries */, 32768)     = 0
close(5)                                = 0
stat64("./amiga", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat64("./atari", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat64("./defkeymap.map.gz", {st_mode=S_IFREG|0644, st_size=989, ...}) = 0
stat64("./i386", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat64("./include", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat64("./mac", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat64("./ppc", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat64("./sun", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
open("../include", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_CLOEXEC|O_DIRECTORY) = -1 ENOENT (No such file or directory)
write(2, "scandir: No such file or directo"..., 34scandir: No such file or directory) = 34
write(2, "\n", 1
)                       = 1
stat64("qwerty-layout", 0xbfd0e930)     = -1 ENOENT (No such file or directory)
open(".", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_CLOEXEC|O_DIRECTORY) = 5
fstat64(5, {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
getdents(5, /* 10 entries */, 32768)    = 184
getdents(5, /* 0 entries */, 32768)     = 0
close(5)                                = 0
stat64("./amiga", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat64("./atari", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat64("./defkeymap.map.gz", {st_mode=S_IFREG|0644, st_size=989, ...}) = 0
stat64("./i386", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat64("./include", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat64("./mac", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat64("./ppc", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat64("./sun", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
open("./../include", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_CLOEXEC|O_DIRECTORY) = -1 ENOENT (No such file or directory)
write(2, "scandir: No such file or directo"..., 34scandir: No such file or directory) = 34
write(2, "\n", 1
)                       = 1
write(2, "syntax error, unexpected ERROR", 30syntax error, unexpected ERROR) = 30
write(2, "\n", 1
)                       = 1
close(4)                                = 0
wait4(22689, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 22689
close(3)                                = 0
exit_group(1)                           = ?
+++ exited with 1 +++

The following patch restores the expected behavior.

kbd-2.2.0.patch

Signed-off-by: Jose P Santos <[email protected]>

--- src/libkbdfile/kbdfile.c.orig       2019-07-26 13:26:24.000000000 +0100
+++ src/libkbdfile/kbdfile.c    2019-08-02 20:24:47.549574629 +0100
@@ -433,8 +433,8 @@
                rc = findfile_in_dir(fnam, dir, recdepth, suffixes, fp);
                free(dir);

-               if (rc <= 0)
-                       return rc;
+               if (!rc)
+                       return 0;
        }

        return 1;

Thx,
jps

Is there as way to increase the maximum character size in setfont?

In order to get readable console characters on high dpi displays I scaled most of the Terminus fonts by a factor of two, creating fonts with heights from 40 to 64. But setfont will not accept heights or widths greater than 32.

I imagine some buffer sizes would need to be increased to lift these limits or maybe there is a hard limit imposed elsewhere.

Add xkb support

It's very nice to be able to use the keymap from the xkbcommon project. Using xkbcommon a keymap is created and then converted to a kernel keymap as far as possible.

This support does not replace regular keymaps. There are no plans for this. The command looks like:

loadkeys --xkb-layout="us,ru,fr" --xkb-options="grp:caps_toggle"

This implementation is inspired by the console-setup project. Many thanks to Anton Zinoviev for help.

At the moment compose is not implemented. This is because xkbcommon does not provide an API for iterating over a compose table. I hope to solve this problem in the future.

Makefile analyze.c error compiling on Raspi ARM

When compiling from source on Raspian, Make file errors out, not sure how to troubleshoot, I'm pretty new to makefiles. Seems like analyze.c and analyze.h fail to appear in the source directory. All I can see is analyze.l file.

I did not see any errors complaining about analyze during autogen or configure.

I have reproduced this on two units, can test if needed, and can provide more detailed logs.

Thank you for your hard work on KBD!

configure script results:


        kbd 2.0.4
        ======

        prefix:                 /usr/local
        libdir:                 ${exec_prefix}/lib
        bindir:                 ${exec_prefix}/bin
        datadir:                ${datarootdir}

        compiler:               gcc
        cflags:                 -g -O2 -D_FORTIFY_SOURCE=2 -Waggregate-return -Wall -Wcast-align -Wconversion -Wdisabled-optimization -Wextra -Wmissing-declarations -Wmissing-format-attribute -Wmissing-noreturn -Wmissing-prototypes -Wredundant-decls -Wshadow -Wstrict-prototypes -Wwrite-strings

        {get,set}keycodes:      yes
        resizecons:             no
        optional progs:         no
        vlock:                  yes
        libkbdfile:             no
        libkeymap:              no

make output

pi@raspberrypi:~/kbd $ make
make  all-recursive
make[1]: Entering directory '/home/pi/kbd'
Making all in src
make[2]: Entering directory '/home/pi/kbd/src'
Making all in libcommon
make[3]: Entering directory '/home/pi/kbd/src/libcommon'
make[3]: Nothing to be done for 'all'.
make[3]: Leaving directory '/home/pi/kbd/src/libcommon'
Making all in libkbdfile
make[3]: Entering directory '/home/pi/kbd/src/libkbdfile'
make[3]: Nothing to be done for 'all'.
make[3]: Leaving directory '/home/pi/kbd/src/libkbdfile'
Making all in libkeymap
make[3]: Entering directory '/home/pi/kbd/src/libkeymap'
  LEX      analyze.c
Makefile:602: recipe for target 'analyze.c' failed
make[3]: *** [analyze.c] Error 1
make[3]: Leaving directory '/home/pi/kbd/src/libkeymap'
Makefile:1071: recipe for target 'all-recursive' failed
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory '/home/pi/kbd/src'
Makefile:481: recipe for target 'all-recursive' failed
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/home/pi/kbd'
Makefile:412: recipe for target 'all' failed
make: *** [all] Error 2

Output of src/libkeymap directory:

pi@raspberrypi:~/kbd/src/libkeymap $ ls
analyze.l   diacr.lo  kernel.lo  libkeymap.pc.in  parser.c           syms.iso8859_5.h  syms.latin4.h
array.c     diacr.o   kernel.o   loadkeys.c       parser.h           syms.iso8859_7.h  syms.mazovia.h
array.lo    dump.c    keymap     loadkeys.lo      parser.y           syms.iso8859_8.h  syms.sami.h
array.o     dump.lo   keymap.h   loadkeys.o       summary.c          syms.iso8859_9.h  syms.synonyms.h
common.c    dump.o    kmap.c     Makefile         summary.lo         syms.koi8.h       syms.thai.h
common.lo   func.c    kmap.lo    Makefile.am      summary.o          syms.ktyp.h
common.o    func.lo   kmap.o     Makefile.in      syms.cp1250.h      syms.latin1.h
contextP.h  func.o    ksyms.c    modifiers.c      syms.ethiopic.h    syms.latin2.h
diacr.c     kernel.c  ksyms.h    modifiers.h      syms.iso8859_15.h  syms.latin3.h

uname -a
Linux raspberrypi 4.9.80-v7+ #1098 SMP Fri Mar 9 19:11:42 GMT 2018 armv7l GNU/Linux

simultaneous keyboard key repeats

kbd allows to set custom repeat rates etc (with kbdrate -set), but on linux is seems that simultaneous key presses are not supported (pressing a and o will produce aoooooooooooooooooooooooooo and not aoaoaoaoaoaoaoaoaoaoaoaoaoaoao which would be the expected behavior).

On windows simultaneous key repeats are supported, would it be possible to get this behavior in linux ?

Is there any way to tweak kbd in order to get this behavior ?

Thank you very much

Wrong italian layouts

OS: archlinux

I have tried all italian layouts (it, it2 and it-ibm) on the vconsole (with loadkeys and /etc/vconsole.conf) but no one is perfect for my machines:

  • asus laptop with numpad
  • lenovo laptop
  • toshiba laptop with numpad
  • logitech keyboard with numpad

I have the standard keyboards as this wikipedia image https://it.wikipedia.org/wiki/File:Italian_Keyboard_layout.svg , the best layout for this keyboard is the it layout but some keys are wrong as left and right brace.

Are the italian layouts wrongs or there is a missing layout? I don't known if I have to write a new keyboard layout or I have to change the current it layout and submit a pull request.

NOTE: on X11 I am using the it layout with winkeys variant and work perfect.

EDIT: this is the dumpkeys output:

keymaps 0-6,8-10,12-14
keycode   1 = Escape          
	alt	keycode   1 = Meta_Escape     
keycode   2 = one             
	shift	keycode   2 = exclam          
	alt	keycode   2 = Meta_one        
	shift	alt	keycode   2 = Meta_exclam     
keycode   3 = two             
	shift	keycode   3 = quotedbl        
	alt	keycode   3 = Meta_two        
	shift	alt	keycode   3 = Meta_quotedbl   
keycode   4 = three           
	shift	keycode   4 = VoidSymbol      
	alt	keycode   4 = Meta_three      
keycode   5 = four            
	shift	keycode   5 = dollar          
	alt	keycode   5 = Meta_four       
	shift	alt	keycode   5 = Meta_dollar     
keycode   6 = five            
	shift	keycode   6 = percent         
	alt	keycode   6 = Meta_five       
	shift	alt	keycode   6 = Meta_percent    
keycode   7 = six             
	shift	keycode   7 = ampersand       
	alt	keycode   7 = Meta_six        
	shift	alt	keycode   7 = Meta_ampersand  
keycode   8 = seven           
	shift	keycode   8 = slash           
	alt	keycode   8 = Meta_seven      
	shift	alt	keycode   8 = Meta_slash      
keycode   9 = eight           
	shift	keycode   9 = parenleft       
	altgr	keycode   9 = braceleft       
	alt	keycode   9 = Meta_eight      
	shift	alt	keycode   9 = Meta_parenleft  
	altgr	alt	keycode   9 = Meta_braceleft  
keycode  10 = nine            
	shift	keycode  10 = parenright      
	altgr	keycode  10 = braceright      
	alt	keycode  10 = Meta_nine       
	shift	alt	keycode  10 = Meta_parenright 
	altgr	alt	keycode  10 = Meta_braceright 
keycode  11 = zero            
	shift	keycode  11 = equal           
	altgr	keycode  11 = asciitilde      
	alt	keycode  11 = Meta_zero       
	shift	alt	keycode  11 = Meta_equal      
	altgr	alt	keycode  11 = Meta_asciitilde 
keycode  12 = apostrophe      
	shift	keycode  12 = question        
	altgr	keycode  12 = grave           
	alt	keycode  12 = Meta_apostrophe 
	shift	alt	keycode  12 = Meta_question   
	altgr	alt	keycode  12 = Meta_grave      
keycode  13 =
	shift	keycode  13 = asciicircum     
	shift	control	keycode  13 = Control_asciicircum
	alt	keycode  13 = 0x08ec          
	shift	alt	keycode  13 = Meta_asciicircum
	shift	control	alt	keycode  13 = Meta_Control_asciicircum
keycode  14 = Delete          
	alt	keycode  14 = Meta_Delete     
keycode  15 = Tab             
	alt	keycode  15 = Meta_Tab        
keycode  16 = q               
keycode  17 = w               
keycode  18 = +e               +E              
	shift	altgr	keycode  18 = +E              
	control	keycode  18 = Control_e       
	shift	control	keycode  18 = Control_e       
	altgr	control	keycode  18 = Control_e       
	alt	keycode  18 = Meta_e          
	shift	alt	keycode  18 = Meta_E          
	altgr	alt	keycode  18 = Meta_e          
	control	alt	keycode  18 = Meta_Control_e  
	shift	control	alt	keycode  18 = Meta_Control_e  
	altgr	control	alt	keycode  18 = Meta_Control_e  
keycode  19 = r               
keycode  20 = t               
keycode  21 = y               
keycode  22 = u               
keycode  23 = i               
keycode  24 = o               
keycode  25 = p               
keycode  26 =
	altgr	keycode  26 = bracketleft     
	altgr	alt	keycode  26 = Meta_bracketleft
keycode  27 = plus            
	shift	keycode  27 = asterisk        
	altgr	keycode  27 = bracketright    
	altgr	control	keycode  27 = Control_bracketright
	alt	keycode  27 = Meta_plus       
	shift	alt	keycode  27 = Meta_asterisk   
	altgr	alt	keycode  27 = Meta_bracketright
	altgr	control	alt	keycode  27 = Meta_Control_bracketright
keycode  28 = Return          
keycode  29 = Control         
keycode  30 = a               
keycode  31 = s               
keycode  32 = d               
keycode  33 = f               
keycode  34 = g               
keycode  35 = h               
keycode  36 = j               
keycode  37 = k               
keycode  38 = l               
keycode  39 =
	altgr	keycode  39 = at              
	altgr	alt	keycode  39 = Meta_at         
keycode  40 =
	altgr	keycode  40 = numbersign      
	altgr	alt	keycode  40 = Meta_numbersign 
keycode  41 = backslash       
	shift	keycode  41 = bar             
	control	keycode  41 = Control_backslash
	alt	keycode  41 = Meta_backslash  
	shift	alt	keycode  41 = Meta_bar        
	control	alt	keycode  41 = Meta_Control_backslash
keycode  42 = Shift           
keycode  43 = ugrave          
	shift	keycode  43 = section         
	altgr	keycode  43 = uacute          
keycode  44 = z               
keycode  45 = x               
keycode  46 = +c               +C              
	control	keycode  46 = Control_c       
	shift	control	keycode  46 = Control_c       
	altgr	control	keycode  46 = Control_c       
	alt	keycode  46 = Meta_c          
	shift	alt	keycode  46 = Meta_C          
	altgr	alt	keycode  46 = Meta_c          
	control	alt	keycode  46 = Meta_Control_c  
	shift	control	alt	keycode  46 = Meta_Control_c  
	altgr	control	alt	keycode  46 = Meta_Control_c  
keycode  47 = v               
keycode  48 = b               
keycode  49 = n               
keycode  50 = m               
keycode  51 = comma           
	shift	keycode  51 = semicolon       
	alt	keycode  51 = Meta_comma      
	shift	alt	keycode  51 = Meta_semicolon  
keycode  52 = period          
	shift	keycode  52 = colon           
	alt	keycode  52 = Meta_period     
	shift	alt	keycode  52 = Meta_colon      
keycode  53 = minus           
	shift	keycode  53 = underscore      
	shift	control	keycode  53 = Control_underscore
	alt	keycode  53 = Meta_minus      
	shift	control	alt	keycode  53 = Meta_Control_underscore
keycode  54 = Shift           
keycode  55 = KP_Multiply     
keycode  56 = Alt             
keycode  57 = space           
	alt	keycode  57 = Meta_space      
keycode  58 = Caps_Lock       
	control	keycode  58 = Control_Lock    
keycode  59 = F1               F13             
	control	keycode  59 = F25             
	alt	keycode  59 = Console_1       
	control	alt	keycode  59 = Console_1       
keycode  60 = F2               F14             
	control	keycode  60 = F26             
	alt	keycode  60 = Console_2       
	control	alt	keycode  60 = Console_2       
keycode  61 = F3               F15             
	control	keycode  61 = F27             
	alt	keycode  61 = Console_3       
	control	alt	keycode  61 = Console_3       
keycode  62 = F4               F16             
	control	keycode  62 = F28             
	alt	keycode  62 = Console_4       
	control	alt	keycode  62 = Console_4       
keycode  63 = F5               F17             
	control	keycode  63 = F29             
	alt	keycode  63 = Console_5       
	control	alt	keycode  63 = Console_5       
keycode  64 = F6               F18             
	control	keycode  64 = F30             
	alt	keycode  64 = Console_6       
	control	alt	keycode  64 = Console_6       
keycode  65 = F7               F19             
	control	keycode  65 = F31             
	alt	keycode  65 = Console_7       
	control	alt	keycode  65 = Console_7       
keycode  66 = F8               F20             
	control	keycode  66 = F32             
	alt	keycode  66 = Console_8       
	control	alt	keycode  66 = Console_8       
keycode  67 = F9               F21             
	control	keycode  67 = F33             
	alt	keycode  67 = Console_9       
	control	alt	keycode  67 = Console_9       
keycode  68 = F10              F22             
	control	keycode  68 = F34             
	alt	keycode  68 = Console_10      
	control	alt	keycode  68 = Console_10      
keycode  69 = Num_Lock        
keycode  70 = Scroll_Lock      Show_Memory      Show_Registers  
	control	keycode  70 = Show_State      
	alt	keycode  70 = Show_Registers  
keycode  71 = KP_7            
	alt	keycode  71 = Ascii_7         
keycode  72 = KP_8            
	alt	keycode  72 = Ascii_8         
keycode  73 = KP_9            
	alt	keycode  73 = Ascii_9         
keycode  74 = KP_Subtract     
keycode  75 = KP_4            
	alt	keycode  75 = Ascii_4         
keycode  76 = KP_5            
	alt	keycode  76 = Ascii_5         
keycode  77 = KP_6            
	alt	keycode  77 = Ascii_6         
keycode  78 = KP_Add          
keycode  79 = KP_1            
	alt	keycode  79 = Ascii_1         
keycode  80 = KP_2            
	alt	keycode  80 = Ascii_2         
keycode  81 = KP_3            
	alt	keycode  81 = Ascii_3         
keycode  82 = KP_0            
	alt	keycode  82 = Ascii_0         
keycode  83 = KP_Period       
	control	alt	keycode  83 = Boot            
keycode  84 = Last_Console    
keycode  86 = less            
	shift	keycode  86 = greater         
	alt	keycode  86 = Meta_less       
	shift	alt	keycode  86 = Meta_greater    
keycode  87 = F11              F23             
	control	keycode  87 = F35             
	alt	keycode  87 = Console_11      
	control	alt	keycode  87 = Console_11      
keycode  88 = F12              F24             
	control	keycode  88 = F36             
	alt	keycode  88 = Console_12      
	control	alt	keycode  88 = Console_12      
keycode  96 = KP_Enter        
keycode  97 = Control         
keycode  98 = KP_Divide       
keycode  99 = Compose         
keycode 100 = AltGr           
keycode 101 = Break           
keycode 102 = Find            
keycode 103 = Up              
	alt	keycode 103 = KeyboardSignal  
keycode 104 = Prior           
	shift	keycode 104 = Scroll_Backward 
keycode 105 = Left            
keycode 106 = Right           
keycode 107 = Select          
keycode 108 = Down            
keycode 109 = Next            
	shift	keycode 109 = Scroll_Forward  
keycode 110 = Insert          
keycode 111 = Remove          
	control	alt	keycode 111 = Boot            
keycode 119 = Pause           
keycode 128 = nul              nul              nul             
	control	keycode 128 = nul             
	alt	keycode 128 = nul             
	control	alt	keycode 128 = nul             
keycode 129 = nul              nul              nul             
	control	keycode 129 = nul             
	alt	keycode 129 = nul             
	control	alt	keycode 129 = nul             
keycode 130 = nul              nul              nul             
	control	keycode 130 = nul             
	alt	keycode 130 = nul             
	control	alt	keycode 130 = nul             
keycode 131 = nul              nul              nul             
	control	keycode 131 = nul             
	alt	keycode 131 = nul             
	control	alt	keycode 131 = nul             
keycode 132 = nul              nul              nul             
	control	keycode 132 = nul             
	alt	keycode 132 = nul             
	control	alt	keycode 132 = nul             
keycode 133 = nul              nul              nul             
	control	keycode 133 = nul             
	alt	keycode 133 = nul             
	control	alt	keycode 133 = nul             
keycode 134 = nul              nul              nul             
	control	keycode 134 = nul             
	alt	keycode 134 = nul             
	control	alt	keycode 134 = nul             
keycode 135 = nul              nul              nul             
	control	keycode 135 = nul             
	alt	keycode 135 = nul             
	control	alt	keycode 135 = nul             
keycode 136 = nul              nul              nul             
	control	keycode 136 = nul             
	alt	keycode 136 = nul             
	control	alt	keycode 136 = nul             
keycode 137 = nul              nul              nul             
	control	keycode 137 = nul             
	alt	keycode 137 = nul             
	control	alt	keycode 137 = nul             
keycode 138 = nul              nul              nul             
	control	keycode 138 = nul             
	alt	keycode 138 = nul             
	control	alt	keycode 138 = nul             
keycode 139 = nul              nul              nul             
	control	keycode 139 = nul             
	alt	keycode 139 = nul             
	control	alt	keycode 139 = nul             
keycode 140 = nul              nul              nul             
	control	keycode 140 = nul             
	alt	keycode 140 = nul             
	control	alt	keycode 140 = nul             
keycode 141 = nul              nul              nul             
	control	keycode 141 = nul             
	alt	keycode 141 = nul             
	control	alt	keycode 141 = nul             
keycode 142 = nul              nul              nul             
	control	keycode 142 = nul             
	alt	keycode 142 = nul             
	control	alt	keycode 142 = nul             
keycode 143 = nul              nul              nul             
	control	keycode 143 = nul             
	alt	keycode 143 = nul             
	control	alt	keycode 143 = nul             
keycode 144 = nul              nul              nul             
	control	keycode 144 = nul             
	alt	keycode 144 = nul             
	control	alt	keycode 144 = nul             
keycode 145 = nul              nul              nul             
	control	keycode 145 = nul             
	alt	keycode 145 = nul             
	control	alt	keycode 145 = nul             
keycode 146 = nul              nul              nul             
	control	keycode 146 = nul             
	alt	keycode 146 = nul             
	control	alt	keycode 146 = nul             
keycode 147 = nul              nul              nul             
	control	keycode 147 = nul             
	alt	keycode 147 = nul             
	control	alt	keycode 147 = nul             
keycode 148 = nul              nul              nul             
	control	keycode 148 = nul             
	alt	keycode 148 = nul             
	control	alt	keycode 148 = nul             
keycode 149 = nul              nul              nul             
	control	keycode 149 = nul             
	alt	keycode 149 = nul             
	control	alt	keycode 149 = nul             
keycode 150 = nul              nul              nul             
	control	keycode 150 = nul             
	alt	keycode 150 = nul             
	control	alt	keycode 150 = nul             
keycode 151 = nul              nul              nul             
	control	keycode 151 = nul             
	alt	keycode 151 = nul             
	control	alt	keycode 151 = nul             
keycode 152 = nul              nul              nul             
	control	keycode 152 = nul             
	alt	keycode 152 = nul             
	control	alt	keycode 152 = nul             
keycode 153 = nul              nul              nul             
	control	keycode 153 = nul             
	alt	keycode 153 = nul             
	control	alt	keycode 153 = nul             
keycode 154 = nul              nul              nul             
	control	keycode 154 = nul             
	alt	keycode 154 = nul             
	control	alt	keycode 154 = nul             
keycode 155 = nul              nul              nul             
	control	keycode 155 = nul             
	alt	keycode 155 = nul             
	control	alt	keycode 155 = nul             
keycode 156 = nul              nul              nul             
	control	keycode 156 = nul             
	alt	keycode 156 = nul             
	control	alt	keycode 156 = nul             
keycode 157 = nul              nul              nul             
	control	keycode 157 = nul             
	alt	keycode 157 = nul             
	control	alt	keycode 157 = nul             
keycode 158 = nul              nul              nul             
	control	keycode 158 = nul             
	alt	keycode 158 = nul             
	control	alt	keycode 158 = nul             
keycode 159 = nul              nul              nul             
	control	keycode 159 = nul             
	alt	keycode 159 = nul             
	control	alt	keycode 159 = nul             
keycode 160 = nul              nul              nul             
	control	keycode 160 = nul             
	alt	keycode 160 = nul             
	control	alt	keycode 160 = nul             
keycode 161 = nul              nul              nul             
	control	keycode 161 = nul             
	alt	keycode 161 = nul             
	control	alt	keycode 161 = nul             
keycode 162 = nul              nul              nul             
	control	keycode 162 = nul             
	alt	keycode 162 = nul             
	control	alt	keycode 162 = nul             
keycode 163 = nul              nul              nul             
	control	keycode 163 = nul             
	alt	keycode 163 = nul             
	control	alt	keycode 163 = nul             
keycode 164 = nul              nul              nul             
	control	keycode 164 = nul             
	alt	keycode 164 = nul             
	control	alt	keycode 164 = nul             
keycode 165 = nul              nul              nul             
	control	keycode 165 = nul             
	alt	keycode 165 = nul             
	control	alt	keycode 165 = nul             
keycode 166 = nul              nul              nul             
	control	keycode 166 = nul             
	alt	keycode 166 = nul             
	control	alt	keycode 166 = nul             
keycode 167 = nul              nul              nul             
	control	keycode 167 = nul             
	alt	keycode 167 = nul             
	control	alt	keycode 167 = nul             
keycode 168 = nul              nul              nul             
	control	keycode 168 = nul             
	alt	keycode 168 = nul             
	control	alt	keycode 168 = nul             
keycode 169 = nul              nul              nul             
	control	keycode 169 = nul             
	alt	keycode 169 = nul             
	control	alt	keycode 169 = nul             
keycode 170 = nul              nul              nul             
	control	keycode 170 = nul             
	alt	keycode 170 = nul             
	control	alt	keycode 170 = nul             
keycode 171 = nul              nul              nul             
	control	keycode 171 = nul             
	alt	keycode 171 = nul             
	control	alt	keycode 171 = nul             
keycode 172 = nul              nul              nul             
	control	keycode 172 = nul             
	alt	keycode 172 = nul             
	control	alt	keycode 172 = nul             
keycode 173 = nul              nul              nul             
	control	keycode 173 = nul             
	alt	keycode 173 = nul             
	control	alt	keycode 173 = nul             
keycode 174 = nul              nul              nul             
	control	keycode 174 = nul             
	alt	keycode 174 = nul             
	control	alt	keycode 174 = nul             
keycode 175 = nul              nul              nul             
	control	keycode 175 = nul             
	alt	keycode 175 = nul             
	control	alt	keycode 175 = nul             
keycode 176 = nul              nul              nul             
	control	keycode 176 = nul             
	alt	keycode 176 = nul             
	control	alt	keycode 176 = nul             
keycode 177 = nul              nul              nul             
	control	keycode 177 = nul             
	alt	keycode 177 = nul             
	control	alt	keycode 177 = nul             
keycode 178 = nul              nul              nul             
	control	keycode 178 = nul             
	alt	keycode 178 = nul             
	control	alt	keycode 178 = nul             
keycode 179 = nul              nul              nul             
	control	keycode 179 = nul             
	alt	keycode 179 = nul             
	control	alt	keycode 179 = nul             
keycode 180 = nul              nul              nul             
	control	keycode 180 = nul             
	alt	keycode 180 = nul             
	control	alt	keycode 180 = nul             
keycode 181 = nul              nul              nul             
	control	keycode 181 = nul             
	alt	keycode 181 = nul             
	control	alt	keycode 181 = nul             
keycode 182 = nul              nul              nul             
	control	keycode 182 = nul             
	alt	keycode 182 = nul             
	control	alt	keycode 182 = nul             
keycode 183 = nul              nul              nul             
	control	keycode 183 = nul             
	alt	keycode 183 = nul             
	control	alt	keycode 183 = nul             
keycode 184 = nul              nul              nul             
	control	keycode 184 = nul             
	alt	keycode 184 = nul             
	control	alt	keycode 184 = nul             
keycode 185 = nul              nul              nul             
	control	keycode 185 = nul             
	alt	keycode 185 = nul             
	control	alt	keycode 185 = nul             
keycode 186 = nul              nul              nul             
	control	keycode 186 = nul             
	alt	keycode 186 = nul             
	control	alt	keycode 186 = nul             
keycode 187 = nul              nul              nul             
	control	keycode 187 = nul             
	alt	keycode 187 = nul             
	control	alt	keycode 187 = nul             
keycode 188 = nul              nul              nul             
	control	keycode 188 = nul             
	alt	keycode 188 = nul             
	control	alt	keycode 188 = nul             
keycode 189 = nul              nul              nul             
	control	keycode 189 = nul             
	alt	keycode 189 = nul             
	control	alt	keycode 189 = nul             
keycode 190 = nul              nul              nul             
	control	keycode 190 = nul             
	alt	keycode 190 = nul             
	control	alt	keycode 190 = nul             
keycode 191 = nul              nul              nul             
	control	keycode 191 = nul             
	alt	keycode 191 = nul             
	control	alt	keycode 191 = nul             
keycode 192 = nul              nul              nul             
	control	keycode 192 = nul             
	alt	keycode 192 = nul             
	control	alt	keycode 192 = nul             
keycode 193 = nul              nul              nul             
	control	keycode 193 = nul             
	alt	keycode 193 = nul             
	control	alt	keycode 193 = nul             
keycode 194 = nul              nul              nul             
	control	keycode 194 = nul             
	alt	keycode 194 = nul             
	control	alt	keycode 194 = nul             
keycode 195 = nul              nul              nul             
	control	keycode 195 = nul             
	alt	keycode 195 = nul             
	control	alt	keycode 195 = nul             
keycode 196 = nul              nul              nul             
	control	keycode 196 = nul             
	alt	keycode 196 = nul             
	control	alt	keycode 196 = nul             
keycode 197 = nul              nul              nul             
	control	keycode 197 = nul             
	alt	keycode 197 = nul             
	control	alt	keycode 197 = nul             
keycode 198 = nul              nul              nul             
	control	keycode 198 = nul             
	alt	keycode 198 = nul             
	control	alt	keycode 198 = nul             
keycode 199 = nul              nul              nul             
	control	keycode 199 = nul             
	alt	keycode 199 = nul             
	control	alt	keycode 199 = nul             
keycode 200 = nul              nul              nul             
	control	keycode 200 = nul             
	alt	keycode 200 = nul             
	control	alt	keycode 200 = nul             
keycode 201 = nul              nul              nul             
	control	keycode 201 = nul             
	alt	keycode 201 = nul             
	control	alt	keycode 201 = nul             
keycode 202 = nul              nul              nul             
	control	keycode 202 = nul             
	alt	keycode 202 = nul             
	control	alt	keycode 202 = nul             
keycode 203 = nul              nul              nul             
	control	keycode 203 = nul             
	alt	keycode 203 = nul             
	control	alt	keycode 203 = nul             
keycode 204 = nul              nul              nul             
	control	keycode 204 = nul             
	alt	keycode 204 = nul             
	control	alt	keycode 204 = nul             
keycode 205 = nul              nul              nul             
	control	keycode 205 = nul             
	alt	keycode 205 = nul             
	control	alt	keycode 205 = nul             
keycode 206 = nul              nul              nul             
	control	keycode 206 = nul             
	alt	keycode 206 = nul             
	control	alt	keycode 206 = nul             
keycode 207 = nul              nul              nul             
	control	keycode 207 = nul             
	alt	keycode 207 = nul             
	control	alt	keycode 207 = nul             
keycode 208 = nul              nul              nul             
	control	keycode 208 = nul             
	alt	keycode 208 = nul             
	control	alt	keycode 208 = nul             
keycode 209 = nul              nul              nul             
	control	keycode 209 = nul             
	alt	keycode 209 = nul             
	control	alt	keycode 209 = nul             
keycode 210 = nul              nul              nul             
	control	keycode 210 = nul             
	alt	keycode 210 = nul             
	control	alt	keycode 210 = nul             
keycode 211 = nul              nul              nul             
	control	keycode 211 = nul             
	alt	keycode 211 = nul             
	control	alt	keycode 211 = nul             
keycode 212 = nul              nul              nul             
	control	keycode 212 = nul             
	alt	keycode 212 = nul             
	control	alt	keycode 212 = nul             
keycode 213 = nul              nul              nul             
	control	keycode 213 = nul             
	alt	keycode 213 = nul             
	control	alt	keycode 213 = nul             
keycode 214 = nul              nul              nul             
	control	keycode 214 = nul             
	alt	keycode 214 = nul             
	control	alt	keycode 214 = nul             
keycode 215 = nul              nul              nul             
	control	keycode 215 = nul             
	alt	keycode 215 = nul             
	control	alt	keycode 215 = nul             
keycode 216 = nul              nul              nul             
	control	keycode 216 = nul             
	alt	keycode 216 = nul             
	control	alt	keycode 216 = nul             
keycode 217 = nul              nul              nul             
	control	keycode 217 = nul             
	alt	keycode 217 = nul             
	control	alt	keycode 217 = nul             
keycode 218 = nul              nul              nul             
	control	keycode 218 = nul             
	alt	keycode 218 = nul             
	control	alt	keycode 218 = nul             
keycode 219 = nul              nul              nul             
	control	keycode 219 = nul             
	alt	keycode 219 = nul             
	control	alt	keycode 219 = nul             
keycode 220 = nul              nul              nul             
	control	keycode 220 = nul             
	alt	keycode 220 = nul             
	control	alt	keycode 220 = nul             
keycode 221 = nul              nul              nul             
	control	keycode 221 = nul             
	alt	keycode 221 = nul             
	control	alt	keycode 221 = nul             
keycode 222 = nul              nul              nul             
	control	keycode 222 = nul             
	alt	keycode 222 = nul             
	control	alt	keycode 222 = nul             
keycode 223 = nul              nul              nul             
	control	keycode 223 = nul             
	alt	keycode 223 = nul             
	control	alt	keycode 223 = nul             
keycode 224 = nul              nul              nul             
	control	keycode 224 = nul             
	alt	keycode 224 = nul             
	control	alt	keycode 224 = nul             
keycode 225 = nul              nul              nul             
	control	keycode 225 = nul             
	alt	keycode 225 = nul             
	control	alt	keycode 225 = nul             
keycode 226 = nul              nul              nul             
	control	keycode 226 = nul             
	alt	keycode 226 = nul             
	control	alt	keycode 226 = nul             
keycode 227 = nul              nul              nul             
	control	keycode 227 = nul             
	alt	keycode 227 = nul             
	control	alt	keycode 227 = nul             
keycode 228 = nul              nul              nul             
	control	keycode 228 = nul             
	alt	keycode 228 = nul             
	control	alt	keycode 228 = nul             
keycode 229 = nul              nul              nul             
	control	keycode 229 = nul             
	alt	keycode 229 = nul             
	control	alt	keycode 229 = nul             
keycode 230 = nul              nul              nul             
	control	keycode 230 = nul             
	alt	keycode 230 = nul             
	control	alt	keycode 230 = nul             
keycode 231 = nul              nul              nul             
	control	keycode 231 = nul             
	alt	keycode 231 = nul             
	control	alt	keycode 231 = nul             
keycode 232 = nul              nul              nul             
	control	keycode 232 = nul             
	alt	keycode 232 = nul             
	control	alt	keycode 232 = nul             
keycode 233 = nul              nul              nul             
	control	keycode 233 = nul             
	alt	keycode 233 = nul             
	control	alt	keycode 233 = nul             
keycode 234 = nul              nul              nul             
	control	keycode 234 = nul             
	alt	keycode 234 = nul             
	control	alt	keycode 234 = nul             
keycode 235 = nul              nul              nul             
	control	keycode 235 = nul             
	alt	keycode 235 = nul             
	control	alt	keycode 235 = nul             
keycode 236 = nul              nul              nul             
	control	keycode 236 = nul             
	alt	keycode 236 = nul             
	control	alt	keycode 236 = nul             
keycode 237 = nul              nul              nul             
	control	keycode 237 = nul             
	alt	keycode 237 = nul             
	control	alt	keycode 237 = nul             
keycode 238 = nul              nul              nul             
	control	keycode 238 = nul             
	alt	keycode 238 = nul             
	control	alt	keycode 238 = nul             
keycode 239 = nul              nul              nul             
	control	keycode 239 = nul             
	alt	keycode 239 = nul             
	control	alt	keycode 239 = nul             
keycode 240 = nul              nul              nul             
	control	keycode 240 = nul             
	alt	keycode 240 = nul             
	control	alt	keycode 240 = nul             
keycode 241 = nul              nul              nul             
	control	keycode 241 = nul             
	alt	keycode 241 = nul             
	control	alt	keycode 241 = nul             
keycode 242 = nul              nul              nul             
	control	keycode 242 = nul             
	alt	keycode 242 = nul             
	control	alt	keycode 242 = nul             
keycode 243 = nul              nul              nul             
	control	keycode 243 = nul             
	alt	keycode 243 = nul             
	control	alt	keycode 243 = nul             
keycode 244 = nul              nul              nul             
	control	keycode 244 = nul             
	alt	keycode 244 = nul             
	control	alt	keycode 244 = nul             
keycode 245 = nul              nul              nul             
	control	keycode 245 = nul             
	alt	keycode 245 = nul             
	control	alt	keycode 245 = nul             
keycode 246 = nul              nul              nul             
	control	keycode 246 = nul             
	alt	keycode 246 = nul             
	control	alt	keycode 246 = nul             
keycode 247 = nul              nul              nul             
	control	keycode 247 = nul             
	alt	keycode 247 = nul             
	control	alt	keycode 247 = nul             
keycode 248 = nul              nul              nul             
	control	keycode 248 = nul             
	alt	keycode 248 = nul             
	control	alt	keycode 248 = nul             
keycode 249 = nul              nul              nul             
	control	keycode 249 = nul             
	alt	keycode 249 = nul             
	control	alt	keycode 249 = nul             
keycode 250 = nul              nul              nul             
	control	keycode 250 = nul             
	alt	keycode 250 = nul             
	control	alt	keycode 250 = nul             
keycode 251 = nul              nul              nul             
	control	keycode 251 = nul             
	alt	keycode 251 = nul             
	control	alt	keycode 251 = nul             
keycode 252 = nul              nul              nul             
	control	keycode 252 = nul             
	alt	keycode 252 = nul             
	control	alt	keycode 252 = nul             
keycode 253 = nul              nul              nul             
	control	keycode 253 = nul             
	alt	keycode 253 = nul             
	control	alt	keycode 253 = nul             
keycode 254 = nul              nul              nul             
	control	keycode 254 = nul             
	alt	keycode 254 = nul             
	control	alt	keycode 254 = nul             
keycode 255 = nul              nul              nul             
	control	keycode 255 = nul             
	alt	keycode 255 = nul             
	control	alt	keycode 255 = nul             
string F1 = "\033[[A"
string F2 = "\033[[B"
string F3 = "\033[[C"
string F4 = "\033[[D"
string F5 = "\033[[E"
string F6 = "\033[17~"
string F7 = "\033[18~"
string F8 = "\033[19~"
string F9 = "\033[20~"
string F10 = "\033[21~"
string F11 = "\033[23~"
string F12 = "\033[24~"
string F13 = "\033[25~"
string F14 = "\033[26~"
string F15 = "\033[28~"
string F16 = "\033[29~"
string F17 = "\033[31~"
string F18 = "\033[32~"
string F19 = "\033[33~"
string F20 = "\033[34~"
string Find = "\033[1~"
string Insert = "\033[2~"
string Remove = "\033[3~"
string Select = "\033[4~"
string Prior = "\033[5~"
string Next = "\033[6~"
string Macro = "\033[M"
string Pause = "\033[P"
compose '`' 'A' to Agrave
compose '`' 'a' to agrave
compose '\'' 'A' to Aacute
compose '\'' 'a' to aacute
compose '^' 'A' to Acircumflex
compose '^' 'a' to acircumflex
compose '~' 'A' to Atilde
compose '~' 'a' to atilde
compose '"' 'A' to Adiaeresis
compose '"' 'a' to adiaeresis
compose 'O' 'A' to Aring
compose 'o' 'a' to aring
compose '0' 'A' to Aring
compose '0' 'a' to aring
compose 'A' 'A' to Aring
compose 'a' 'a' to aring
compose 'A' 'E' to AE
compose 'a' 'e' to ae
compose ',' 'C' to Ccedilla
compose ',' 'c' to ccedilla
compose '`' 'E' to Egrave
compose '`' 'e' to egrave
compose '\'' 'E' to Eacute
compose '\'' 'e' to eacute
compose '^' 'E' to Ecircumflex
compose '^' 'e' to ecircumflex
compose '"' 'E' to Ediaeresis
compose '"' 'e' to ediaeresis
compose '`' 'I' to Igrave
compose '`' 'i' to igrave
compose '\'' 'I' to Iacute
compose '\'' 'i' to iacute
compose '^' 'I' to Icircumflex
compose '^' 'i' to icircumflex
compose '"' 'I' to Idiaeresis
compose '"' 'i' to idiaeresis
compose '-' 'D' to ETH
compose '-' 'd' to eth
compose '~' 'N' to Ntilde
compose '~' 'n' to ntilde
compose '`' 'O' to Ograve
compose '`' 'o' to ograve
compose '\'' 'O' to Oacute
compose '\'' 'o' to oacute
compose '^' 'O' to Ocircumflex
compose '^' 'o' to ocircumflex
compose '~' 'O' to Otilde
compose '~' 'o' to otilde
compose '"' 'O' to Odiaeresis
compose '"' 'o' to odiaeresis
compose '/' 'O' to Ooblique
compose '/' 'o' to oslash
compose '`' 'U' to Ugrave
compose '`' 'u' to ugrave
compose '\'' 'U' to Uacute
compose '\'' 'u' to uacute
compose '^' 'U' to Ucircumflex
compose '^' 'u' to ucircumflex
compose '"' 'U' to Udiaeresis
compose '"' 'u' to udiaeresis
compose '\'' 'Y' to Yacute
compose '\'' 'y' to yacute
compose 'T' 'H' to THORN
compose 't' 'h' to thorn
compose 's' 's' to ssharp
compose '"' 'y' to ydiaeresis
compose 's' 'z' to ssharp
compose 'i' 'j' to ydiaeresis
```keymaps 0-6,8-10,12-14
keycode   1 = Escape          
	alt	keycode   1 = Meta_Escape     
keycode   2 = one             
	shift	keycode   2 = exclam          
	alt	keycode   2 = Meta_one        
	shift	alt	keycode   2 = Meta_exclam     
keycode   3 = two             
	shift	keycode   3 = quotedbl        
	alt	keycode   3 = Meta_two        
	shift	alt	keycode   3 = Meta_quotedbl   
keycode   4 = three           
	shift	keycode   4 = VoidSymbol      
	alt	keycode   4 = Meta_three      
keycode   5 = four            
	shift	keycode   5 = dollar          
	alt	keycode   5 = Meta_four       
	shift	alt	keycode   5 = Meta_dollar     
keycode   6 = five            
	shift	keycode   6 = percent         
	alt	keycode   6 = Meta_five       
	shift	alt	keycode   6 = Meta_percent    
keycode   7 = six             
	shift	keycode   7 = ampersand       
	alt	keycode   7 = Meta_six        
	shift	alt	keycode   7 = Meta_ampersand  
keycode   8 = seven           
	shift	keycode   8 = slash           
	alt	keycode   8 = Meta_seven      
	shift	alt	keycode   8 = Meta_slash      
keycode   9 = eight           
	shift	keycode   9 = parenleft       
	altgr	keycode   9 = braceleft       
	alt	keycode   9 = Meta_eight      
	shift	alt	keycode   9 = Meta_parenleft  
	altgr	alt	keycode   9 = Meta_braceleft  
keycode  10 = nine            
	shift	keycode  10 = parenright      
	altgr	keycode  10 = braceright      
	alt	keycode  10 = Meta_nine       
	shift	alt	keycode  10 = Meta_parenright 
	altgr	alt	keycode  10 = Meta_braceright 
keycode  11 = zero            
	shift	keycode  11 = equal           
	altgr	keycode  11 = asciitilde      
	alt	keycode  11 = Meta_zero       
	shift	alt	keycode  11 = Meta_equal      
	altgr	alt	keycode  11 = Meta_asciitilde 
keycode  12 = apostrophe      
	shift	keycode  12 = question        
	altgr	keycode  12 = grave           
	alt	keycode  12 = Meta_apostrophe 
	shift	alt	keycode  12 = Meta_question   
	altgr	alt	keycode  12 = Meta_grave      
keycode  13 =
	shift	keycode  13 = asciicircum     
	shift	control	keycode  13 = Control_asciicircum
	alt	keycode  13 = 0x08ec          
	shift	alt	keycode  13 = Meta_asciicircum
	shift	control	alt	keycode  13 = Meta_Control_asciicircum
keycode  14 = Delete          
	alt	keycode  14 = Meta_Delete     
keycode  15 = Tab             
	alt	keycode  15 = Meta_Tab        
keycode  16 = q               
keycode  17 = w               
keycode  18 = +e               +E              
	shift	altgr	keycode  18 = +E              
	control	keycode  18 = Control_e       
	shift	control	keycode  18 = Control_e       
	altgr	control	keycode  18 = Control_e       
	alt	keycode  18 = Meta_e          
	shift	alt	keycode  18 = Meta_E          
	altgr	alt	keycode  18 = Meta_e          
	control	alt	keycode  18 = Meta_Control_e  
	shift	control	alt	keycode  18 = Meta_Control_e  
	altgr	control	alt	keycode  18 = Meta_Control_e  
keycode  19 = r               
keycode  20 = t               
keycode  21 = y               
keycode  22 = u               
keycode  23 = i               
keycode  24 = o               
keycode  25 = p               
keycode  26 =
	altgr	keycode  26 = bracketleft     
	altgr	alt	keycode  26 = Meta_bracketleft
keycode  27 = plus            
	shift	keycode  27 = asterisk        
	altgr	keycode  27 = bracketright    
	altgr	control	keycode  27 = Control_bracketright
	alt	keycode  27 = Meta_plus       
	shift	alt	keycode  27 = Meta_asterisk   
	altgr	alt	keycode  27 = Meta_bracketright
	altgr	control	alt	keycode  27 = Meta_Control_bracketright
keycode  28 = Return          
keycode  29 = Control         
keycode  30 = a               
keycode  31 = s               
keycode  32 = d               
keycode  33 = f               
keycode  34 = g               
keycode  35 = h               
keycode  36 = j               
keycode  37 = k               
keycode  38 = l               
keycode  39 =
	altgr	keycode  39 = at              
	altgr	alt	keycode  39 = Meta_at         
keycode  40 =
	altgr	keycode  40 = numbersign      
	altgr	alt	keycode  40 = Meta_numbersign 
keycode  41 = backslash       
	shift	keycode  41 = bar             
	control	keycode  41 = Control_backslash
	alt	keycode  41 = Meta_backslash  
	shift	alt	keycode  41 = Meta_bar        
	control	alt	keycode  41 = Meta_Control_backslash
keycode  42 = Shift           
keycode  43 = ugrave          
	shift	keycode  43 = section         
	altgr	keycode  43 = uacute          
keycode  44 = z               
keycode  45 = x               
keycode  46 = +c               +C              
	control	keycode  46 = Control_c       
	shift	control	keycode  46 = Control_c       
	altgr	control	keycode  46 = Control_c       
	alt	keycode  46 = Meta_c          
	shift	alt	keycode  46 = Meta_C          
	altgr	alt	keycode  46 = Meta_c          
	control	alt	keycode  46 = Meta_Control_c  
	shift	control	alt	keycode  46 = Meta_Control_c  
	altgr	control	alt	keycode  46 = Meta_Control_c  
keycode  47 = v               
keycode  48 = b               
keycode  49 = n               
keycode  50 = m               
keycode  51 = comma           
	shift	keycode  51 = semicolon       
	alt	keycode  51 = Meta_comma      
	shift	alt	keycode  51 = Meta_semicolon  
keycode  52 = period          
	shift	keycode  52 = colon           
	alt	keycode  52 = Meta_period     
	shift	alt	keycode  52 = Meta_colon      
keycode  53 = minus           
	shift	keycode  53 = underscore      
	shift	control	keycode  53 = Control_underscore
	alt	keycode  53 = Meta_minus      
	shift	control	alt	keycode  53 = Meta_Control_underscore
keycode  54 = Shift           
keycode  55 = KP_Multiply     
keycode  56 = Alt             
keycode  57 = space           
	alt	keycode  57 = Meta_space      
keycode  58 = Caps_Lock       
	control	keycode  58 = Control_Lock    
keycode  59 = F1               F13             
	control	keycode  59 = F25             
	alt	keycode  59 = Console_1       
	control	alt	keycode  59 = Console_1       
keycode  60 = F2               F14             
	control	keycode  60 = F26             
	alt	keycode  60 = Console_2       
	control	alt	keycode  60 = Console_2       
keycode  61 = F3               F15             
	control	keycode  61 = F27             
	alt	keycode  61 = Console_3       
	control	alt	keycode  61 = Console_3       
keycode  62 = F4               F16             
	control	keycode  62 = F28             
	alt	keycode  62 = Console_4       
	control	alt	keycode  62 = Console_4       
keycode  63 = F5               F17             
	control	keycode  63 = F29             
	alt	keycode  63 = Console_5       
	control	alt	keycode  63 = Console_5       
keycode  64 = F6               F18             
	control	keycode  64 = F30             
	alt	keycode  64 = Console_6       
	control	alt	keycode  64 = Console_6       
keycode  65 = F7               F19             
	control	keycode  65 = F31             
	alt	keycode  65 = Console_7       
	control	alt	keycode  65 = Console_7       
keycode  66 = F8               F20             
	control	keycode  66 = F32             
	alt	keycode  66 = Console_8       
	control	alt	keycode  66 = Console_8       
keycode  67 = F9               F21             
	control	keycode  67 = F33             
	alt	keycode  67 = Console_9       
	control	alt	keycode  67 = Console_9       
keycode  68 = F10              F22             
	control	keycode  68 = F34             
	alt	keycode  68 = Console_10      
	control	alt	keycode  68 = Console_10      
keycode  69 = Num_Lock        
keycode  70 = Scroll_Lock      Show_Memory      Show_Registers  
	control	keycode  70 = Show_State      
	alt	keycode  70 = Show_Registers  
keycode  71 = KP_7            
	alt	keycode  71 = Ascii_7         
keycode  72 = KP_8            
	alt	keycode  72 = Ascii_8         
keycode  73 = KP_9            
	alt	keycode  73 = Ascii_9         
keycode  74 = KP_Subtract     
keycode  75 = KP_4            
	alt	keycode  75 = Ascii_4         
keycode  76 = KP_5            
	alt	keycode  76 = Ascii_5         
keycode  77 = KP_6            
	alt	keycode  77 = Ascii_6         
keycode  78 = KP_Add          
keycode  79 = KP_1            
	alt	keycode  79 = Ascii_1         
keycode  80 = KP_2            
	alt	keycode  80 = Ascii_2         
keycode  81 = KP_3            
	alt	keycode  81 = Ascii_3         
keycode  82 = KP_0            
	alt	keycode  82 = Ascii_0         
keycode  83 = KP_Period       
	control	alt	keycode  83 = Boot            
keycode  84 = Last_Console    
keycode  86 = less            
	shift	keycode  86 = greater         
	alt	keycode  86 = Meta_less       
	shift	alt	keycode  86 = Meta_greater    
keycode  87 = F11              F23             
	control	keycode  87 = F35             
	alt	keycode  87 = Console_11      
	control	alt	keycode  87 = Console_11      
keycode  88 = F12              F24             
	control	keycode  88 = F36             
	alt	keycode  88 = Console_12      
	control	alt	keycode  88 = Console_12      
keycode  96 = KP_Enter        
keycode  97 = Control         
keycode  98 = KP_Divide       
keycode  99 = Compose         
keycode 100 = AltGr           
keycode 101 = Break           
keycode 102 = Find            
keycode 103 = Up              
	alt	keycode 103 = KeyboardSignal  
keycode 104 = Prior           
	shift	keycode 104 = Scroll_Backward 
keycode 105 = Left            
keycode 106 = Right           
keycode 107 = Select          
keycode 108 = Down            
keycode 109 = Next            
	shift	keycode 109 = Scroll_Forward  
keycode 110 = Insert          
keycode 111 = Remove          
	control	alt	keycode 111 = Boot            
keycode 119 = Pause           
keycode 128 = nul              nul              nul             
	control	keycode 128 = nul             
	alt	keycode 128 = nul             
	control	alt	keycode 128 = nul             
keycode 129 = nul              nul              nul             
	control	keycode 129 = nul             
	alt	keycode 129 = nul             
	control	alt	keycode 129 = nul             
keycode 130 = nul              nul              nul             
	control	keycode 130 = nul             
	alt	keycode 130 = nul             
	control	alt	keycode 130 = nul             
keycode 131 = nul              nul              nul             
	control	keycode 131 = nul             
	alt	keycode 131 = nul             
	control	alt	keycode 131 = nul             
keycode 132 = nul              nul              nul             
	control	keycode 132 = nul             
	alt	keycode 132 = nul             
	control	alt	keycode 132 = nul             
keycode 133 = nul              nul              nul             
	control	keycode 133 = nul             
	alt	keycode 133 = nul             
	control	alt	keycode 133 = nul             
keycode 134 = nul              nul              nul             
	control	keycode 134 = nul             
	alt	keycode 134 = nul             
	control	alt	keycode 134 = nul             
keycode 135 = nul              nul              nul             
	control	keycode 135 = nul             
	alt	keycode 135 = nul             
	control	alt	keycode 135 = nul             
keycode 136 = nul              nul              nul             
	control	keycode 136 = nul             
	alt	keycode 136 = nul             
	control	alt	keycode 136 = nul             
keycode 137 = nul              nul              nul             
	control	keycode 137 = nul             
	alt	keycode 137 = nul             
	control	alt	keycode 137 = nul             
keycode 138 = nul              nul              nul             
	control	keycode 138 = nul             
	alt	keycode 138 = nul             
	control	alt	keycode 138 = nul             
keycode 139 = nul              nul              nul             
	control	keycode 139 = nul             
	alt	keycode 139 = nul             
	control	alt	keycode 139 = nul             
keycode 140 = nul              nul              nul             
	control	keycode 140 = nul             
	alt	keycode 140 = nul             
	control	alt	keycode 140 = nul             
keycode 141 = nul              nul              nul             
	control	keycode 141 = nul             
	alt	keycode 141 = nul             
	control	alt	keycode 141 = nul             
keycode 142 = nul              nul              nul             
	control	keycode 142 = nul             
	alt	keycode 142 = nul             
	control	alt	keycode 142 = nul             
keycode 143 = nul              nul              nul             
	control	keycode 143 = nul             
	alt	keycode 143 = nul             
	control	alt	keycode 143 = nul             
keycode 144 = nul              nul              nul             
	control	keycode 144 = nul             
	alt	keycode 144 = nul             
	control	alt	keycode 144 = nul             
keycode 145 = nul              nul              nul             
	control	keycode 145 = nul             
	alt	keycode 145 = nul             
	control	alt	keycode 145 = nul             
keycode 146 = nul              nul              nul             
	control	keycode 146 = nul             
	alt	keycode 146 = nul             
	control	alt	keycode 146 = nul             
keycode 147 = nul              nul              nul             
	control	keycode 147 = nul             
	alt	keycode 147 = nul             
	control	alt	keycode 147 = nul             
keycode 148 = nul              nul              nul             
	control	keycode 148 = nul             
	alt	keycode 148 = nul             
	control	alt	keycode 148 = nul             
keycode 149 = nul              nul              nul             
	control	keycode 149 = nul             
	alt	keycode 149 = nul             
	control	alt	keycode 149 = nul             
keycode 150 = nul              nul              nul             
	control	keycode 150 = nul             
	alt	keycode 150 = nul             
	control	alt	keycode 150 = nul             
keycode 151 = nul              nul              nul             
	control	keycode 151 = nul             
	alt	keycode 151 = nul             
	control	alt	keycode 151 = nul             
keycode 152 = nul              nul              nul             
	control	keycode 152 = nul             
	alt	keycode 152 = nul             
	control	alt	keycode 152 = nul             
keycode 153 = nul              nul              nul             
	control	keycode 153 = nul             
	alt	keycode 153 = nul             
	control	alt	keycode 153 = nul             
keycode 154 = nul              nul              nul             
	control	keycode 154 = nul             
	alt	keycode 154 = nul             
	control	alt	keycode 154 = nul             
keycode 155 = nul              nul              nul             
	control	keycode 155 = nul             
	alt	keycode 155 = nul             
	control	alt	keycode 155 = nul             
keycode 156 = nul              nul              nul             
	control	keycode 156 = nul             
	alt	keycode 156 = nul             
	control	alt	keycode 156 = nul             
keycode 157 = nul              nul              nul             
	control	keycode 157 = nul             
	alt	keycode 157 = nul             
	control	alt	keycode 157 = nul             
keycode 158 = nul              nul              nul             
	control	keycode 158 = nul             
	alt	keycode 158 = nul             
	control	alt	keycode 158 = nul             
keycode 159 = nul              nul              nul             
	control	keycode 159 = nul             
	alt	keycode 159 = nul             
	control	alt	keycode 159 = nul             
keycode 160 = nul              nul              nul             
	control	keycode 160 = nul             
	alt	keycode 160 = nul             
	control	alt	keycode 160 = nul             
keycode 161 = nul              nul              nul             
	control	keycode 161 = nul             
	alt	keycode 161 = nul             
	control	alt	keycode 161 = nul             
keycode 162 = nul              nul              nul             
	control	keycode 162 = nul             
	alt	keycode 162 = nul             
	control	alt	keycode 162 = nul             
keycode 163 = nul              nul              nul             
	control	keycode 163 = nul             
	alt	keycode 163 = nul             
	control	alt	keycode 163 = nul             
keycode 164 = nul              nul              nul             
	control	keycode 164 = nul             
	alt	keycode 164 = nul             
	control	alt	keycode 164 = nul             
keycode 165 = nul              nul              nul             
	control	keycode 165 = nul             
	alt	keycode 165 = nul             
	control	alt	keycode 165 = nul             
keycode 166 = nul              nul              nul             
	control	keycode 166 = nul             
	alt	keycode 166 = nul             
	control	alt	keycode 166 = nul             
keycode 167 = nul              nul              nul             
	control	keycode 167 = nul             
	alt	keycode 167 = nul             
	control	alt	keycode 167 = nul             
keycode 168 = nul              nul              nul             
	control	keycode 168 = nul             
	alt	keycode 168 = nul             
	control	alt	keycode 168 = nul             
keycode 169 = nul              nul              nul             
	control	keycode 169 = nul             
	alt	keycode 169 = nul             
	control	alt	keycode 169 = nul             
keycode 170 = nul              nul              nul             
	control	keycode 170 = nul             
	alt	keycode 170 = nul             
	control	alt	keycode 170 = nul             
keycode 171 = nul              nul              nul             
	control	keycode 171 = nul             
	alt	keycode 171 = nul             
	control	alt	keycode 171 = nul             
keycode 172 = nul              nul              nul             
	control	keycode 172 = nul             
	alt	keycode 172 = nul             
	control	alt	keycode 172 = nul             
keycode 173 = nul              nul              nul             
	control	keycode 173 = nul             
	alt	keycode 173 = nul             
	control	alt	keycode 173 = nul             
keycode 174 = nul              nul              nul             
	control	keycode 174 = nul             
	alt	keycode 174 = nul             
	control	alt	keycode 174 = nul             
keycode 175 = nul              nul              nul             
	control	keycode 175 = nul             
	alt	keycode 175 = nul             
	control	alt	keycode 175 = nul             
keycode 176 = nul              nul              nul             
	control	keycode 176 = nul             
	alt	keycode 176 = nul             
	control	alt	keycode 176 = nul             
keycode 177 = nul              nul              nul             
	control	keycode 177 = nul             
	alt	keycode 177 = nul             
	control	alt	keycode 177 = nul             
keycode 178 = nul              nul              nul             
	control	keycode 178 = nul             
	alt	keycode 178 = nul             
	control	alt	keycode 178 = nul             
keycode 179 = nul              nul              nul             
	control	keycode 179 = nul             
	alt	keycode 179 = nul             
	control	alt	keycode 179 = nul             
keycode 180 = nul              nul              nul             
	control	keycode 180 = nul             
	alt	keycode 180 = nul             
	control	alt	keycode 180 = nul             
keycode 181 = nul              nul              nul             
	control	keycode 181 = nul             
	alt	keycode 181 = nul             
	control	alt	keycode 181 = nul             
keycode 182 = nul              nul              nul             
	control	keycode 182 = nul             
	alt	keycode 182 = nul             
	control	alt	keycode 182 = nul             
keycode 183 = nul              nul              nul             
	control	keycode 183 = nul             
	alt	keycode 183 = nul             
	control	alt	keycode 183 = nul             
keycode 184 = nul              nul              nul             
	control	keycode 184 = nul             
	alt	keycode 184 = nul             
	control	alt	keycode 184 = nul             
keycode 185 = nul              nul              nul             
	control	keycode 185 = nul             
	alt	keycode 185 = nul             
	control	alt	keycode 185 = nul             
keycode 186 = nul              nul              nul             
	control	keycode 186 = nul             
	alt	keycode 186 = nul             
	control	alt	keycode 186 = nul             
keycode 187 = nul              nul              nul             
	control	keycode 187 = nul             
	alt	keycode 187 = nul             
	control	alt	keycode 187 = nul             
keycode 188 = nul              nul              nul             
	control	keycode 188 = nul             
	alt	keycode 188 = nul             
	control	alt	keycode 188 = nul             
keycode 189 = nul              nul              nul             
	control	keycode 189 = nul             
	alt	keycode 189 = nul             
	control	alt	keycode 189 = nul             
keycode 190 = nul              nul              nul             
	control	keycode 190 = nul             
	alt	keycode 190 = nul             
	control	alt	keycode 190 = nul             
keycode 191 = nul              nul              nul             
	control	keycode 191 = nul             
	alt	keycode 191 = nul             
	control	alt	keycode 191 = nul             
keycode 192 = nul              nul              nul             
	control	keycode 192 = nul             
	alt	keycode 192 = nul             
	control	alt	keycode 192 = nul             
keycode 193 = nul              nul              nul             
	control	keycode 193 = nul             
	alt	keycode 193 = nul             
	control	alt	keycode 193 = nul             
keycode 194 = nul              nul              nul             
	control	keycode 194 = nul             
	alt	keycode 194 = nul             
	control	alt	keycode 194 = nul             
keycode 195 = nul              nul              nul             
	control	keycode 195 = nul             
	alt	keycode 195 = nul             
	control	alt	keycode 195 = nul             
keycode 196 = nul              nul              nul             
	control	keycode 196 = nul             
	alt	keycode 196 = nul             
	control	alt	keycode 196 = nul             
keycode 197 = nul              nul              nul             
	control	keycode 197 = nul             
	alt	keycode 197 = nul             
	control	alt	keycode 197 = nul             
keycode 198 = nul              nul              nul             
	control	keycode 198 = nul             
	alt	keycode 198 = nul             
	control	alt	keycode 198 = nul             
keycode 199 = nul              nul              nul             
	control	keycode 199 = nul             
	alt	keycode 199 = nul             
	control	alt	keycode 199 = nul             
keycode 200 = nul              nul              nul             
	control	keycode 200 = nul             
	alt	keycode 200 = nul             
	control	alt	keycode 200 = nul             
keycode 201 = nul              nul              nul             
	control	keycode 201 = nul             
	alt	keycode 201 = nul             
	control	alt	keycode 201 = nul             
keycode 202 = nul              nul              nul             
	control	keycode 202 = nul             
	alt	keycode 202 = nul             
	control	alt	keycode 202 = nul             
keycode 203 = nul              nul              nul             
	control	keycode 203 = nul             
	alt	keycode 203 = nul             
	control	alt	keycode 203 = nul             
keycode 204 = nul              nul              nul             
	control	keycode 204 = nul             
	alt	keycode 204 = nul             
	control	alt	keycode 204 = nul             
keycode 205 = nul              nul              nul             
	control	keycode 205 = nul             
	alt	keycode 205 = nul             
	control	alt	keycode 205 = nul             
keycode 206 = nul              nul              nul             
	control	keycode 206 = nul             
	alt	keycode 206 = nul             
	control	alt	keycode 206 = nul             
keycode 207 = nul              nul              nul             
	control	keycode 207 = nul             
	alt	keycode 207 = nul             
	control	alt	keycode 207 = nul             
keycode 208 = nul              nul              nul             
	control	keycode 208 = nul             
	alt	keycode 208 = nul             
	control	alt	keycode 208 = nul             
keycode 209 = nul              nul              nul             
	control	keycode 209 = nul             
	alt	keycode 209 = nul             
	control	alt	keycode 209 = nul             
keycode 210 = nul              nul              nul             
	control	keycode 210 = nul             
	alt	keycode 210 = nul             
	control	alt	keycode 210 = nul             
keycode 211 = nul              nul              nul             
	control	keycode 211 = nul             
	alt	keycode 211 = nul             
	control	alt	keycode 211 = nul             
keycode 212 = nul              nul              nul             
	control	keycode 212 = nul             
	alt	keycode 212 = nul             
	control	alt	keycode 212 = nul             
keycode 213 = nul              nul              nul             
	control	keycode 213 = nul             
	alt	keycode 213 = nul             
	control	alt	keycode 213 = nul             
keycode 214 = nul              nul              nul             
	control	keycode 214 = nul             
	alt	keycode 214 = nul             
	control	alt	keycode 214 = nul             
keycode 215 = nul              nul              nul             
	control	keycode 215 = nul             
	alt	keycode 215 = nul             
	control	alt	keycode 215 = nul             
keycode 216 = nul              nul              nul             
	control	keycode 216 = nul             
	alt	keycode 216 = nul             
	control	alt	keycode 216 = nul             
keycode 217 = nul              nul              nul             
	control	keycode 217 = nul             
	alt	keycode 217 = nul             
	control	alt	keycode 217 = nul             
keycode 218 = nul              nul              nul             
	control	keycode 218 = nul             
	alt	keycode 218 = nul             
	control	alt	keycode 218 = nul             
keycode 219 = nul              nul              nul             
	control	keycode 219 = nul             
	alt	keycode 219 = nul             
	control	alt	keycode 219 = nul             
keycode 220 = nul              nul              nul             
	control	keycode 220 = nul             
	alt	keycode 220 = nul             
	control	alt	keycode 220 = nul             
keycode 221 = nul              nul              nul             
	control	keycode 221 = nul             
	alt	keycode 221 = nul             
	control	alt	keycode 221 = nul             
keycode 222 = nul              nul              nul             
	control	keycode 222 = nul             
	alt	keycode 222 = nul             
	control	alt	keycode 222 = nul             
keycode 223 = nul              nul              nul             
	control	keycode 223 = nul             
	alt	keycode 223 = nul             
	control	alt	keycode 223 = nul             
keycode 224 = nul              nul              nul             
	control	keycode 224 = nul             
	alt	keycode 224 = nul             
	control	alt	keycode 224 = nul             
keycode 225 = nul              nul              nul             
	control	keycode 225 = nul             
	alt	keycode 225 = nul             
	control	alt	keycode 225 = nul             
keycode 226 = nul              nul              nul             
	control	keycode 226 = nul             
	alt	keycode 226 = nul             
	control	alt	keycode 226 = nul             
keycode 227 = nul              nul              nul             
	control	keycode 227 = nul             
	alt	keycode 227 = nul             
	control	alt	keycode 227 = nul             
keycode 228 = nul              nul              nul             
	control	keycode 228 = nul             
	alt	keycode 228 = nul             
	control	alt	keycode 228 = nul             
keycode 229 = nul              nul              nul             
	control	keycode 229 = nul             
	alt	keycode 229 = nul             
	control	alt	keycode 229 = nul             
keycode 230 = nul              nul              nul             
	control	keycode 230 = nul             
	alt	keycode 230 = nul             
	control	alt	keycode 230 = nul             
keycode 231 = nul              nul              nul             
	control	keycode 231 = nul             
	alt	keycode 231 = nul             
	control	alt	keycode 231 = nul             
keycode 232 = nul              nul              nul             
	control	keycode 232 = nul             
	alt	keycode 232 = nul             
	control	alt	keycode 232 = nul             
keycode 233 = nul              nul              nul             
	control	keycode 233 = nul             
	alt	keycode 233 = nul             
	control	alt	keycode 233 = nul             
keycode 234 = nul              nul              nul             
	control	keycode 234 = nul             
	alt	keycode 234 = nul             
	control	alt	keycode 234 = nul             
keycode 235 = nul              nul              nul             
	control	keycode 235 = nul             
	alt	keycode 235 = nul             
	control	alt	keycode 235 = nul             
keycode 236 = nul              nul              nul             
	control	keycode 236 = nul             
	alt	keycode 236 = nul             
	control	alt	keycode 236 = nul             
keycode 237 = nul              nul              nul             
	control	keycode 237 = nul             
	alt	keycode 237 = nul             
	control	alt	keycode 237 = nul             
keycode 238 = nul              nul              nul             
	control	keycode 238 = nul             
	alt	keycode 238 = nul             
	control	alt	keycode 238 = nul             
keycode 239 = nul              nul              nul             
	control	keycode 239 = nul             
	alt	keycode 239 = nul             
	control	alt	keycode 239 = nul             
keycode 240 = nul              nul              nul             
	control	keycode 240 = nul             
	alt	keycode 240 = nul             
	control	alt	keycode 240 = nul             
keycode 241 = nul              nul              nul             
	control	keycode 241 = nul             
	alt	keycode 241 = nul             
	control	alt	keycode 241 = nul             
keycode 242 = nul              nul              nul             
	control	keycode 242 = nul             
	alt	keycode 242 = nul             
	control	alt	keycode 242 = nul             
keycode 243 = nul              nul              nul             
	control	keycode 243 = nul             
	alt	keycode 243 = nul             
	control	alt	keycode 243 = nul             
keycode 244 = nul              nul              nul             
	control	keycode 244 = nul             
	alt	keycode 244 = nul             
	control	alt	keycode 244 = nul             
keycode 245 = nul              nul              nul             
	control	keycode 245 = nul             
	alt	keycode 245 = nul             
	control	alt	keycode 245 = nul             
keycode 246 = nul              nul              nul             
	control	keycode 246 = nul             
	alt	keycode 246 = nul             
	control	alt	keycode 246 = nul             
keycode 247 = nul              nul              nul             
	control	keycode 247 = nul             
	alt	keycode 247 = nul             
	control	alt	keycode 247 = nul             
keycode 248 = nul              nul              nul             
	control	keycode 248 = nul             
	alt	keycode 248 = nul             
	control	alt	keycode 248 = nul             
keycode 249 = nul              nul              nul             
	control	keycode 249 = nul             
	alt	keycode 249 = nul             
	control	alt	keycode 249 = nul             
keycode 250 = nul              nul              nul             
	control	keycode 250 = nul             
	alt	keycode 250 = nul             
	control	alt	keycode 250 = nul             
keycode 251 = nul              nul              nul             
	control	keycode 251 = nul             
	alt	keycode 251 = nul             
	control	alt	keycode 251 = nul             
keycode 252 = nul              nul              nul             
	control	keycode 252 = nul             
	alt	keycode 252 = nul             
	control	alt	keycode 252 = nul             
keycode 253 = nul              nul              nul             
	control	keycode 253 = nul             
	alt	keycode 253 = nul             
	control	alt	keycode 253 = nul             
keycode 254 = nul              nul              nul             
	control	keycode 254 = nul             
	alt	keycode 254 = nul             
	control	alt	keycode 254 = nul             
keycode 255 = nul              nul              nul             
	control	keycode 255 = nul             
	alt	keycode 255 = nul             
	control	alt	keycode 255 = nul             
string F1 = "\033[[A"
string F2 = "\033[[B"
string F3 = "\033[[C"
string F4 = "\033[[D"
string F5 = "\033[[E"
string F6 = "\033[17~"
string F7 = "\033[18~"
string F8 = "\033[19~"
string F9 = "\033[20~"
string F10 = "\033[21~"
string F11 = "\033[23~"
string F12 = "\033[24~"
string F13 = "\033[25~"
string F14 = "\033[26~"
string F15 = "\033[28~"
string F16 = "\033[29~"
string F17 = "\033[31~"
string F18 = "\033[32~"
string F19 = "\033[33~"
string F20 = "\033[34~"
string Find = "\033[1~"
string Insert = "\033[2~"
string Remove = "\033[3~"
string Select = "\033[4~"
string Prior = "\033[5~"
string Next = "\033[6~"
string Macro = "\033[M"
string Pause = "\033[P"
compose '`' 'A' to Agrave
compose '`' 'a' to agrave
compose '\'' 'A' to Aacute
compose '\'' 'a' to aacute
compose '^' 'A' to Acircumflex
compose '^' 'a' to acircumflex
compose '~' 'A' to Atilde
compose '~' 'a' to atilde
compose '"' 'A' to Adiaeresis
compose '"' 'a' to adiaeresis
compose 'O' 'A' to Aring
compose 'o' 'a' to aring
compose '0' 'A' to Aring
compose '0' 'a' to aring
compose 'A' 'A' to Aring
compose 'a' 'a' to aring
compose 'A' 'E' to AE
compose 'a' 'e' to ae
compose ',' 'C' to Ccedilla
compose ',' 'c' to ccedilla
compose '`' 'E' to Egrave
compose '`' 'e' to egrave
compose '\'' 'E' to Eacute
compose '\'' 'e' to eacute
compose '^' 'E' to Ecircumflex
compose '^' 'e' to ecircumflex
compose '"' 'E' to Ediaeresis
compose '"' 'e' to ediaeresis
compose '`' 'I' to Igrave
compose '`' 'i' to igrave
compose '\'' 'I' to Iacute
compose '\'' 'i' to iacute
compose '^' 'I' to Icircumflex
compose '^' 'i' to icircumflex
compose '"' 'I' to Idiaeresis
compose '"' 'i' to idiaeresis
compose '-' 'D' to ETH
compose '-' 'd' to eth
compose '~' 'N' to Ntilde
compose '~' 'n' to ntilde
compose '`' 'O' to Ograve
compose '`' 'o' to ograve
compose '\'' 'O' to Oacute
compose '\'' 'o' to oacute
compose '^' 'O' to Ocircumflex
compose '^' 'o' to ocircumflex
compose '~' 'O' to Otilde
compose '~' 'o' to otilde
compose '"' 'O' to Odiaeresis
compose '"' 'o' to odiaeresis
compose '/' 'O' to Ooblique
compose '/' 'o' to oslash
compose '`' 'U' to Ugrave
compose '`' 'u' to ugrave
compose '\'' 'U' to Uacute
compose '\'' 'u' to uacute
compose '^' 'U' to Ucircumflex
compose '^' 'u' to ucircumflex
compose '"' 'U' to Udiaeresis
compose '"' 'u' to udiaeresis
compose '\'' 'Y' to Yacute
compose '\'' 'y' to yacute
compose 'T' 'H' to THORN
compose 't' 'h' to thorn
compose 's' 's' to ssharp
compose '"' 'y' to ydiaeresis
compose 's' 'z' to ssharp
compose 'i' 'j' to ydiaeresis
keymaps 0-6,8-10,12-14
keycode   1 = Escape          
	alt	keycode   1 = Meta_Escape     
keycode   2 = one             
	shift	keycode   2 = exclam          
	alt	keycode   2 = Meta_one        
	shift	alt	keycode   2 = Meta_exclam     
keycode   3 = two             
	shift	keycode   3 = quotedbl        
	alt	keycode   3 = Meta_two        
	shift	alt	keycode   3 = Meta_quotedbl   
keycode   4 = three           
	shift	keycode   4 = VoidSymbol      
	alt	keycode   4 = Meta_three      
keycode   5 = four            
	shift	keycode   5 = dollar          
	alt	keycode   5 = Meta_four       
	shift	alt	keycode   5 = Meta_dollar     
keycode   6 = five            
	shift	keycode   6 = percent         
	alt	keycode   6 = Meta_five       
	shift	alt	keycode   6 = Meta_percent    
keycode   7 = six             
	shift	keycode   7 = ampersand       
	alt	keycode   7 = Meta_six        
	shift	alt	keycode   7 = Meta_ampersand  
keycode   8 = seven           
	shift	keycode   8 = slash           
	alt	keycode   8 = Meta_seven      
	shift	alt	keycode   8 = Meta_slash      
keycode   9 = eight           
	shift	keycode   9 = parenleft       
	altgr	keycode   9 = braceleft       
	alt	keycode   9 = Meta_eight      
	shift	alt	keycode   9 = Meta_parenleft  
	altgr	alt	keycode   9 = Meta_braceleft  
keycode  10 = nine            
	shift	keycode  10 = parenright      
	altgr	keycode  10 = braceright      
	alt	keycode  10 = Meta_nine       
	shift	alt	keycode  10 = Meta_parenright 
	altgr	alt	keycode  10 = Meta_braceright 
keycode  11 = zero            
	shift	keycode  11 = equal           
	altgr	keycode  11 = asciitilde      
	alt	keycode  11 = Meta_zero       
	shift	alt	keycode  11 = Meta_equal      
	altgr	alt	keycode  11 = Meta_asciitilde 
keycode  12 = apostrophe      
	shift	keycode  12 = question        
	altgr	keycode  12 = grave           
	alt	keycode  12 = Meta_apostrophe 
	shift	alt	keycode  12 = Meta_question   
	altgr	alt	keycode  12 = Meta_grave      
keycode  13 =
	shift	keycode  13 = asciicircum     
	shift	control	keycode  13 = Control_asciicircum
	alt	keycode  13 = 0x08ec          
	shift	alt	keycode  13 = Meta_asciicircum
	shift	control	alt	keycode  13 = Meta_Control_asciicircum
keycode  14 = Delete          
	alt	keycode  14 = Meta_Delete     
keycode  15 = Tab             
	alt	keycode  15 = Meta_Tab        
keycode  16 = q               
keycode  17 = w               
keycode  18 = +e               +E              
	shift	altgr	keycode  18 = +E              
	control	keycode  18 = Control_e       
	shift	control	keycode  18 = Control_e       
	altgr	control	keycode  18 = Control_e       
	alt	keycode  18 = Meta_e          
	shift	alt	keycode  18 = Meta_E          
	altgr	alt	keycode  18 = Meta_e          
	control	alt	keycode  18 = Meta_Control_e  
	shift	control	alt	keycode  18 = Meta_Control_e  
	altgr	control	alt	keycode  18 = Meta_Control_e  
keycode  19 = r               
keycode  20 = t               
keycode  21 = y               
keycode  22 = u               
keycode  23 = i               
keycode  24 = o               
keycode  25 = p               
keycode  26 =
	altgr	keycode  26 = bracketleft     
	altgr	alt	keycode  26 = Meta_bracketleft
keycode  27 = plus            
	shift	keycode  27 = asterisk        
	altgr	keycode  27 = bracketright    
	altgr	control	keycode  27 = Control_bracketright
	alt	keycode  27 = Meta_plus       
	shift	alt	keycode  27 = Meta_asterisk   
	altgr	alt	keycode  27 = Meta_bracketright
	altgr	control	alt	keycode  27 = Meta_Control_bracketright
keycode  28 = Return          
keycode  29 = Control         
keycode  30 = a               
keycode  31 = s               
keycode  32 = d               
keycode  33 = f               
keycode  34 = g               
keycode  35 = h               
keycode  36 = j               
keycode  37 = k               
keycode  38 = l               
keycode  39 =
	altgr	keycode  39 = at              
	altgr	alt	keycode  39 = Meta_at         
keycode  40 =
	altgr	keycode  40 = numbersign      
	altgr	alt	keycode  40 = Meta_numbersign 
keycode  41 = backslash       
	shift	keycode  41 = bar             
	control	keycode  41 = Control_backslash
	alt	keycode  41 = Meta_backslash  
	shift	alt	keycode  41 = Meta_bar        
	control	alt	keycode  41 = Meta_Control_backslash
keycode  42 = Shift           
keycode  43 = ugrave          
	shift	keycode  43 = section         
	altgr	keycode  43 = uacute          
keycode  44 = z               
keycode  45 = x               
keycode  46 = +c               +C              
	control	keycode  46 = Control_c       
	shift	control	keycode  46 = Control_c       
	altgr	control	keycode  46 = Control_c       
	alt	keycode  46 = Meta_c          
	shift	alt	keycode  46 = Meta_C          
	altgr	alt	keycode  46 = Meta_c          
	control	alt	keycode  46 = Meta_Control_c  
	shift	control	alt	keycode  46 = Meta_Control_c  
	altgr	control	alt	keycode  46 = Meta_Control_c  
keycode  47 = v               
keycode  48 = b               
keycode  49 = n               
keycode  50 = m               
keycode  51 = comma           
	shift	keycode  51 = semicolon       
	alt	keycode  51 = Meta_comma      
	shift	alt	keycode  51 = Meta_semicolon  
keycode  52 = period          
	shift	keycode  52 = colon           
	alt	keycode  52 = Meta_period     
	shift	alt	keycode  52 = Meta_colon      
keycode  53 = minus           
	shift	keycode  53 = underscore      
	shift	control	keycode  53 = Control_underscore
	alt	keycode  53 = Meta_minus      
	shift	control	alt	keycode  53 = Meta_Control_underscore
keycode  54 = Shift           
keycode  55 = KP_Multiply     
keycode  56 = Alt             
keycode  57 = space           
	alt	keycode  57 = Meta_space      
keycode  58 = Caps_Lock       
	control	keycode  58 = Control_Lock    
keycode  59 = F1               F13             
	control	keycode  59 = F25             
	alt	keycode  59 = Console_1       
	control	alt	keycode  59 = Console_1       
keycode  60 = F2               F14             
	control	keycode  60 = F26             
	alt	keycode  60 = Console_2       
	control	alt	keycode  60 = Console_2       
keycode  61 = F3               F15             
	control	keycode  61 = F27             
	alt	keycode  61 = Console_3       
	control	alt	keycode  61 = Console_3       
keycode  62 = F4               F16             
	control	keycode  62 = F28             
	alt	keycode  62 = Console_4       
	control	alt	keycode  62 = Console_4       
keycode  63 = F5               F17             
	control	keycode  63 = F29             
	alt	keycode  63 = Console_5       
	control	alt	keycode  63 = Console_5       
keycode  64 = F6               F18             
	control	keycode  64 = F30             
	alt	keycode  64 = Console_6       
	control	alt	keycode  64 = Console_6       
keycode  65 = F7               F19             
	control	keycode  65 = F31             
	alt	keycode  65 = Console_7       
	control	alt	keycode  65 = Console_7       
keycode  66 = F8               F20             
	control	keycode  66 = F32             
	alt	keycode  66 = Console_8       
	control	alt	keycode  66 = Console_8       
keycode  67 = F9               F21             
	control	keycode  67 = F33             
	alt	keycode  67 = Console_9       
	control	alt	keycode  67 = Console_9       
keycode  68 = F10              F22             
	control	keycode  68 = F34             
	alt	keycode  68 = Console_10      
	control	alt	keycode  68 = Console_10      
keycode  69 = Num_Lock        
keycode  70 = Scroll_Lock      Show_Memory      Show_Registers  
	control	keycode  70 = Show_State      
	alt	keycode  70 = Show_Registers  
keycode  71 = KP_7            
	alt	keycode  71 = Ascii_7         
keycode  72 = KP_8            
	alt	keycode  72 = Ascii_8         
keycode  73 = KP_9            
	alt	keycode  73 = Ascii_9         
keycode  74 = KP_Subtract     
keycode  75 = KP_4            
	alt	keycode  75 = Ascii_4         
keycode  76 = KP_5            
	alt	keycode  76 = Ascii_5         
keycode  77 = KP_6            
	alt	keycode  77 = Ascii_6         
keycode  78 = KP_Add          
keycode  79 = KP_1            
	alt	keycode  79 = Ascii_1         
keycode  80 = KP_2            
	alt	keycode  80 = Ascii_2         
keycode  81 = KP_3            
	alt	keycode  81 = Ascii_3         
keycode  82 = KP_0            
	alt	keycode  82 = Ascii_0         
keycode  83 = KP_Period       
	control	alt	keycode  83 = Boot            
keycode  84 = Last_Console    
keycode  86 = less            
	shift	keycode  86 = greater         
	alt	keycode  86 = Meta_less       
	shift	alt	keycode  86 = Meta_greater    
keycode  87 = F11              F23             
	control	keycode  87 = F35             
	alt	keycode  87 = Console_11      
	control	alt	keycode  87 = Console_11      
keycode  88 = F12              F24             
	control	keycode  88 = F36             
	alt	keycode  88 = Console_12      
	control	alt	keycode  88 = Console_12      
keycode  96 = KP_Enter        
keycode  97 = Control         
keycode  98 = KP_Divide       
keycode  99 = Compose         
keycode 100 = AltGr           
keycode 101 = Break           
keycode 102 = Find            
keycode 103 = Up              
	alt	keycode 103 = KeyboardSignal  
keycode 104 = Prior           
	shift	keycode 104 = Scroll_Backward 
keycode 105 = Left            
keycode 106 = Right           
keycode 107 = Select          
keycode 108 = Down            
keycode 109 = Next            
	shift	keycode 109 = Scroll_Forward  
keycode 110 = Insert          
keycode 111 = Remove          
	control	alt	keycode 111 = Boot            
keycode 119 = Pause           
keycode 128 = nul              nul              nul             
	control	keycode 128 = nul             
	alt	keycode 128 = nul             
	control	alt	keycode 128 = nul             
keycode 129 = nul              nul              nul             
	control	keycode 129 = nul             
	alt	keycode 129 = nul             
	control	alt	keycode 129 = nul             
keycode 130 = nul              nul              nul             
	control	keycode 130 = nul             
	alt	keycode 130 = nul             
	control	alt	keycode 130 = nul             
keycode 131 = nul              nul              nul             
	control	keycode 131 = nul             
	alt	keycode 131 = nul             
	control	alt	keycode 131 = nul             
keycode 132 = nul              nul              nul             
	control	keycode 132 = nul             
	alt	keycode 132 = nul             
	control	alt	keycode 132 = nul             
keycode 133 = nul              nul              nul             
	control	keycode 133 = nul             
	alt	keycode 133 = nul             
	control	alt	keycode 133 = nul             
keycode 134 = nul              nul              nul             
	control	keycode 134 = nul             
	alt	keycode 134 = nul             
	control	alt	keycode 134 = nul             
keycode 135 = nul              nul              nul             
	control	keycode 135 = nul             
	alt	keycode 135 = nul             
	control	alt	keycode 135 = nul             
keycode 136 = nul              nul              nul             
	control	keycode 136 = nul             
	alt	keycode 136 = nul             
	control	alt	keycode 136 = nul             
keycode 137 = nul              nul              nul             
	control	keycode 137 = nul             
	alt	keycode 137 = nul             
	control	alt	keycode 137 = nul             
keycode 138 = nul              nul              nul             
	control	keycode 138 = nul             
	alt	keycode 138 = nul             
	control	alt	keycode 138 = nul             
keycode 139 = nul              nul              nul             
	control	keycode 139 = nul             
	alt	keycode 139 = nul             
	control	alt	keycode 139 = nul             
keycode 140 = nul              nul              nul             
	control	keycode 140 = nul             
	alt	keycode 140 = nul             
	control	alt	keycode 140 = nul             
keycode 141 = nul              nul              nul             
	control	keycode 141 = nul             
	alt	keycode 141 = nul             
	control	alt	keycode 141 = nul             
keycode 142 = nul              nul              nul             
	control	keycode 142 = nul             
	alt	keycode 142 = nul             
	control	alt	keycode 142 = nul             
keycode 143 = nul              nul              nul             
	control	keycode 143 = nul             
	alt	keycode 143 = nul             
	control	alt	keycode 143 = nul             
keycode 144 = nul              nul              nul             
	control	keycode 144 = nul             
	alt	keycode 144 = nul             
	control	alt	keycode 144 = nul             
keycode 145 = nul              nul              nul             
	control	keycode 145 = nul             
	alt	keycode 145 = nul             
	control	alt	keycode 145 = nul             
keycode 146 = nul              nul              nul             
	control	keycode 146 = nul             
	alt	keycode 146 = nul             
	control	alt	keycode 146 = nul             
keycode 147 = nul              nul              nul             
	control	keycode 147 = nul             
	alt	keycode 147 = nul             
	control	alt	keycode 147 = nul             
keycode 148 = nul              nul              nul             
	control	keycode 148 = nul             
	alt	keycode 148 = nul             
	control	alt	keycode 148 = nul             
keycode 149 = nul              nul              nul             
	control	keycode 149 = nul             
	alt	keycode 149 = nul             
	control	alt	keycode 149 = nul             
keycode 150 = nul              nul              nul             
	control	keycode 150 = nul             
	alt	keycode 150 = nul             
	control	alt	keycode 150 = nul             
keycode 151 = nul              nul              nul             
	control	keycode 151 = nul             
	alt	keycode 151 = nul             
	control	alt	keycode 151 = nul             
keycode 152 = nul              nul              nul             
	control	keycode 152 = nul             
	alt	keycode 152 = nul             
	control	alt	keycode 152 = nul             
keycode 153 = nul              nul              nul             
	control	keycode 153 = nul             
	alt	keycode 153 = nul             
	control	alt	keycode 153 = nul             
keycode 154 = nul              nul              nul             
	control	keycode 154 = nul             
	alt	keycode 154 = nul             
	control	alt	keycode 154 = nul             
keycode 155 = nul              nul              nul             
	control	keycode 155 = nul             
	alt	keycode 155 = nul             
	control	alt	keycode 155 = nul             
keycode 156 = nul              nul              nul             
	control	keycode 156 = nul             
	alt	keycode 156 = nul             
	control	alt	keycode 156 = nul             
keycode 157 = nul              nul              nul             
	control	keycode 157 = nul             
	alt	keycode 157 = nul             
	control	alt	keycode 157 = nul             
keycode 158 = nul              nul              nul             
	control	keycode 158 = nul             
	alt	keycode 158 = nul             
	control	alt	keycode 158 = nul             
keycode 159 = nul              nul              nul             
	control	keycode 159 = nul             
	alt	keycode 159 = nul             
	control	alt	keycode 159 = nul             
keycode 160 = nul              nul              nul             
	control	keycode 160 = nul             
	alt	keycode 160 = nul             
	control	alt	keycode 160 = nul             
keycode 161 = nul              nul              nul             
	control	keycode 161 = nul             
	alt	keycode 161 = nul             
	control	alt	keycode 161 = nul             
keycode 162 = nul              nul              nul             
	control	keycode 162 = nul             
	alt	keycode 162 = nul             
	control	alt	keycode 162 = nul             
keycode 163 = nul              nul              nul             
	control	keycode 163 = nul             
	alt	keycode 163 = nul             
	control	alt	keycode 163 = nul             
keycode 164 = nul              nul              nul             
	control	keycode 164 = nul             
	alt	keycode 164 = nul             
	control	alt	keycode 164 = nul             
keycode 165 = nul              nul              nul             
	control	keycode 165 = nul             
	alt	keycode 165 = nul             
	control	alt	keycode 165 = nul             
keycode 166 = nul              nul              nul             
	control	keycode 166 = nul             
	alt	keycode 166 = nul             
	control	alt	keycode 166 = nul             
keycode 167 = nul              nul              nul             
	control	keycode 167 = nul             
	alt	keycode 167 = nul             
	control	alt	keycode 167 = nul             
keycode 168 = nul              nul              nul             
	control	keycode 168 = nul             
	alt	keycode 168 = nul             
	control	alt	keycode 168 = nul             
keycode 169 = nul              nul              nul             
	control	keycode 169 = nul             
	alt	keycode 169 = nul             
	control	alt	keycode 169 = nul             
keycode 170 = nul              nul              nul             
	control	keycode 170 = nul             
	alt	keycode 170 = nul             
	control	alt	keycode 170 = nul             
keycode 171 = nul              nul              nul             
	control	keycode 171 = nul             
	alt	keycode 171 = nul             
	control	alt	keycode 171 = nul             
keycode 172 = nul              nul              nul             
	control	keycode 172 = nul             
	alt	keycode 172 = nul             
	control	alt	keycode 172 = nul             
keycode 173 = nul              nul              nul             
	control	keycode 173 = nul             
	alt	keycode 173 = nul             
	control	alt	keycode 173 = nul             
keycode 174 = nul              nul              nul             
	control	keycode 174 = nul             
	alt	keycode 174 = nul             
	control	alt	keycode 174 = nul             
keycode 175 = nul              nul              nul             
	control	keycode 175 = nul             
	alt	keycode 175 = nul             
	control	alt	keycode 175 = nul             
keycode 176 = nul              nul              nul             
	control	keycode 176 = nul             
	alt	keycode 176 = nul             
	control	alt	keycode 176 = nul             
keycode 177 = nul              nul              nul             
	control	keycode 177 = nul             
	alt	keycode 177 = nul             
	control	alt	keycode 177 = nul             
keycode 178 = nul              nul              nul             
	control	keycode 178 = nul             
	alt	keycode 178 = nul             
	control	alt	keycode 178 = nul             
keycode 179 = nul              nul              nul             
	control	keycode 179 = nul             
	alt	keycode 179 = nul             
	control	alt	keycode 179 = nul             
keycode 180 = nul              nul              nul             
	control	keycode 180 = nul             
	alt	keycode 180 = nul             
	control	alt	keycode 180 = nul             
keycode 181 = nul              nul              nul             
	control	keycode 181 = nul             
	alt	keycode 181 = nul             
	control	alt	keycode 181 = nul             
keycode 182 = nul              nul              nul             
	control	keycode 182 = nul             
	alt	keycode 182 = nul             
	control	alt	keycode 182 = nul             
keycode 183 = nul              nul              nul             
	control	keycode 183 = nul             
	alt	keycode 183 = nul             
	control	alt	keycode 183 = nul             
keycode 184 = nul              nul              nul             
	control	keycode 184 = nul             
	alt	keycode 184 = nul             
	control	alt	keycode 184 = nul             
keycode 185 = nul              nul              nul             
	control	keycode 185 = nul             
	alt	keycode 185 = nul             
	control	alt	keycode 185 = nul             
keycode 186 = nul              nul              nul             
	control	keycode 186 = nul             
	alt	keycode 186 = nul             
	control	alt	keycode 186 = nul             
keycode 187 = nul              nul              nul             
	control	keycode 187 = nul             
	alt	keycode 187 = nul             
	control	alt	keycode 187 = nul             
keycode 188 = nul              nul              nul             
	control	keycode 188 = nul             
	alt	keycode 188 = nul             
	control	alt	keycode 188 = nul             
keycode 189 = nul              nul              nul             
	control	keycode 189 = nul             
	alt	keycode 189 = nul             
	control	alt	keycode 189 = nul             
keycode 190 = nul              nul              nul             
	control	keycode 190 = nul             
	alt	keycode 190 = nul             
	control	alt	keycode 190 = nul             
keycode 191 = nul              nul              nul             
	control	keycode 191 = nul             
	alt	keycode 191 = nul             
	control	alt	keycode 191 = nul             
keycode 192 = nul              nul              nul             
	control	keycode 192 = nul             
	alt	keycode 192 = nul             
	control	alt	keycode 192 = nul             
keycode 193 = nul              nul              nul             
	control	keycode 193 = nul             
	alt	keycode 193 = nul             
	control	alt	keycode 193 = nul             
keycode 194 = nul              nul              nul             
	control	keycode 194 = nul             
	alt	keycode 194 = nul             
	control	alt	keycode 194 = nul             
keycode 195 = nul              nul              nul             
	control	keycode 195 = nul             
	alt	keycode 195 = nul             
	control	alt	keycode 195 = nul             
keycode 196 = nul              nul              nul             
	control	keycode 196 = nul             
	alt	keycode 196 = nul             
	control	alt	keycode 196 = nul             
keycode 197 = nul              nul              nul             
	control	keycode 197 = nul             
	alt	keycode 197 = nul             
	control	alt	keycode 197 = nul             
keycode 198 = nul              nul              nul             
	control	keycode 198 = nul             
	alt	keycode 198 = nul             
	control	alt	keycode 198 = nul             
keycode 199 = nul              nul              nul             
	control	keycode 199 = nul             
	alt	keycode 199 = nul             
	control	alt	keycode 199 = nul             
keycode 200 = nul              nul              nul             
	control	keycode 200 = nul             
	alt	keycode 200 = nul             
	control	alt	keycode 200 = nul             
keycode 201 = nul              nul              nul             
	control	keycode 201 = nul             
	alt	keycode 201 = nul             
	control	alt	keycode 201 = nul             
keycode 202 = nul              nul              nul             
	control	keycode 202 = nul             
	alt	keycode 202 = nul             
	control	alt	keycode 202 = nul             
keycode 203 = nul              nul              nul             
	control	keycode 203 = nul             
	alt	keycode 203 = nul             
	control	alt	keycode 203 = nul             
keycode 204 = nul              nul              nul             
	control	keycode 204 = nul             
	alt	keycode 204 = nul             
	control	alt	keycode 204 = nul             
keycode 205 = nul              nul              nul             
	control	keycode 205 = nul             
	alt	keycode 205 = nul             
	control	alt	keycode 205 = nul             
keycode 206 = nul              nul              nul             
	control	keycode 206 = nul             
	alt	keycode 206 = nul             
	control	alt	keycode 206 = nul             
keycode 207 = nul              nul              nul             
	control	keycode 207 = nul             
	alt	keycode 207 = nul             
	control	alt	keycode 207 = nul             
keycode 208 = nul              nul              nul             
	control	keycode 208 = nul             
	alt	keycode 208 = nul             
	control	alt	keycode 208 = nul             
keycode 209 = nul              nul              nul             
	control	keycode 209 = nul             
	alt	keycode 209 = nul             
	control	alt	keycode 209 = nul             
keycode 210 = nul              nul              nul             
	control	keycode 210 = nul             
	alt	keycode 210 = nul             
	control	alt	keycode 210 = nul             
keycode 211 = nul              nul              nul             
	control	keycode 211 = nul             
	alt	keycode 211 = nul             
	control	alt	keycode 211 = nul             
keycode 212 = nul              nul              nul             
	control	keycode 212 = nul             
	alt	keycode 212 = nul             
	control	alt	keycode 212 = nul             
keycode 213 = nul              nul              nul             
	control	keycode 213 = nul             
	alt	keycode 213 = nul             
	control	alt	keycode 213 = nul             
keycode 214 = nul              nul              nul             
	control	keycode 214 = nul             
	alt	keycode 214 = nul             
	control	alt	keycode 214 = nul             
keycode 215 = nul              nul              nul             
	control	keycode 215 = nul             
	alt	keycode 215 = nul             
	control	alt	keycode 215 = nul             
keycode 216 = nul              nul              nul             
	control	keycode 216 = nul             
	alt	keycode 216 = nul             
	control	alt	keycode 216 = nul             
keycode 217 = nul              nul              nul             
	control	keycode 217 = nul             
	alt	keycode 217 = nul             
	control	alt	keycode 217 = nul             
keycode 218 = nul              nul              nul             
	control	keycode 218 = nul             
	alt	keycode 218 = nul             
	control	alt	keycode 218 = nul             
keycode 219 = nul              nul              nul             
	control	keycode 219 = nul             
	alt	keycode 219 = nul             
	control	alt	keycode 219 = nul             
keycode 220 = nul              nul              nul             
	control	keycode 220 = nul             
	alt	keycode 220 = nul             
	control	alt	keycode 220 = nul             
keycode 221 = nul              nul              nul             
	control	keycode 221 = nul             
	alt	keycode 221 = nul             
	control	alt	keycode 221 = nul             
keycode 222 = nul              nul              nul             
	control	keycode 222 = nul             
	alt	keycode 222 = nul             
	control	alt	keycode 222 = nul             
keycode 223 = nul              nul              nul             
	control	keycode 223 = nul             
	alt	keycode 223 = nul             
	control	alt	keycode 223 = nul             
keycode 224 = nul              nul              nul             
	control	keycode 224 = nul             
	alt	keycode 224 = nul             
	control	alt	keycode 224 = nul             
keycode 225 = nul              nul              nul             
	control	keycode 225 = nul             
	alt	keycode 225 = nul             
	control	alt	keycode 225 = nul             
keycode 226 = nul              nul              nul             
	control	keycode 226 = nul             
	alt	keycode 226 = nul             
	control	alt	keycode 226 = nul             
keycode 227 = nul              nul              nul             
	control	keycode 227 = nul             
	alt	keycode 227 = nul             
	control	alt	keycode 227 = nul             
keycode 228 = nul              nul              nul             
	control	keycode 228 = nul             
	alt	keycode 228 = nul             
	control	alt	keycode 228 = nul             
keycode 229 = nul              nul              nul             
	control	keycode 229 = nul             
	alt	keycode 229 = nul             
	control	alt	keycode 229 = nul             
keycode 230 = nul              nul              nul             
	control	keycode 230 = nul             
	alt	keycode 230 = nul             
	control	alt	keycode 230 = nul             
keycode 231 = nul              nul              nul             
	control	keycode 231 = nul             
	alt	keycode 231 = nul             
	control	alt	keycode 231 = nul             
keycode 232 = nul              nul              nul             
	control	keycode 232 = nul             
	alt	keycode 232 = nul             
	control	alt	keycode 232 = nul             
keycode 233 = nul              nul              nul             
	control	keycode 233 = nul             
	alt	keycode 233 = nul             
	control	alt	keycode 233 = nul             
keycode 234 = nul              nul              nul             
	control	keycode 234 = nul             
	alt	keycode 234 = nul             
	control	alt	keycode 234 = nul             
keycode 235 = nul              nul              nul             
	control	keycode 235 = nul             
	alt	keycode 235 = nul             
	control	alt	keycode 235 = nul             
keycode 236 = nul              nul              nul             
	control	keycode 236 = nul             
	alt	keycode 236 = nul             
	control	alt	keycode 236 = nul             
keycode 237 = nul              nul              nul             
	control	keycode 237 = nul             
	alt	keycode 237 = nul             
	control	alt	keycode 237 = nul             
keycode 238 = nul              nul              nul             
	control	keycode 238 = nul             
	alt	keycode 238 = nul             
	control	alt	keycode 238 = nul             
keycode 239 = nul              nul              nul             
	control	keycode 239 = nul             
	alt	keycode 239 = nul             
	control	alt	keycode 239 = nul             
keycode 240 = nul              nul              nul             
	control	keycode 240 = nul             
	alt	keycode 240 = nul             
	control	alt	keycode 240 = nul             
keycode 241 = nul              nul              nul             
	control	keycode 241 = nul             
	alt	keycode 241 = nul             
	control	alt	keycode 241 = nul             
keycode 242 = nul              nul              nul             
	control	keycode 242 = nul             
	alt	keycode 242 = nul             
	control	alt	keycode 242 = nul             
keycode 243 = nul              nul              nul             
	control	keycode 243 = nul             
	alt	keycode 243 = nul             
	control	alt	keycode 243 = nul             
keycode 244 = nul              nul              nul             
	control	keycode 244 = nul             
	alt	keycode 244 = nul             
	control	alt	keycode 244 = nul             
keycode 245 = nul              nul              nul             
	control	keycode 245 = nul             
	alt	keycode 245 = nul             
	control	alt	keycode 245 = nul             
keycode 246 = nul              nul              nul             
	control	keycode 246 = nul             
	alt	keycode 246 = nul             
	control	alt	keycode 246 = nul             
keycode 247 = nul              nul              nul             
	control	keycode 247 = nul             
	alt	keycode 247 = nul             
	control	alt	keycode 247 = nul             
keycode 248 = nul              nul              nul             
	control	keycode 248 = nul             
	alt	keycode 248 = nul             
	control	alt	keycode 248 = nul             
keycode 249 = nul              nul              nul             
	control	keycode 249 = nul             
	alt	keycode 249 = nul             
	control	alt	keycode 249 = nul             
keycode 250 = nul              nul              nul             
	control	keycode 250 = nul             
	alt	keycode 250 = nul             
	control	alt	keycode 250 = nul             
keycode 251 = nul              nul              nul             
	control	keycode 251 = nul             
	alt	keycode 251 = nul             
	control	alt	keycode 251 = nul             
keycode 252 = nul              nul              nul             
	control	keycode 252 = nul             
	alt	keycode 252 = nul             
	control	alt	keycode 252 = nul             
keycode 253 = nul              nul              nul             
	control	keycode 253 = nul             
	alt	keycode 253 = nul             
	control	alt	keycode 253 = nul             
keycode 254 = nul              nul              nul             
	control	keycode 254 = nul             
	alt	keycode 254 = nul             
	control	alt	keycode 254 = nul             
keycode 255 = nul              nul              nul             
	control	keycode 255 = nul             
	alt	keycode 255 = nul             
	control	alt	keycode 255 = nul             
string F1 = "\033[[A"
string F2 = "\033[[B"
string F3 = "\033[[C"
string F4 = "\033[[D"
string F5 = "\033[[E"
string F6 = "\033[17~"
string F7 = "\033[18~"
string F8 = "\033[19~"
string F9 = "\033[20~"
string F10 = "\033[21~"
string F11 = "\033[23~"
string F12 = "\033[24~"
string F13 = "\033[25~"
string F14 = "\033[26~"
string F15 = "\033[28~"
string F16 = "\033[29~"
string F17 = "\033[31~"
string F18 = "\033[32~"
string F19 = "\033[33~"
string F20 = "\033[34~"
string Find = "\033[1~"
string Insert = "\033[2~"
string Remove = "\033[3~"
string Select = "\033[4~"
string Prior = "\033[5~"
string Next = "\033[6~"
string Macro = "\033[M"
string Pause = "\033[P"
compose '`' 'A' to Agrave
compose '`' 'a' to agrave
compose '\'' 'A' to Aacute
compose '\'' 'a' to aacute
compose '^' 'A' to Acircumflex
compose '^' 'a' to acircumflex
compose '~' 'A' to Atilde
compose '~' 'a' to atilde
compose '"' 'A' to Adiaeresis
compose '"' 'a' to adiaeresis
compose 'O' 'A' to Aring
compose 'o' 'a' to aring
compose '0' 'A' to Aring
compose '0' 'a' to aring
compose 'A' 'A' to Aring
compose 'a' 'a' to aring
compose 'A' 'E' to AE
compose 'a' 'e' to ae
compose ',' 'C' to Ccedilla
compose ',' 'c' to ccedilla
compose '`' 'E' to Egrave
compose '`' 'e' to egrave
compose '\'' 'E' to Eacute
compose '\'' 'e' to eacute
compose '^' 'E' to Ecircumflex
compose '^' 'e' to ecircumflex
compose '"' 'E' to Ediaeresis
compose '"' 'e' to ediaeresis
compose '`' 'I' to Igrave
compose '`' 'i' to igrave
compose '\'' 'I' to Iacute
compose '\'' 'i' to iacute
compose '^' 'I' to Icircumflex
compose '^' 'i' to icircumflex
compose '"' 'I' to Idiaeresis
compose '"' 'i' to idiaeresis
compose '-' 'D' to ETH
compose '-' 'd' to eth
compose '~' 'N' to Ntilde
compose '~' 'n' to ntilde
compose '`' 'O' to Ograve
compose '`' 'o' to ograve
compose '\'' 'O' to Oacute
compose '\'' 'o' to oacute
compose '^' 'O' to Ocircumflex
compose '^' 'o' to ocircumflex
compose '~' 'O' to Otilde
compose '~' 'o' to otilde
compose '"' 'O' to Odiaeresis
compose '"' 'o' to odiaeresis
compose '/' 'O' to Ooblique
compose '/' 'o' to oslash
compose '`' 'U' to Ugrave
compose '`' 'u' to ugrave
compose '\'' 'U' to Uacute
compose '\'' 'u' to uacute
compose '^' 'U' to Ucircumflex
compose '^' 'u' to ucircumflex
compose '"' 'U' to Udiaeresis
compose '"' 'u' to udiaeresis
compose '\'' 'Y' to Yacute
compose '\'' 'y' to yacute
compose 'T' 'H' to THORN
compose 't' 'h' to thorn
compose 's' 's' to ssharp
compose '"' 'y' to ydiaeresis
compose 's' 'z' to ssharp
compose 'i' 'j' to ydiaeresis

setfont.8.in: "-f" option seems to be a no-op, but is not documented

Various older posts on stack exchange, reddit, etc., show setfont examples using -f to specify the font file. Yet there doesn't seem to be any mention of the -f option in setfont.8.in, or in the help blurb, and the option is accepted without any diagnostic. Has it perhaps been deprecated?

Superficially at least, -f appears to be a no-op, i.e. setfont -f foofont appears to produce the same result as setfont foofont. But it would be nice if that were confirmed in the documentation. Imo, it's not unreasonable for a user to wonder if -f might be subtly different in some silent way from not specifying it at all.

Thanks.

How to set font sizes to install

I am trying to build kbd from the LFS instructions here, however all the font sizes it installs by default are too small. How can I get kbd to build bigger fonts?

setfont fails to get font (setfont -o font_out.psf) if current font size is between 17x17 and 24x24

I have bunch of .psf files in sizes 6x6 - 32x32, each has 256 characters with unicode map appended.
I'm able to set each of them with setfont font.psf command, and it works just fine.
But for some reason I'm not able to retrieve them from TTY if previously set font size was between 17x17 and 24x24 (incl).
setfont -o font_out.psf
get_font: GIO_FONT: Invalid argument
Probably if font's width spans over exactly 3 bytes is somehow problematic.
I've also tried to use KDFONTOP ioctl with KD_FONT_OP_GET op. It works fine only if font size is not in the problematic range too, but ioctl call returns -EPERM to me (which is probably something different from what setfont reports with "Invalid argument").

After all, it is probably a bug in the kernel but the only case when KDFONTOP can return -EPERM is when op is different than KD_FONT_OP_GET so I'm really lost.

edit: actually errno in my case is also -EINVAL

Please find fonts attached
cp437_psf.zip

Include more deadkeys

Is there some way for the user to define a key to be a deadkey?
As an example, I tried to make a key output dead_abovering, but it did not seem to be defined.
It was relatively recently included in the kernel
torvalds/linux@16777ec

If there is not support for it, is there a workaround that does not involve pressing a compose-key first?
A compose key requires three keypresses from what I can tell, rather than the two that a single deadkey requires.

I attempted to add dead_abovering in myself, though there is some behaviour I do not really understand:

---
 src/libkeymap/syms.ktyp.h | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/libkeymap/syms.ktyp.h b/src/libkeymap/syms.ktyp.h
index b319388..1b43975 100644
--- a/src/libkeymap/syms.ktyp.h
+++ b/src/libkeymap/syms.ktyp.h
@@ -386,7 +386,8 @@ static const char *const dead_syms[] = {
 	"dead_tilde",
 	"dead_diaeresis",
 	"dead_cedilla",
-	"dead_macron"
+	"dead_macron",
+	"dead_abovering"
 };
 
 /*
-- 
2.27.0

I made a key output dead_abovering added two compose-rules at the bottom of my keymap (the documentation is not too clear on how that works for diacritics/deadkeys...):

keycode  41 = dead_abovering             dead_diaeresis          grave

compose 'U' 'a' to 0xe5
compose 'U' 'A' to 0xc5

The part that is strange to me is that the diacritic appears as U if there is no rule to compose it with.
Where does U come from? I would have thought it would use either degree, or the * from the kernel table.
The keymap works, though, and I can use abovering as a deadkey with this.

Something which added to my confusion was docs/doc/kbd.FAQ.txt (The Linux keyboard and console HOWTO):

  +^Ho  A dead diacritic followed by a symbol, yields that symbol adorned
     with that diacritic. If the combination is undefined, both keys are
     taken separately.  Which keys are dead diacritics is user-settable;
     none is by default.  Five (since 2.0.25 six) dead diacritics can be
     defined (using loadkeys(1)): dead_grave, dead_acute,
     dead_circumflex, dead_tilde, dead_diaeresis (and dead_cedilla).
     Precisely what this adorning means is also user-settable: dead-
     diacritic, symbol is equivalent to Compose + diacritic + symbol.

maybe this document is very dated.

[KEYMAP] mac-fr.map

With archlinux ISO installer which is based from upstream kbd, enter:
loadkeys mac-fr
return a weird and unusable layout.

It is not a good idea to mark the empty string for translation

In dumpkeys.c the description of the -S option is the empty string:

{ "-S, --shape={2|4|8|16}", _("") },

This is not a good idea. Obviously it is of course pointless an empty string. In addition, ss an implementation idiosyncrasy of pot files, the translation of the empty string is used to hold the header of the translation, listing things like project id, dates, last translator and team, etc. If the gettext library doesn't handle the empty string as a special case, I haven't checked recently but it didn't use to, the result of dumpkeys --help will contain this header in the output, most likely not what you want! 😃

While waiting for a proper help text, it would be better to use some dummy nonempty string, just a space for example.

fa layout cannot be loaded due to U+FDFC character

In 2019, fa.map was added to kbd in response to my #14 . I can only imagine nobody actually tested it, though, because if you try to load it, this happens:

unicode keysym out of range: U+FDFC
syntax error, unexpected ERROR, expecting NUMBER or LITERAL or PLUS or UNUMBER

...and it doesn't work. The layout appears to be falling foul of this change from 2008 which was made on the basis that codepoints above U+F000 are not valid or not properly supported by the kernel(?), but all references I can find - like the approved proposal that the symbol be added in the first place - seem to think that U+FDFC is a perfectly valid codepoint. According to the GNOME Character Map app, there are a bunch of valid codepoints from U+FB50 to U+1EEF1.

Not sure what the correct fix is here, but kbd shipping a keymap it cannot load doesn't seem sane.

consolefont issue?

After the recent kernel update to 5.11, I get in my linux console this message during boot:

setfont: ERROR kdfontop.c:285 put_font_piofont: PIO_FONT: unsupported font height: 16

Although the font looks fine, I'd like to know what is causing it, and make sure I'm taking advantage of CONFIG_FONT_TER16x32=y in my kernel.

Do you know what I should check?

I'm using Void Linux, with runit and grub, and kbd-2.3.0

$ xuname
Void 5.11.6_1 x86_64-musl GenuineIntel uptodate hold rrnFFF

Thanks.

euro2 include breaks the pt-latin1 layout

The recently released v2.5.0 includes the patch e29babc from issue #63 which seems well reasoned and indeed needed. However it also breaks the pt-latin1 layout in an up to date Arch Linux distribution. mkinitcpio with the keymap hook, loadkeys or the systemd-vconsole-setup all fail with the error:

cannot open include file euro2
syntax error, unexpected ERROR

I don't know enough about the file format to know whether they have any error though. They look fine to me though, and I'm, in no way confident the issue lies here.

That said, rolling back to v2.4.0 fixes it for me for the time being.

kbd build race

Reporting a strange build race in kbd (version 2.0.3):

| make[3]: Entering directory /data/poky-master/tmp/work/ppc7400-poky-linux/kbd/2.0.2-r0/build/data' | cp -r /data/poky-master/tmp/work/ppc7400-poky-linux/kbd/2.0.2-r0/kbd-2.0.2/data/keymaps keymaps_Z | cp -r /data/poky-master/tmp/work/ppc7400-poky-linux/kbd/2.0.2-r0/kbd-2.0.2/data/consolefonts consolefonts_Z | cp -r /data/poky-master/tmp/work/ppc7400-poky-linux/kbd/2.0.2-r0/kbd-2.0.2/data/partialfonts partialfonts_Z | chmod -R u+w keymaps_Z | chmod -R u+w consolefonts_Z partialfonts_Z | cd keymaps_Z && gzip -f -n -9 */*.map */*/*.map | chmod: cannot read directoryconsolefonts_Z/README.Cyrillic': Not a directory
| make[3]: *** [consolefonts_Z] Error 1
| make[3]: *** Waiting for unfinished jobs....
| make[3]: Leaving directory `/data/poky-master/tmp/work/ppc7400-poky-linux/kbd/2.0.2-r0/build/data'

More info:
https://bugzilla.yoctoproject.org/show_bug.cgi?id=7436

hex colors

every things colors in my system can be defined by "standard" rgb hex color string, eg #1122AA, so i was wondering/hoping if kbd-project would be intrerested in such feature?

if yes, i wonder if it's worth to add such feature to setvtrgb, write a new tool, or ask if https://github.com/EvanPurkhiser/linux-vt-setcolors would like to be added to kbd-project?

loadkeys --mktable fi > /usr/src/linux/drivers/tty/vt/defkeymap.c fails kernel build

loadkeys --mktable fi > /usr/src/linux/drivers/tty/vt/defkeymap.c

then rebuilding kernel (without mrproper etc.) fails with error:

drivers/tty/vt/defkeymap.c:463:2: error: ‘altgr_ctrl_altplain_map’ undeclared here (not in a function); did you mean ‘altgr_ctrl_alt_map’?
  463 |  altgr_ctrl_altplain_map, shift_map, altgr_map, shift_altgr_map,
      |  ^~~~~~~~~~~~~~~~~~~~~~~
      |  altgr_ctrl_alt_map
make[3]: *** [scripts/Makefile.build:283: drivers/tty/vt/defkeymap.o] Error 1

version kbd version: 2.2.0

RADIUS authentication for vlock

I manage multiple STIG'd RHEL 8 system. The default /etc/pam.d/vlock includes system-auth where I have my 'auth sufficient pam_radius_auth.so debug' line that works to allowy RADIUS authentication to work when I am on the console or ssh'ng to a server. I normally delete the local users password and only allow RADIUS auth on my RHEL 7 system and want to do the same on RHEL 8. However vlock will not unlock using RADIUS and will only unlock with a locally assigned password. I don't understand why the include system-auth in the /etc/pam.d/vlock doesn't handle this. Is there something I can add to the /etc/pam.d/vlock file that will allow RADIUS authentication to unlock the screen? Thanks.

How to build/install ONLY libkeymap?

I'm building a virtual keyboard (for touch devices) and I think that using libkeymap to process/access Linux keymap files from kbd would be perfect. The distro I am targetting doesn't seem to be providing libkeymap .so/.h files for development/runtime, but it does provide a kbd package. So if I just packaged everything as built with ./configure --enable-libkeymap, I would get what I need + other utilities/maps in this package, which would conflict with the kbd package my distro already provides. To prevent this, I would like to make a new package (e.g. a kbd-dev or similar) that includes just the libkeymap components and not the other utilities/maps part of kbd.

On first pass of the configure script's help options, it doesn't seem like it's possible to build just those components and install them easily to /include and /lib using the included configure and makefile.

chvt

Hello
Could chvt --help and --version be added?

$ chvt --help
Couldn't get a file descriptor referring to the console
$ chvt --version
Couldn't get a file descriptor referring to the console
$

Make libkfont public API

It would be nice call kfont_load_fonts() from my C code instead of fork/exec setfont (./configure --enable-libkfont or so).

Thanks.

Keymap problem

Hi,
I have a problem with "loadkeys" command when I enter the luks password.
It cannot set the keymap.
The error is the following :
loadkeys: /usr/share/kbd/keymaps/i386/qwerty/it.map:31: cannot open include file linux-with-alt-and-altgr.
I have this file in /usr/share/kbd/keymaps/i386/include/linux-with-alt-and-altgr.inc.

How could i resolve it ?
Best regards

Unknown keysym 'endash' in fr-bepo

I am running Arch Linux with kbd 2.4.0.

Trying to load fr-bepo.map with loadkeys prints the following error message.

unknown keysym 'endash'
lk_add_key called with bad keycode -1

The key map still gets applied, but because the return code is 1, this makes some parts of the early boot process (everything that depends on systemd-vconsole-setup.service) fail.

The symbol is in the map file as a U+xxxx sequence, and it seems that they all fail to load.

installation of libtswrap.{la,so,a}: is it intentional?

From kbd-2.3.0, it installs a library named libtswrap. But it's in the tests directory, and it does not ship any headers. The release note also doesn't metion it. So I wonder if the installation of it is not intentional.

"dumpkeys -k | loadkeys" : adding map 3 violates explicit keymaps line

I have found many sources that say you can remove a keymap by running:

# dumpkeys -k | grep -v whatever | loadkeys

Yet, when I run this, even without grep, it errors:

# dumpkeys -k | loadkeys
adding map 3 violates explicit keymaps line
# # tried this too:
# cat /etc/locale.conf
LANG=en_US.UTF-8
# kbd_mode
The keyboard is in Unicode (UTF-8) mode
# dumpkeys -k | loadkeys --unicode
adding map 3 violates explicit keymaps line

Output of dumpkeys -k is here: http://termbin.com/juf9t

Unfortunately, even loadkeys --verbose doesn't give me any insight.

I found random discussions of this error over the years, but not in the context of sending kbd's own output back into itself.

I apologize if this is not a kbd issue, but I'm thinking the output of dumpkeys -k should give valid output in a compatible format to loadkeys.

I'm running an up to date Arch install, so linux 4.18.16.arch1-1, kbd 2.0.4-1.

kbd-2.1.0 tests fail to build on musl due to <error.h>

kbd-2.1.0 does not build on musl based systems (x86_64-pc-linux-musl in my case) due to the new usage of <error.h> in the tests:

libkbdfile-test01.c:4:10: fatal error: error.h: No such file or directory
 #include <error.h>
          ^~~~~~~~~
compilation terminated.

I'm not really sure what's the proper fix here. From a quick search I understand that <error.h> is a glibc-ism and that more standard conformant libc implementations such as musl don't provide that header.

An explanation on the musl mailing list[1] states the behaviour of the used error function as:

error() does the following:

1. sets the thread to uncancellable
2. flushes stdout
3. flocks stderr
4. calls (*error_print_progname)(), if non-NULL
5. printfs extern char *program_name, which is assumed to be defined
6. Converts *message into wchar_t *wmessage (that's right... it calls
alloca() and realloc() after you've already told it that it's in error...)
7. printfs whatever the caller puts in the format string (that's the
const char* in the arguments)
8. also formats the status and error number (which are the first two
int's in the arguments)
9. frees wmessage
10. increments error_message_count
11. funlocks stderr
12. sets the thread to cancellable

Are the tests relying in all of this behaviour? Or is it basically used to conviently print an error message and exit with the given error code? In that case I think I would be rather easy to provide an error function for libc's that don't provide the <error.h> header

[1] https://www.openwall.com/lists/musl/2014/06/29/8

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.