Я хочу иметь возможность использовать caps lock
клавишу на моей клавиатуре как shift key
когда я ее удерживаю и как backspace
когда я отпускаю клавишу (при условии, что я не нажимал никаких других клавиш в этом интервале). Я предпочитаю собственное решение (такое как xmodmap
), но я не уверен, возможно ли регулировать KEYUP
и KEYDOWN
нажатия, используя только основные системные инструменты.
решение1
Я не знаю никаких традиционных способов сделать это, ноxcapeдозируйте то, что хотите:
#!/usr/bin/env bash
# Remap the key to it's default behavior
# assuming `keycode 66` is your `caps lock`
# check using `xmodmap -pke | grep Caps_Lock`
xmodmap -e 'keycode 66 = Shift_L Shift_L Shift_L Shift_L Shift_L Shift_L'
# if you remaped your standard backspace key (skip
# this line if you didn't) it will no longer be
# available in the keymap but xcape needs it to be there.
# To fix this, pick a keycode that's
# not on your physical keyboard (find one using
# `xmodmap -pke`) and remap it to `BackSpace`. I will
# assume that `keycode 248` is unused:
xmodmap -e 'keycode 248 = BackSpace BackSpace BackSpace BackSpace BackSpace BackSpace BackSpace '
# kill `xcape` if it's already running so you don't
# get two competing instances
pidof xcape | xargs kill -1
# actually start xcape
xcape -e 'Shift_L=BackSpace'
Поместите это в скрипт и запустите его при запуске (конечно, после тестирования).
Возможные проблемы:
К сожалению, это не на 100% надежно (по крайней мере, на моей системе). Иногда он просто случайно перестает работать. Повторный запуск скрипта надежно исправляет это. Я настраиваю сочетание клавиш (на которое не влияют никакие переназначения клавиатуры) для запуска скрипта, поэтому необходимость время от времени перезапускать его не слишком болезненна.
Это добавитВозврат на одну позицию при отпусканииповедение для всех
Shift_L
клавиш. Если таковые имеются (выясните с помощьюxmodmap -pke | grep Shift_L
), вы можете захотеть переназначить их наShift_R
.Есть приложения, которые, похоже, не затронуты этим. Но они действительно редки. Единственное, с чем я столкнулся, это Signal messenger. Также могут быть некоторые видеоигры, которые поставляются со своей собственной встроенной системой ввода и, следовательно, вырезают любые изменения на системном уровне.
PS Я использую это для сопоставления control
и escape
с моим cabslock
ключом. Как пользователь vim
и kakoune
я нахожу это очень полезным.
PPS Извините, если ответ пришел слишком поздно, но это был мой лучший результат в Google, так что даже если это больше не будет полезно автору поста, другим это все равно может пригодиться.