Reasignar el bloqueo de mayúsculas con xmodmap no funciona

Reasignar el bloqueo de mayúsculas con xmodmap no funciona

Cuando programo me gusta intercambiar estas claves:

EscTab CtrlCapsLock

En ~/.xmodmap, he especificado estas reasignaciones:

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

Las claves Escapey Tabse intercambian, no hay problema, pero en lugar de Caps_Lockintercambiarse Control_L, ambas claves se convierten en Caps_Lock.

Independientemente de lo que intento hacer, las teclas de Control no se asignan Caps_Lock(código clave 66). Si dejo el keycode 66 =, la clave no está asignada, pero cuando asigno Control_Lo Control_R, simplemente no funciona. Pero si asigno alguna otra clave, por ejemplo, keycode 66 = Tabse asigna, no hay problema.

Es como si xmodmap simplemente no quisiera que se intercambiaran las teclas Bloq Mayús y Control. Realmente frustrante. Cualquier ayuda/consejo sería realmente útil.

PD: estoy usando Archlinux.

Respuesta1

Elpágina de manual xmodmap(1)tiene un ejemplo para exactamente esto

   !
   ! 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

pero si quieres terminar de hacerlo como empezaste, creo que necesitas agregar al menos las líneas removeyadd

   remove Lock = Caps_Lock
   remove Control = Control_L
   keycode 37 = Caps_Lock
   keycode 66 = Control_L
   add Lock = Caps_Lock
   add Control = Control_L

Supongo que ese es el caso según este párrafo.

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

lo que hace que parezca que los cambios de modificador (shift, control, etc.) no se aplican hasta que lo ejecutes también.

(Y lógicamente lo mismo con remove)

La keycodeversión tiene la ventaja de ser idempotente, lo que significa que el efecto no cambiará si xmodmap se ejecuta varias veces.

Respuesta2

Respuesta vagamente relacionada: quería reasignar la tecla de bloqueo de mayúsculas al control izquierdo, dejando intacto el control izquierdo real. La página de manual de xmodmap también ofrece la solución:

    keycode 66 = Control_L
    clear Lock
    add Control = Control_L

información relacionada