如何强制执行系统范围的自定义键盘快捷键/宏?

如何强制执行系统范围的自定义键盘快捷键/宏?

我希望能够将我在文本编辑器上使用的相同自定义键绑定和快捷方式应用到我的整个桌面环境。

我基本上想在整个系统范围内重新映射我的键盘,而不仅仅是在特定的应用程序窗口中。也就是说,当我重新映射时,就我的桌面环境而言,alt + j = Down我希望按与按“向下”键相同。alt + j

我使用的快捷键经过优化,可始终将手保持在靠近主行的自然位置:

# Note how
# system-wide remapping of *single* keys is possible with xmodmap.
Caps Lock           --> Escape
Escape              --> Caps Lock    # Switch caps lock with
                                     # the more useful escape key.
                                     # As far as *all* applications 
                                     # are concerned, pressing caps lock 
                                     # is actually pressing Escape. 

# However, I've not found a good way do the same for multiple keys:
alt + space         --> Right Arrow
alt + Escape        --> Enter
shift + alt + h     --> Backspace
alt + x             --> Delete
shift + alt + l     --> Delete

ctrl + alt          --> Alt           # Default alt functionalities 
                                      # remapped to ctrl + alt

在我的文本编辑器中,这对我的准确性和速度产生了奇迹,并且极大地帮助了我缓解肌腱疼痛,因为我的手现在几乎不需要离开其自然的休息位置。

第一次几乎成功的解决方案尝试:

使用 xbindkeys 调用 xvkbd(x 虚拟键盘)。这是我的示例.xbindkeysrc

# h-j-k-l Movement
###################
    "xvkbd -xsendevent -text "\[Down]""
        alt + j

    "xvkbd -xsendevent -text "\[Up]""
        alt + k

    "xvkbd -xsendevent -text "\[Left]""
        alt + h

    "xvkbd -xsendevent -text "\[Right]""
        alt + l

问题:

alt键通常是调用应用程序菜单的默认键(例如,alt + F在大多数应用程序中调出 *F*ile 下拉菜单)。

此外,这似乎适用于某些应用程序,而其他应用程序似乎忽略它。

xbindkeys 并不是真正重新映射键盘,它只是告诉 xvkbd 发送信号,这有时会与活动应用程序产生冲突(与真正重新映射键盘的 xmodmap 不同)。

目标

对我的键盘进行系统范围的重新映射,以易于移植的方式实现(rc 文件或类似的文件)。

alt是最佳选择密钥,因为ctrl它在应用程序中大量使用,并且 mod 键由我的 Windows 管理器 (Xmonad) 占用。

我的设置

我正在运行 Ubuntu 12.10,带有 Xmonad 桌面环境。


这可行吗?我还不太了解操作系统级别的东西以及它如何处理输入。

答案1

我看到的唯一机会是配置xkb相应地映射您的键。一些应用程序(例如游戏)可能会直接监听实际按下的按键,但通常其他所有应用程序仅使用 xkb 映射。

有两种不同的配置工具:setxkbmapxmodmap。理论上 xmodmap 已被弃用,应该由 setxkbmap 取代,但有时旧的 xmodmap 也很方便。

您只能使用 xkb 提供的功能,但即使 xmodmap 也提供一组有限的修饰符。您可以为每个键指定四个键符号。引用它的手册页:

The first keysym is used when
no modifier key is pressed in conjunction with  this  key,  the
second  with  Shift, the third when the Mode_switch key is used
with this key and the fourth  when  both  the  Mode_switch  and
Shift keys are used.

也许阅读有关系统详细信息的更多内容是个好主意。我建议阅读这里或者这里看看有什么可能。

相关内容