我习惯了 Windows 7+ 中的 Win+(1..9) 热键,并且想在 LXDE 中实现类似的功能。
因此,我需要定义一个热键:
启动定义的应用程序(如果尚未启动),或者
如果该应用程序已在运行,请将其切换到该应用程序。
如何做到这一点?
我可以使用 来检查应用程序是否正在运行ps -e | grep appname
,但是有没有办法让 LXDE 使用命令行通过名称或 PID 切换到应用程序?或者,也许还有其他方法可以完成这一切?
我一直在使用 AutoHotkey 在 WinXP 中实现这种行为。在Win7/Win8中它是本机的。它非常有用,所以我也想在我的 Debian 中使用它。
答案1
Unix并不完全有“应用”的概念。与使用进程相比,顶层窗口将是更好的指示器。它们更容易准确检测,并且您不会错误地检测其他用户的应用程序。
每个窗口都有一个标识其应用程序的类。要查看应用程序的类名称,请在终端中运行以下命令,然后单击应用程序的窗口:
xprop WM_CLASS
这将显示两个字符串:实例名称和类名称。
显示有关窗口的信息并对其执行一些基本操作的最有用的工具是xdotool
和wmctrl
。
使用wmctrl
,您可以使用wmctrl -F -x -a "$instance.$class"
给定的实例和类激活窗口之一。如果没有匹配的窗口,则wmctrl
返回错误状态,以便您可以选择启动该程序。例子:
wmctrl -F -x -a Navigator.Firefox || firefox &
等效的 xdotool 命令:
xdotool search --class --maxdepth 2 Firefox windowactivate || firefox &
如果有多个顶层窗口,则没有简单的方法来确定将激活哪一个。要激活最新的一个,您需要窗口管理器的配合 - LXDE 中默认为 Openbox。我不熟悉 Openbox,但它相当精简,因此它可能无法提供报告最近激活的窗口的方法。我认为 LXDE 可以与其他窗口管理器一起使用,例如锯鳐它是可编程的,因此您可以在窗口管理器中用几行代码编写此功能。
使用您的窗口管理器的键绑定设置机制将您想要的键绑定到这些命令之一。