Независимо ли расположение клавишных кодов linux/input.h?

Например, в input.h, KEY_D равно 32. На QWERTY-клавиатуре D - это третья клавиша для печати слева в главном ряду. На клавиатуре DVORAK эта же клавиша помечена буквой E. Поэтому, если я нажму E на клавиатуре DVORAK, получу ли я KEY_D (32) или KEY_E (18)?

1 ответ

Решение

Ты получишь KEY_D, Эти значения являются абстракцией клавиш, так как они размещены на типичной физической клавиатуре (см. ISO 9995) после абстрагирования от всех деталей интерфейса (см., Например, три набора кодов сканирования ПК и другую сетку). Но это еще не учитывает альтернативные схемы размещения, ни национальные, такие как AZERTY, ни специальные, такие как Dvorak. Они реализованы на следующем уровне, где независимые коды клавиш зависят от модификаторов и преобразуются в результирующие строки и события.

Документ USB "HID таблицы использования" явно гласит:

Примечание. Общее примечание об использовании и языках. Из-за различий клавиатур от языка к языку невозможно определить точные сопоставления клавиш для каждого языка. Если этот список не является специфическим для ключевой функции в языке, следует использовать ближайшую эквивалентную позицию клавиши, чтобы можно было изменить клавиатуру для другого языка, просто распечатав разные сочетания клавиш. Одним из примеров является клавиша Y на клавиатуре Северной Америки. В Германии это, как правило, Z. Вместо того, чтобы менять прошивку клавиатуры, чтобы поместить Z Usage в это место в списке дескрипторов, поставщик должен использовать Y Usage как на североамериканской, так и на немецкой клавиатурах. Это продолжает быть существующей практикой в ​​промышленности, чтобы минимизировать количество изменений в электронике, чтобы приспособить другие языки.

так что, если даже ваша клавиатура изначально Dvorak, вы получите KEY_D, Вы можете рассматривать это как "универсальный" KEY_C03 (см. снова имена ключей ISO9995), если это удовлетворяет (большинство источников разметки XKB используют эту запись).

Другие вопросы по тегам