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 сохраняется и передается приложению.

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