Post

Note for Windows PC users - apologies for the shift keys not working properly. I've mapped left shift to CAPS SHIFT and right shift to SYMBOL SHIFT. For some reason a KEYUP event consistently goes missing when you hold both shift keys then release one or both. Works fine on Linux and Mac.

windows treats modifier state as unified , e.g. here both shift keys, but will only send one keyup when the last is released. you can call getkeystate for vk_lshit and rshift on every shift event (keyup, down, syskeyup, etc) like bool ls = GetKeyState(VK_LSHIFT) & 0x8000) != 0 . or raw input.