用xmodmap重新映射大写锁定不起作用


10

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

EscTab CtrlCapsLock

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

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

EscapeTab键互换,但没有任何问题,而不是Caps_LockControl_L交换,这两个按键变成Caps_Lock

无论我做什么,都不Caps_Lock会将Control键分配给(键代码66)。如果我离开keycode 66 =,则未分配密钥,但是当我分配Control_L或时Control_R,它就无法使用。但是,如果我分配了其他键,例如keycode 66 = Tab,它就被分配了,没问题。

就像xmodmap一样,它不希望大写锁定和控制键互换。真令人沮丧。任何帮助/指针将非常有帮助。

PS:我正在使用Archlinux。

Answers:


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

但是,如果您想按照开始的方式完成操作,我认为您至少需要添加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).

听起来好像修改器更改(shift,control等)在应用之前也不会应用。

(与逻辑上相同remove


我确实阅读了联机帮助页,并根据示例重新分配了Caps_Lock和Control_L键。但是,我很好奇为什么按OP中提到的方式重新映射键不起作用。是虫子还是什么?
阿比·詹姆斯

似乎只是它应该工作的方式。看到我更新的答案。
Mikel

4

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

    keycode 66 = Control_L
    clear Lock
    add Control = Control_L
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.