
Когда я программирую, мне нравится менять местами эти клавиши:
Esc↔ Tab Ctrl↔CapsLock
В ~/.xmodmap
я указал следующие переназначения:
keycode 66 = Control_L
keycode 37 = Caps_Lock
keycode 23 = Escape
keycode 9 = Tab
Клавиши Escape
и Tab
меняются местами, проблем нет, но вместо того, чтобы поменять местами Caps_Lock
и Control_L
, обе эти клавиши становятся Caps_Lock
.
Что бы я ни пытался сделать, клавиши Control не назначаются Caps_Lock
(код клавиши 66). Если я оставляю keycode 66 =
, клавиша не назначается, но когда я назначаю Control_L
или Control_R
, она просто не работает. Но если я назначаю какую-то другую клавишу, например, keycode 66 = Tab
, она назначается, без проблем.
Как будто xmodmap просто не хочет менять местами клавиши Caps Lock и Control. Очень раздражает. Любая помощь/указания были бы очень полезны.
PS: Я использую Archlinux.
решение1
TheСтраница руководства xmodmap(1)есть пример именно для этого
!
! Swap Caps_Lock and Control_L
!
remove Lock = Caps_Lock
remove Control = Control_L
keysym Control_L = Caps_Lock
keysym Caps_Lock = Control_L
add Lock = Caps_Lock
add Control = Control_L
но если вы хотите закончить так же, как начали, я думаю, вам нужно добавить как минимум строки remove
иadd
remove Lock = Caps_Lock
remove Control = Control_L
keycode 37 = Caps_Lock
keycode 66 = Control_L
add Lock = Caps_Lock
add Control = Control_L
Я предполагаю, что это так, основываясь на этом абзаце.
add MODIFIERNAME = KEYSYMNAME ...
This adds all keys containing the given keysyms to the indi‐
cated modifier map. The keysym names are evaluated after all
input expressions are read to make it easy to write expressions
to swap keys (see the EXAMPLES section).
что звучит так, будто изменения модификаторов (shift, control и т. д.) не применяются, пока вы не запустите и это.
(И логически то же самое с remove
)
keycode
Преимущество этой версии в том, что она идемпотентна, то есть эффект не изменится, если xmodmap будет запущен несколько раз.
решение2
Слабо связанный ответ: Я хотел переназначить клавишу Caps Lock на левый элемент управления, оставив сам левый элемент управления нетронутым. Страница руководства xmodmap также предлагает решение:
keycode 66 = Control_L
clear Lock
add Control = Control_L