FWIW in regards to keyboard handling I think you should implement a non-linear response such as :

2016-07-01 19_58_24-Easing Functions Cheat Sheet.png

http://easings.net/

If you use a power easing, you could make everyone happy, using an exponent of 1 gives a linear response, greater than 1 a 'slow' response, less than 1 a 'faster' response, so by some 'responsiveness' settings in your keyboard options it could adapt to any user wishes. So basically you transform your keyboard to an analog device which in turns allows to treat all input devices the same in your code.

Basically this is what it would takes in terms of coding :

https://github.com/aybe/InputMapper/...boardButton.cs
https://github.com/aybe/InputMapper/...utMapper/Maths