Jar*_*ach 5 keyboard xmodmap xkb 16.04
我正在尝试将 Caps Lock 映射到向下箭头键,并将 Caps Lock 映射到带有 shift 修饰符的向上箭头键。
我尝试将 xmodmap 与以下输入文件一起使用:
remove Lock = Caps_Lock
keycode 66 = Down Up
Run Code Online (Sandbox Code Playgroud)
按大写锁定确实可以发送向下箭头键,但按大写锁定 + shift 不会发送向上。
我究竟做错了什么?
该解决方案有很多技术细节。如果您不关心问题而只关心解决方案,请随意跳转到布局文件部分。
\n\nCAPS通过和Shift+上下移动CAPS可以在我的系统上按.Xmodmap预期给定。
您可以通过调用来检查您的设置是否确实受到影响
\n\n$ xmodmap -pk | grep ^\\\\s*66\n 66 0xffe5 (Caps_Lock) 0x0000 (NoSymbol) 0xffe5 (Caps_Lock)\n$ setxkbmap -layout us && xmodmap ~/.Xmodmap\n$ xmodmap -pk | grep ^\\\\s*66\n 66 0xff54 (Down) 0xff52 (Up)\nRun Code Online (Sandbox Code Playgroud)\n\n接下来您的问题还有另一个(真正的)问题:
\n\n<SHIFT>通过按下按钮激活的LEVEL2修饰符Shift可以在使用箭头键在行中移动时在文本编辑器中直观地标记字符。如果您分配<UP> \xe2\x86\x91到第二级<CAPS>,则您实际上正在做的是按Shift+ \xe2\x86\x91。您必须针对这种情况停用 Shift 修饰符。Afaik 你不能使用 xmodmap 来做到这一点。
修改键映射的“真正方法”是使用xkb。我在旧的 xorg 邮件列表上找到了解决方案。的 LEVEL2Caps必须重定向到\xe2\x86\x91( <UP>) 键(顺便说一句,Up-Key 只有一级。)在 X.org 上,您可以使用Shift内置函数在重定向期间停用修饰符RedirectKey(key=<UP>, clearmods=Shift)。在实际“按下”按键之前,clearmods 会“释放”Shift 修饰键。
激活该行为的最简单方法是创建一个新的布局文件:
\n\n/usr/share/X11/xkb/symbols/capslockarrow
\n\ndefault partial xkb_symbols "basic" {\n\n include "de(basic)"\n include "shift(both_capslock_cancel)"\n\n key <CAPS> {\n type[Group1] = "TWO_LEVEL",\n symbols[Group1] = [ Down, NoSymbol ],\n actions[Group1] = [ NoAction(), RedirectKey(key=<UP>, clearmods=Shift) ]\n };\n };\nRun Code Online (Sandbox Code Playgroud)\n\n激活新布局
\n\nsetxkbmap capslockarrow\nRun Code Online (Sandbox Code Playgroud)\n\n新的布局文件源自de(basic). 这是标准德语键盘的布局。您可以在此处添加任何其他布局,例如us(basic)或us(euro)。see/usr/share/X11/xkb/symbols/以了解可能性。两个字母代码是文件名,括号中是xkb_symbols文件的相应定义。
您将不再有大写键修饰符。因此,我添加了一种替代方法Caps:shift(both_capslock_cancel)通过同时按下LSHIFT和RSHIFT,您可以激活CAPS Lock并通过按任何其他键再次释放锁定Shift。
如果有人想知道为什么我没有为此使用新的类型定义:我根本无法在触发向上键的操作之前释放 Shift 修饰符。preserve[Shift] = None不过,通过显式调用spearated应该可以释放 Shift 键xkb_types。
正如下面的评论所述,Wayland 也将依赖 XKB,但不允许重定向。
| 归档时间: |
|
| 查看次数: |
1135 次 |
| 最近记录: |