当我编程时,我喜欢交换这些键:
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
这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
)
该keycode
版本的优点是幂等,意味着多次运行 xmodmap 效果不会改变。
答案2
松散相关的答案:我想将大写锁定键重新映射到左控件,使实际的左控件保持不变。 xmodmap 手册页还提供了解决方案:
keycode 66 = Control_L
clear Lock
add Control = Control_L