XKB - переназначение клавиш со стрелками и сохранение поведения сдвига для выделения текста

1544
dgirardi

Я понимаю, что переназначение клавиш со стрелками - старая проблема, однако я не могу найти хорошего решения, которое позволило бы мне выделять текст с помощью переназначенных клавиш SHIFT +, как я это делал бы с ванильными клавишами со стрелками.

Например, если я переназначу Caps Lock в ISO_Level3_Shift и установлю xkb_symbols для чтения либо

key <AC08> { [ k, K, Down, Down] }; 

или же

key <AC08> { type="THREE_LEVEL", [ k, K, Down ] }; 

Нажатие Shift + CapsLock + K будет вести себя точно так же, как CapsLock + K (в то время как Shift + Down ведет себя иначе, чем только Down).

У меня был несколько больший успех с использованием высокоуровневых макро-утилит и генерацией событий клавиатуры (т.е. генерация клавиш Shift и клавиш со стрелками); Однако при таком подходе возникает целый ряд различных проблем - часто реакция пользовательского интерфейса на симулированное нажатие клавиши отличается от «реального» нажатия клавиш, а также возникают проблемы с производительностью - я могу печатать быстрее, чем то, с чем может справиться вещь.

Tl, др; как вы можете смещать-выбирать, используя переназначенные клавиши со стрелками под X?

5

1 ответ на вопрос

5
stev47

You can use preserve for that: add to you type-definition (e.g. THREE_LEVEL) the line

preserve[LevelThree+Shift] = Shift; 

This tells xkb to preserve the shift modifier when figuring out the appropriate level from your modifier combination in the case of LevelThree + Shift. The shift modifier is passed on for use by the toolkit or the application (see also here: using preserve with types).

Note that this has impact for example on how the application interprets keystroke combinations: if you had defined the above preserve and

key <AC08> { type="THREE_LEVEL", [ k, K, kappa ] }; 

and you'd press Ctrl + Shift + LevelThree + <AC08> the application would read it as a key combo Ctrl + Shift + kappa (instead of usually Ctrl + kappa) because the shift modifier gets preserved and is passed on to the application.

Это то, что я искал, но мне не хватает одного последнего пункта: возможно ли настроить xkb так, чтобы одно нажатие клавиши переключало клавиши Shift (или другие)? Я хочу, чтобы, например, CapsLock + s переключал клавишу Shift, чтобы я мог использовать Capkslock + jkl для выделения текста. dgirardi 10 лет назад 0

Похожие вопросы