如何创建一个键盘快捷键来检查程序是否已打开,如果是,则打开其窗口而不是新实例

如何创建一个键盘快捷键来检查程序是否已打开,如果是,则打开其窗口而不是新实例

超级终端示例:

我按alt+ h,脚本应该检查 hyper 是否已经在后台运行。

如果是,它应该已经打开打开的窗口。
如果没有,请打开一个新窗口。

操作系统:Ubuntu 18.04

答案1

创建键盘快捷键取决于您的 DesktopManager。在Ubuntu 18中这个答案解释了如何。以下是您应该设置为通过快捷方式启动的命令。

这个简单的命令可以为我的窗口管理器切换到超级窗口:

wmctrl -a Hyper

所有支持 EWMH/NetWM 规范的窗口/桌面管理器都可以使用wmctrl. Ubuntu 桌面很可能是兼容的,但您可能需要安装wmctrl.

我留下之前的答案,只是为了让您涉足桌面上可能做的其他事情。这就是我找到上面命令的方式。


旧答案:

您可以尝试编写有关脚本的一些关键元素:

  1. ps -xau | grep hyper将获取进程是否已在运行的信息。请注意,还会列出正在搜索的 grep 进程hyper

  2. 第 1 步可能是可选的。最可能您的窗口管理器支持 EWMH/NetWM 规范。因此,您可以使用wmctrl.您可能必须安装它。输入wmctrl终端以查看它是否存在。

  3. wmctrl -l将为您提供所有当前打开的窗口的列表。

  4. wmctrl -a然后,您可以激活所需的窗口并使用或转到该窗口wmctrl -R

wmctrl -h将告诉您可以对桌面执行的其他不同操作。

例如在我的机器上(有几个打开的窗口和桌面),启动 Hyper 后,输入 wmctrl -l 时我有:

0x02c00006 18 mymachine urxvt
0x02e00006 19 mymachine ncurses.h = (/nix/store/ffjl7aw7f0gjwv4gb4mgb0w49v5dhrkg-ncurses-6.0-20171125-dev/include) - VIM
0x03c00006 16 mymachine urxvt
0x03000006 20 mymachine urxvt
0x03a00006  8 mymachine urxvt
0x00e00006 24 mymachine urxvt
0x01800003 15 mymachine Volume Control
0x04c00005  1 mymachine Hyper
0x03e00001 15 mymachine 2.3. Using Precedences - Chromium
0x03e00006 15 mymachine Edit - Unix & Linux Stack Exchange - Chromium
0x03e00007 15 mymachine C++ Core Guidelines - Chromium

注意这条线:它说在桌面 1 上有一个名为 Hyper 的窗口 0x04c00005:

0x04c00005  1 mymachine Hyper

您可以使用命令直接获取这一行:

wmctrl -l | grep Hyper

以便激活窗口:

wmctrl -a 0x04c00005

然而,由于某种原因,我不知道为什么这个最新命令在我的 Fluxbox 环境中不起作用...... Fluxbox 可能没有实现所有wmctrl功能。

你应该测试一下。如果这在您的 Ubuntu 环境中有效,请尝试编写自动执行这些不同命令的 bash 脚本。然后告诉我们您在哪些方面取得了成功或遇到了阻碍。

编辑:似乎需要wmctrl -a 窗口的标题,而不是十六进制 ID。

所以解决方案很简单:

wmctrl -a Hyper   

你也可以尝试

wmctrl -R Hyper

答案2

关键是Hyper在窗口标题栏中找到一个唯一的名称,该名称不会与打开的任何其他程序的关键字相对应。我没有安装您提到的程序,但我在 Debian 9 上使用 Xfce 和mousepad.因此,您可以将其添加为键盘快捷键:

bash -c 'wmctrl -a Mousepad || mousepad'

只需将鼠标垫替换为窗口标题栏中的关键字,然后在第二部分中使用您将用于从终端执行它的程序名称。如果窗口已经打开,上面的命令将激活该窗口。但是,如果命令失败,即||它会启动程序。

相关内容