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