Techie info

This driver was built using Microsoft's free keyboard layout creator tool, which makes it easy to build your own keyboard layouts.

MSKLC doesn't natively support chained dead keys (sequences of more than two keystrokes), but Michael Kaplan, who originally wrote MSKLC, has a blog entry which explains how to do it.

Each dead key needs a code point to represent the dead key itself, even though that character is only printed if you follow it by an unrecognised character. For some reason if that code point isn't one of the first 4096, it doesn't work.

You can work around this by making sure nothing is undefined (by defining every keystroke in every dead key, including tab, return and backspace). However there does appear to be a limit on the number of keystrokes that can be defined in keyboard driver, and when I tried this with the number of deadkeys I'd defined, that resulted in a non-functioning driver. So this driver just tries to make sure that moderately sensible code points are chosen to represent dead keys.

Also, the code point representing a dead key mustn't be a keystroke that can be used following that dead key. For example, if you make "AltGr+@" a dead key, represented by "@", and also define "AltGr+@ @" as a valid combination, which is itself a dead key, then pressing "AltGr+@" will be treated as if you'd typed "AltGr+@ @". Not a big problem if you know to avoid that, but confused me for a while. Given that Microsoft don't officially claim chained dead keys work at all, you can't be too upset for this relatively minor bug, which is easily avoided (by choosing a different code point to represent the dead key).