Emacs
我可以將大寫鎖定更改為超/附加修飾符嗎?
在 Arch Linux 中,我將 Caps Lock 功能用作備用 Ctrl:在控制台中通過個人鍵盤映射,在 X 中通過
xorg.conf
.我已經研究了一些關於將 Caps Lock 更改為 Hyper 修飾符的問題,聽起來這在控制台中是不可行的,但是有什麼辦法可以為 X 做到這一點嗎?
這是我目前用於 X 的內容:
Option "XkbOptions" "ctrl:nocaps"
是否有一個
XkbOptions
選項或類似的東西可以讓 Caps Lock 像一個額外的修飾符一樣起作用?我的目標是能夠使用 new 修飾符在 Emacs 中創建更多自定義鍵映射。
使用 xmodmap 可能更容易做到這一點。將以下內容放入您的 .xsession 或 .xinitrc:
xmodmap -e "keysym Caps_Lock = Hyper_L"
您還需要確保將 Hyper_L 分配給不與其他鍵共享的修飾符映射,否則它可能會為這些鍵生成修飾符(或者這些鍵可能變為 Hyper)。不帶參數執行
xmodmap
(您的輸出可能不同):> xmodmap xmodmap: up to 3 keys per modifier, (keycodes in parentheses): shift Shift_L (0x32), Shift_R (0x3e) lock control Control_L (0x25), Control_L (0x42), Control_R (0x69) mod1 Alt_L (0x40), Alt_R (0x6c), Meta_L (0xcd) mod2 Num_Lock (0x4d) mod3 mod4 Super_L (0x85), Super_R (0x86), Super_L (0xce), Hyper_L (0x4e) mod5 ISO_Level3_Shift (0x5c), Mode_switch (0xcb)
在本例中,Hyper_L 被分配給與 Super 鍵相同的修飾符,因此被視為 Super 鍵。這些命令會將其從 mod4 中刪除並將其放入空的 mod3 修改器映射中:
xmodmap -e "remove Mod4 = Hyper_L" -e "add Mod3 = Hyper_L"
如果 Hyper_L 未出現在修改器貼圖列表中,則可能不需要刪除命令。
修改器貼圖的奧秘是由於 X11 如何傳達修改器是否已關閉。它發送一個單字節位域,每個位對應於一個修飾符映射,而不是發送“Hyper”或“Super”。應用程序必須查看修改器貼圖並找出特定位的實際含義。例如,如果您將 Super 和 Hyper 鍵都分配給 mod4,則應用程序無法判斷 Super 或 Hyper(或兩者)是否被按住。
這對我有用:
keycode 66 = BackSpace remove Mod4 = Hyper_L add Mod3 = Hyper_L keycode 66 = Hyper_L