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

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

Я понимаю, что переназначение клавиш со стрелками — старая проблема, однако я не могу найти хорошего решения, которое позволило бы мне выделять текст с помощью 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;dr; как можно использовать Shift-выбор, переназначенные клавиши со стрелками под X?

решение1

Для этого можно использовать preserve: добавьте к вашему определению типа (например THREE_LEVEL, ) строку

preserve[LevelThree+Shift] = Shift;

Это сообщает xkb о необходимости сохранения модификатора сдвига при определении соответствующего уровня из вашей комбинации модификаторов в случае LevelThree + Shift. Модификатор сдвига передается для использования набором инструментов или приложением (см. также здесь:использование сохранения с типами).

Обратите внимание, что это влияет, например, на то, как приложение интерпретирует комбинации клавиш: если вы определили выше сохранение и

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

и вы нажмете клавишу , Ctrl + Shift + LevelThree + <AC08>приложение воспримет это как комбинацию клавиш Ctrl + Shift + kappa(вместо того, как обычно Ctrl + kappa), поскольку модификатор Shift сохраняется и передается в приложение.

Связанный контент