Emacs

我可以將大寫鎖定更改為超/附加修飾符嗎?

  • August 31, 2016

在 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

引用自:https://unix.stackexchange.com/questions/91743