Как умудрились насрать в такую базовую вещь, как ввод с клавиатуры?
Шинда
Ввод с клавиаутуры в Windows имеет несколько уровней абстракции:
scan_code virtual_key Symbol ну дальше там может другие символы, аля shift, altgr и т.д.
, где scan_code неизменяем, присваивается драйвером (ну в современных дровах можно ремапить матрицу, но не суть)
virtual_key - бесполезное говно, которое родилось от тупости разрабов ОС, но не пропадает из-за тупости разрабов прог, которые к нему привязались. Изначально создан для поддержки хоткеев на всех языках, т.е. в него мапится обычная раскладка qwerty, чтоб на условном йцукен работли хоткеи (the right way: привязывать инпут к sc, а не vk)
Symbol - ну уже букавки совершенно любые в соответсвии раскладки.
Игры?
Ебучий устаревший DirectInput мапит по VK - всё что на нём - всё говно.
Сраный Unity придумал свой Input Manager, где Input.getKey анально привязан к Symbol
Вродь они обновили систему инпута - теперь можно хапать клавиши через скан коды типа Keyboard.current.wKey, но серавно в каких то ситуациях происходит хуйня в случае с кастомными раскладками.
в UE если разраб не въебёт по калочке аля “use scan code” - инпут будет через vk.
Вот только, дядушка Габен в сурсе юзает scan_code для ввода мувмента.
Есть и другие норм примеры
Где-то до 1.9-1.12 (точно не помню)
В майне был другой код инпута - всё привязывалось к vk.
Т.е. условно, если у тебя он изменён (а в некоторых раскладках он изменён, вроде в fr и de если не ошибаюсь, я уж не говорю про нормальные) - тебе приходилось ребиндить.
Потом в более новых версиях переписали на sc - всё стало пиздато работать.
в миникрафт бедроке пошли нахуй, у нас directinput йоу
А программы?
А ебучий aseprite блять по Symbol хуярит и искренне непонимает что нахуй происходит, когда ты меняешь раскладку на йцукен или любую другую. Хоткеи у тебя улетают куда-то хуй пойми куда.
Так многие на vk, нормальные ребята на sc
В оснтальном все ходят через WinAPI - соответсвенно vk
А линупс
А там тоже насрали, и кабуда даже сильнее.
На аппаратном уровне ядра scan_code
Ядро даёт абстракцию такого же типа, акы переваривает scan_code в условные key_q, key_w, key_e (linux_keycode)
Какой-нить xkb берёт чо ядро высрало и высерает свои позиции акы <AE01>, <AE02> … <AB01>, <AB02> … <AC01>, <AC02>
И уже эту координату XKB мапит напрямую в символы (Keysyms) - типа <AD01> == q, иль в русиш == Cyrillic_shorti (й).
Может, когда-нибудь, операционные системы начнут поддерживать другие языки, помимо англиского.
Но видимо пока рано.