如何将大写锁定映射到箭头键?

我正在尝试将Caps Lock映射到向下箭头键,并使用Shift键将Caps Lock映射到向上箭头键。

我尝试使用xmodmap和以下输入文件:

remove Lock = Caps_Lock keycode 66 = Down Up 

按下大写锁定确实可用于发送向下箭头键,但按下大写锁定+转移不会发送向上。

我究竟做错了什么?

这个解决方案的技术细节将会很多。 如果您不关心问题而只关注解决方案,请随意跳转到布局文件部分。

xmodmap的

通过CAPSShift + CAPS上下移动可以在我的系统上使用给定的.Xmodmap按预期工作。

您可以通过调用来检查您的设置是否真正受到影响

 $ xmodmap -pk | grep ^\\s*66 66 0xffe5 (Caps_Lock) 0x0000 (NoSymbol) 0xffe5 (Caps_Lock) $ setxkbmap -layout us && xmodmap ~/.Xmodmap $ xmodmap -pk | grep ^\\s*66 66 0xff54 (Down) 0xff52 (Up) 

LEVEL2修改器

接下来你的问题还有另一个(真正的)问题:

通过按Shift键激活的LEVEL2 修改器可以在使用箭头键移动线条时在文本编辑器中以可视方式标记字符。 如果将 指定给 的第二级,您实际执行的操作是按Shift + 。 您必须仅为该方案停用Shift修改器。 Afaik你不能使用xmodmap这样做。

重定向LEVEL2修改器

修改关键地图的“真正方法”是使用xkb 。 我在旧的xorg邮件列表上找到了解决方案。 Caps的LEVEL2必须被重定向到 )键(Up-Key btw只有一个级别。)在X.org上,您可以在使用内置函数RedirectKey(key=, clearmods=Shift)期间停用Shift修饰符RedirectKey(key=, clearmods=Shift) 。 clearmods在实际“按下”键之前“释放”Shift修饰符。

布局文件

激活行为的最简单方法是创建一个新的布局文件:

的/ usr /共享/ X11 / XKB /符号/ capslockarrow

 default partial xkb_symbols "basic" { include "de(basic)" include "shift(both_capslock_cancel)" key  { type[Group1] = "TWO_LEVEL", symbols[Group1] = [ Down, NoSymbol ], actions[Group1] = [ NoAction(), RedirectKey(key=, clearmods=Shift) ] }; }; 

使用激活新布局

 setxkbmap capslockarrow 

有关布局文件的说明

  • 新的布局文件来自de(basic) 。 这是标准德语键盘的布局。 您可以在此处添加任何其他布局,例如us(basic)us(euro) 。 请参阅/usr/share/X11/xkb/symbols/以了解可能的内容。 两个字母的代码是文件名,括号中是文件中相应的xkb_symbols定义。

  • 你将不再拥有大写键修饰符。 因此,我为Caps添加了一种替换: shift(both_capslock_cancel)通过同时按下LSHIFTRSHIFT ,您可以激活CAPS Lock并再次按下Shift键释放Lock。

  • 如果有人想知道为什么我没有使用新的类型定义:我只是在触发向上键的操作之前无法释放Shift修饰符。 尽管可以通过在xkb_types显式调用preserve[Shift] = None来释放Shift键。

  • 如下面的评论所述,Wayland也将依赖XKB,但不允许重定向。