![如何定义覆盖全局热键的特定于应用程序的热键?](https://linux22.com/image/91313/%E5%A6%82%E4%BD%95%E5%AE%9A%E4%B9%89%E8%A6%86%E7%9B%96%E5%85%A8%E5%B1%80%E7%83%AD%E9%94%AE%E7%9A%84%E7%89%B9%E5%AE%9A%E4%BA%8E%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E7%9A%84%E7%83%AD%E9%94%AE%EF%BC%9F.png)
在Windows上,有一个工具AutoHotkey,它允许您为任何应用程序定义特定于应用程序的热键。我想在 Linux 上做同样的事情:我有一个用于语言切换的全局热键(它是 CapsLock,它是在系统设置中定义的),并且我想在某个应用程序中覆盖此热键。
我使用的是 Ubuntu 14.04,GNOME 下。我正在使用 xbindkeys 来实现一些全局热键。
答案1
足够先进的窗口管理器(包括 Sawfish、Awesome、Fvwm 等)可让您定义每个窗口的键绑定。 Metacity 和 Mutter(Gnome 默认设置)等原始窗口管理器则不然。如果您想配置窗口环境来执行您想要的操作而不是坚持一些基本的默认设置,我建议使用更高级的窗口管理器。您仍然可以将 Gnome 与许多窗口管理器一起使用,包括 Sawfish 和 Fvwm。
如果您想独立于窗口管理器设置键绑定,您可以使用专门用于此目的的程序,例如xbindkeys。让您的键绑定调用根据活动窗口而采取不同行为的 shell 脚本。您可以使用xdotool
检索活动窗口 ID(及其标题),然后使用其他工具,例如xprop
获取有关窗口的更多信息。
#!/bin/sh
wid="$(xdotool getactivewindow)"
class="$(xprop -id "$wid" '$1' WM_CLASS)"; class="${class#*\"}"; class="${class%\"}"
case "$class" in
Myapp) do something;;
*) do something else;;
esac