我可以将 Caps Lock 更改为 Hyper/Additional Modifier 吗?

我可以将 Caps Lock 更改为 Hyper/Additional Modifier 吗?

在 Arch Linux 中,我将 Caps Lock 功能作为备用 Ctrl:在控制台中通过个人键盘映射,在 X 中通过xorg.conf.

我已经研究了一些关于将 Caps Lock 更改为 Hyper 修改器的信息,听起来这在控制台中不可行,但是有什么方法可以为 X 做到这一点吗?

这是我目前用于 X 的内容:

Option "XkbOptions" "ctrl:nocaps"

是否有一个XkbOptions选项或类似的东西可以使大写锁定充当附加修饰符?

我的目标是能够使用新的修饰符在 Emacs 中创建更多自定义键盘映射。

答案1

使用 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 被分配给与超级键相同的修饰符,因此被视为超级键。这些命令将从 mod4 中删除它并将其放入空的 mod3 修改器映射中:

xmodmap -e "remove Mod4 = Hyper_L" -e "add Mod3 = Hyper_L"

如果 Hyper_L 没有出现在修改器映射列表中,则可能不需要删除命令。

修改器映射的神秘性取决于 X11 如何传达修改器是否已关闭。它发送一个单字节位字段,每个位对应于一个修饰符映射,而不是发送“Hyper”或“Super”。应用程序必须查看修饰符映射并找出特定位的实际含义。例如,如果您同时将 Super 和 Hyper 键分配给 mod4,则应用程序无法判断 Super 或 Hyper(或两者)是否被按下。

答案2

这对我有用:

keycode 66 = BackSpace
remove Mod4 = Hyper_L
add Mod3 = Hyper_L
keycode 66 = Hyper_L

答案3

虽然使用 xmodmap 的其他答案是正确的,但还有一种更简单的方法。代替:

Option "XkbOptions" "ctrl:nocaps"

只需使用:

Option "XkbOptions" "caps:hyper"

您可以在 /usr/share/X11/xkb/rules/base.lst 中找到所有选项

相关内容