如何使启动命令将焦点设置到 ubuntu/linux 中已经运行的应用程序实例?

如何使启动命令将焦点设置到 ubuntu/linux 中已经运行的应用程序实例?

我正在使用一个名为 easystroke 的程序来从鼠标手势调用命令 - 通常用于启动应用程序。例如“gnome-terminal”。如果我已经打开了一个 gnome-terminal 窗口,并且我调用了 gnome-terminal 手势,我希望将焦点设置到已经运行的实例上,而不是生成一个新实例,这当然是现在发生的情况。(实际上,我对此更感兴趣,因为我的 gmail chrome 应用程序快捷方式和其他较大的应用程序。)

我对 ubuntu 和 linux 还很陌生,但我希望有一个巧妙的命令可以围绕我的启动命令来产生这种行为。(我想象某种单例应用程序列表管理器程序,它使用我的命令行,检查它是否已经在列表中,如果是,则将焦点转移到正在运行的进程(并且该进程仍在运行),否则生成一个新进程,然后使用命令行作为键将其添加到其列表中。)

答案1

我写了一个小程序,叫做jumpapp正是出于这个目的。它让你能够使用一个命令首次运行时打开一个新应用程序,之后每次运行时切换到已打开的窗口。另外,如果您为该应用程序打开了多个窗口,则重复运行该命令将循环显示所有应用程序的窗口。

Usage: jumpapp [OPTION]... COMMAND [ARG]...

Jump to (focus) the first open window for an application, if it's running.
Otherwise, launch COMMAND (with opitonal ARGs) to start the application.

在底层,jumpapp它使用两种方法定位应用程序窗口:1)获取 COMMAND 的所有正在运行的 pid 并查找具有匹配的窗口_NET_WM_PID,2)查找具有与WM_CLASSCOMMAND 匹配的窗口。

如果你想尝试一下,很容易从源代码安装或者你可以从我的 PPA 安装它:

sudo add-apt-repository ppa:mkropat/ppa
sudo apt-get update
sudo apt-get install jumpapp

答案2

使用以下脚本的 shell皮多夫控制端不确定您的鼠标手势程序如何工作 - 您可以定义一个作为手势结果运行的 shell 脚本吗?

如果是这样,那么这样的脚本可以使用 pidof 来确定程序是否正在运行,如果是,则使用 wmctrl 激活它,否则启动它。默认情况下,ubuntu 上存在 pidof,但您必须自己添加 wmctrl。wmctrl在 Synaptic 包管理器中搜索。

答案3

xwit“程序名称”将按名称将窗口置于最前面。Linux 上可以使用可执行文件的任何程序都可以使用启用了执行权限的 #!/bin/sh 脚本。xwit 还可以移动鼠标指针、移动窗口、调整窗口大小、提供与模式匹配的窗口名称列表、获取特定窗口的唯一窗口 ID 或关闭窗口……您可以通过 xwit 对窗口执行任何操作。

答案4

几年前,我创建了一个小应用程序,叫做麦克格拉正是出于这个目的。它最初仅适用于 Metacity 窗口管理器,但后来我将其改编为 Gnome。

相关内容