- Characters can't always be implicity shifted; e.g., in the old-backspice map I was using, Shift-1 was actually Ctrl-A, not exclamation point. So I added a check to make sure that a second shifted key doesn't have a more specific binding.
- Shifting in general is awkward: to send a shifted character (e.g., exclamation point), the twiddler will set the shift bit, but it's still the base keycode being sent (e.g., 1), so this has to be handled. It's annoying how shift is both a modifier and baked into the USB Hid standard with the two symbols per key setup.
- The HidMap includes things like "(underscore)", "Comma" and "Keyboard"; it looks like "Keyboard" is actually comma on a standard US keyboard. I just hacked up HidMap.js to make this easy, though it's arguably cleaner to use a lookup table and leave the HidMap itself unmodified.
- I added a reader for "strings", the bodies of MCCs. I haven't actually hooked them up to MCC keys, but confirmed that the reading appears to work correctly, including modifiers.
In general, I'm not a huge fan of how this is laid out; it was simple enough for what you had, but adding more features made it kind of bulky, and I suspect there's a cleaner way to arrange things. But it works for me, and in any case, I figured I'd let you know my progress. You're welcome to steal my changes, use them for inspiration, or ignore them entirely.