Переназначение Caps Lock с xmodmap не работает

10

Когда я программирую, я люблю менять эти клавиши:

EscTab CtrlCapsLock

В ~/.xmodmap, я указал эти переопределения:

keycode 66 = Control_L
keycode 37 = Caps_Lock
keycode 23 = Escape
keycode 9 = Tab

EscapeИ Tabключи свопы, никаких проблем, но вместо того , чтобы Caps_Lockи Control_Lподкачка, оба эти клавиши становятся Caps_Lock.

Что бы я ни пытался сделать, клавиши управления не назначаются Caps_Lock(код клавиши 66). Если я оставляю keycode 66 =, ключ не назначен, но когда я назначаю Control_Lили Control_R, он просто не работает. Но, если я назначу какой-то другой ключ, например keycode 66 = Tab, он будет назначен, нет проблем.

Он как xmodmap просто не хочет менять местами клавиши Caps Lock и Control. Действительно расстраивает. Любая помощь / указатели были бы действительно полезны.

PS: я использую Archlinux.

Аби Джеймс
источник

Ответы:

8

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).

что звучит так, как будто изменения модификатора (сдвиг, управление и т. д.) не применяются до тех пор, пока вы их тоже не запустите.

(И логически то же самое с remove)

Mikel
источник
Я прочитал man-страницу и переназначил клавиши Caps_Lock и Control_L, следуя примеру. Но мне было любопытно, почему переназначение клавиш способом, описанным в ОП, не работает. Это ошибка или что-то?
Аби Джеймс
Кажется, это так, как это должно работать. Смотрите мой обновленный ответ.
Микель
4

Свободно связанный ответ: я хотел переназначить клавишу блокировки колпачков на левый элемент управления, оставив фактический левый элемент управления нетронутым. Страница man xmodmap также предлагает решение:

    keycode 66 = Control_L
    clear Lock
    add Control = Control_L
Климент Б.
источник