XKB - переназначение клавиш со стрелками и сохранение поведения сдвига для выделения текста
Я понимаю, что переназначение клавиш со стрелками является старой проблемой, однако я не могу найти хорошего решения, которое позволило бы мне выделять текст с помощью переназначенных клавиш 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, др; Как вы можете Shift-выбрать с помощью переназначенных клавиш со стрелками под X?
1 ответ
Ты можешь использовать preserve
для этого: добавьте к вам определение типа (например, THREE_LEVEL
) линия
preserve[LevelThree+Shift] = Shift;
Это говорит xkb сохранить модификатор shift при вычислении соответствующего уровня из вашей комбинации модификаторов в случае LevelThree + Shift
, Модификатор shift передается для использования инструментарием или приложением (см. Также здесь: использование preserve с типами).
Обратите внимание, что это влияет, например, на то, как приложение интерпретирует комбинации нажатий клавиш: если вы определили вышеприведенное сохранение и
key <AC08> { type="THREE_LEVEL", [ k, K, kappa ] };
и ты нажмешь Ctrl + Shift + LevelThree + <AC08>
приложение будет читать его как комбинацию клавиш Ctrl + Shift + kappa
(вместо обычно Ctrl + kappa
), поскольку модификатор shift сохраняется и передается приложению.