使用 xmodmap 重新映射 Caps Lock 不起作用

使用 xmodmap 重新映射 Caps Lock 不起作用

当我编程时,我喜欢交换这些键:

EscTab CtrlCapsLock

在 中~/.xmodmap,我指定了这些重新映射:

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

和键互换,没问题,但不是和交换,这两个键都变成Escape了。TabCaps_LockControl_LCaps_Lock

无论我尝试做什么,Control 键都不会被分配给Caps_Lock(键码 66)。如果我离开keycode 66 =,则该键未分配,但是当我分配Control_L或 时Control_R,它就不起作用。但是,如果我分配其他键,例如 ,keycode 66 = Tab它就会被分配,没有问题。

就像 xmodmap 只是不希望 Caps Lock 和 Control 键交换。真是令人沮丧。任何帮助/指示都会非常有帮助。

PS:我使用的是Archlinux。

答案1

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

但如果你想按照开始的方式完成它,我认为你至少需要添加removeadd

   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

keycode版本的优点是幂等,意味着多次运行 xmodmap 效果不会改变。

答案2

松散相关的答案:我想将大写锁定键重新映射到左控件,使实际的左控件保持不变。 xmodmap 手册页还提供了解决方案:

    keycode 66 = Control_L
    clear Lock
    add Control = Control_L

相关内容