⌨️UVftdanEvdevremap

evdevremap β€” ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ софтину для выполнСния раскладок (ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ событий устройств Π²Π²ΠΎΠ΄Π°) Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ evdev (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Π΄Π°ΠΏΡ‚Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ΄ ОБ, Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ). ΠœΡ‹ΡΠ»ΠΈ для сСбя я Π½Π°ΠΊΠΈΠ΄Ρ‹Π²Π°ΡŽ Π² Π³ΡƒΠ³Π» Π΄ΠΎΠΊ. ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΡƒΡ‚, Π² Π³ΡƒΠ³Π» Π΄ΠΎΠΊΠ΅ ΠΈΠ»ΠΈ Π² Ρ‡Π°Ρ‚Π°Ρ… сообщСства ΠΊΠ»Π°Π²Π°Π²ΠΈΠΊΠΈ (Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… я Π΅ΡΡ‚ΡŒ). Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° NOMK.

Π‘ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ исполняСмыС Ρ„Π°ΠΉΠ»Ρ‹

  • Π˜ΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒ β€” Π΄Π΅ΠΌΠΎΠ½, ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ написанный Π½Π° Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠΌ языкС (C), ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ΅ описаниС раскладки, ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ события

  • ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ β€” ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°, Π½Π° высокоуровнСвом языкС (Python, Java, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ с использованиСм ANTLR ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ компилятора компиляторов), ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»Π° с Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΠ³ΠΎ языка Π² ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ для Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊΠΈ вдохновСния

Vim

Π˜ΠΌΠ΅Π΅Ρ‚ Ρ€Π΅ΠΆΠΈΠΌΡ‹ (ΠΊ соТалСнию, Π·Π°Ρ…Π°Ρ€Π΄ΠΊΠΎΠΆΠ΅Π½Ρ‹) + ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ ΠΎΠ΄Π½ΠΈΡ… ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΉ Π² Π΄Ρ€ΡƒΠ³ΠΈΠ΅ (ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‚ΡŒΡŽΡ€ΠΈΠ½Π³ ΠΏΠΎΠ»Π½Ρ‹ΠΉ, см. ΠΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠœΠ°Ρ€ΠΊΠΎΠ²Π°).

Xkb

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΉ инструмСнт для задания раскладок Π² X11, ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ, Π½Π°ΠΏΡ€. ΠΎΠΊΠΎΠ»ΠΎ 255 ΠΊΠΎΠ΄ΠΎΠ² клавиш, ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ°Π»ΠΎΠ΅ количСство ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΡ… Π½Π΅ распрСдСлСны ΠΈ подходят для Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ использования.

ВрСбования

Π’ΡŒΡŽΡ€ΠΈΠ½Π³-ΠΏΠΎΠ»Π½ΠΎΡ‚Π°

НуТна для возмоТности Π·Π°Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°.

Π–Π΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ. Вариация ΠΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠœΠ°Ρ€ΠΊΠΎΠ²Π° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΠ΄ΠΎΠΉΡ‚ΠΈ.

Π Π΅ΠΆΠΈΠΌΡ‹ (слои)

ΠœΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π±Π΅Π· ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° (ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ прСфикс ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ/Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ²), Π½ΠΎ это Π½Π΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎ.

Π”ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ нСсколько ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ ΠΈΠ· Ρ€Π°Π·Π½Ρ‹Ρ… Ρ€Π΅ΠΆΠΈΠΌΠΎΠ² ΠΏΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ. ΠŸΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ΡΡ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ раскладку ΠΊΠ°ΠΊ Π³Ρ€Π°Ρ„, ΠΏΠΎ Ρ€Ρ‘Π±Ρ€Π°ΠΌ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ двиТутся события, ΡƒΠ·Π»Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ дСйствия (Π½Π°ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ ΠΈΡ… Π½Π° Ρ€Π°Π·Π½Ρ‹Π΅ Π²Ρ‹Ρ…ΠΎΠ΄Ρ‹, ΠΌΠ΅Π½ΡΡŽΡ‚ своё Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ состояниС, Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‚ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ). НуТно ΠΏΡ€ΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ порядок исполнСния (Ρ€Π΅ΠΆΠΈΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ Π΄ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… событий).

ПозТС я наткнулся Π½Π° этот язык, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ ΠΏΠΎ ΠΏΠΎΡ…ΠΎΠΆΠΈΠΌ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°ΠΌ (Ρ‚Π°ΠΊΠΎΠ΅ прСдставлСниС Π½Π° плоскости Π½Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ):

Π’ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…

(under construction)

  • EventCode β€” ΠΎΠ΄Π½ΠΎ ΠΈΠ»ΠΈ Π΄Π²Π° числа (ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΏΠΎ 16 Π±ΠΈΡ‚) (ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π½ΠΈΡ… являСтся ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ ΡƒΠ·Π»Π° Π³Ρ€Π°Ρ„Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ для ΡƒΠ·Π»ΠΎΠ² Π½ΡƒΠΌΠ΅Ρ€Π°Ρ†ΠΈΡŽ ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ события Π² соотвСтствии с источником).

  • Modifier β€” ΠΎΠ΄Π½ΠΎ Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½ΠΎΠ΅ число. ΠžΠΏΠΈΡΡ‹Π²Π°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ (Shift, Alt, ...) ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π±ΡƒΠ»Π΅Π² Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ вмСстС с ΠΊΠΎΠ΄ΠΎΠΌ события для Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ. Π’ ΠΊΠΎΠ½Ρ†Π΅ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Ρ‹ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ события заТатия ΠΈ отпускания клавиши-ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°.

  • Event β€” структура: EventCode, Set<Modifier>, int ttl, number value, long creation_time

    • ttl Π½ΡƒΠΆΠ΅Π½, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ зацикливания, Π½ΠΎ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π΄ΠΎ нуля Π² Π΄Π°Π½Π½ΠΎΠΉ раскладкС, Ссли ΠΎΠ½Π° ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ написана

    • value ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для вычислСний ΠΈ для хранСния Ρ‚Π°ΠΊΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, ΠΊΠ°ΠΊ смСщСниС ΠΌΡ‹ΡˆΠΈ ΠΈ состояниС клавиши (ΠΏΡ€ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈΠ· Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° evdev ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ)

    • creation_time Π½Π΅ содСрТит настоящСго Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π° слуТит для сортировки событий ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ создания (Π³Ρ€Π°Π½ΠΈΡ†Π° цСлочислСнного пСрСполнСния постСпСнно сдвигаСтся ΠΈΠ· прСдполоТСния, Ρ‡Ρ‚ΠΎ Π½Π΅ хранится событий ΡΡ‚Π°Ρ€ΡˆΠ΅ 263)