On 16 Jan 2015, at 0:49, Igor K wrote:
Most of the shortcuts are not working when I have Russian keyboard layout active. […]
It would be all the shortcuts that do not use command (⌘). You should find that NSTextView has the same problem, for example ⌃A / ⌃E should move to begin/end of line, but with Russion key map it will not do that (nor does any of the other system defined key bindings with control seem work).
The reason command works is because Apple change the mapping back to Latin for this key. So ⌘ц is seen by applications as ⌘W, but such mapping is not done for control (⌃) so ⌃ц is just ⌃ц.
I think that everything that resides in the upper menu works with any layout, everything else works only when using English layout for me.
Apple has some advanced heuristic for mapping key equivalents to menu actions, but it’s not available for third parties to use (or NSTextView, it would seem).
I updated my own heuristic so that when control is down, and the result from the system is a non-ASCII character, then I will ignore the current keyboard mapping and use the virtual key code to get the character that would appear on a US keyboard.
This is a bit dirty (translating a virtual key code to a character using my own table), but since it is only done when control is down *and* the system translates the key event to a non-ASCII character, I don’t think it will break any existing desired behavior.