On a related note, three things I'm wondering about:
1. How far to take this. Should even left-click be reassignable to some other key? (Imagine pointing the mouse, then pressing K to actually select the lemming. This is of course, a very extreme example; more likely is for someone to perhaps remap it to right-click.)
2. Allow multiple keys for the same function? This would be nessecary to some extent in order to transfer all existing hotkeys (specifically, pause has three different hotkeys under NeoLemmix V1.xxn, all of which are completely interchangable and do the exact same thing - F11, P, or middle-click). However, allowing customization may eliminate the need for this.
3. For those where it's applicable, should a selection be implemented between "Hold the button and click", or just "Press the button"? To illustrate the difference - we'll use the example of forcing selection of a walker here. Currently in V1.xxn (assuming Ctrl / Right-Click Inversion is off), to force selecting a walker, you hold Ctrl and click the lemming. This option could allow you to select instead, rather than holding Ctrl and clicking, you simply aim the mouse and press Ctrl and it instantly selects a walker. This could be particularly useful for certain functions if they're mapped to mouse buttons.
In each of these cases, they'll be difficult (and perhaps a tad slower) to code, but I've thought of them as possibilities, and could implement them if it's likely that people will use them.
Current test code has given some limitations on what keys can be used. In particular:
- Doesn't seem to be able to detect the Tab key (though I've found a possible workaround for this, but haven't tested it yet)
- Doesn't seem to be able to differentiate between Left Shift and Right Shift, or between Left Alt and Right Alt when using English keyboard layout (yet it can when using some foreign layouts, such as Korean; since in my case the only difference is the IME, I would assume that at some level the keys can be differentiated, and it's simply a matter of how to write the code that tells them apart). Interestingly, it can differentiate between Left Ctrl and Right Ctrl.
Of course, the key words here is "test code"; it was a very quickly hacked-up app for the purpose of testing key input. Needless to say, more significant effort would go into any implementation that even makes it into NeoLemmix's code, let alone in a "final" version.