使用 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

無論我嘗試做什麼,控制鍵都不會被指派給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

相關內容