我的大部分工作是在两个应用程序中完成的:我的网络浏览器和我的编辑器。我经常使用 Alt-Tab 在它们之间来回切换。我也有一个随时打开的 IM 客户端(Hipchat),但与其他两个应用程序相比,我很少与它交互。
一个反复出现的烦恼是,在我与 Hipchat 窗口和 Alt-Tab 交互回到(比如说)我的编辑器后,我的肌肉记忆被调整为期望另一个 Alt-Tab 专注于我的浏览器,但我最终还是使用了 Hipchat。
在以任何方式失去焦点之后,有什么方法可以使 Hipchat 被发送到堆栈或新近度列表或其他任何东西的底部?
您要求的实际上是允许特定应用程序的窗口仅出现在第一个或最后一个位置,z 方向。
当 gedit 窗口(在本例中)失去焦点时,它被发送到最后一个位置(z 方向,在半透明终端窗口下方),而不是仅下降一个位置:
窗口的 Z 位置
虽然可以做到,但我们仍然需要克服一些严重的并发症;当窗口被发送到最后一个位置时,您将希望保留所有其他窗口的 z 顺序。但是,目前还没有工具可以为我们提供这种 z 顺序的窗口。两者都
xdotool
没有wmctrl
给我们任何信息。然而,我们可以做的是跟踪(所有)窗口的焦点历史。由于如果另一个窗口获得焦点,一个窗口会下降一个位置,如果我们运行后台脚本来观察窗口的焦点历史,我们可以得出窗口的 z 顺序。
解决方案两个小后台脚本
下面的解决方案包含两个同时运行的小后台脚本。
focus_history.py
set_z.py
脚本 1
焦点历史.py
脚本 2
如何设置
该脚本同时使用
wmctrl
和xdotool
将脚本 1 复制到一个空文件中,将其保存(完全正确!)为
focus_history.py
将脚本 2 复制到一个空文件中,将其保存在与脚本 1
set_z.py
完全相同的目录中。在脚本的 head 部分,在以下行中:
替换
"gedit"
为您的应用程序的进程名称(引号之间)测试运行脚本:在打开任何(附加)窗口之前,通过以下命令启动脚本 1:
[脚本将识别至少聚焦一次的窗口。如果脚本在登录时运行,就会出现这种情况]
如前所述,脚本应该在同一个目录中,在同一级别。
现在开始打开窗口,看看它的行为。如果失去焦点,您的应用程序应该移至(非常)背景。
如果一切正常,请将其添加到启动应用程序:Dash > Startup Applications > Add。添加命令:
笔记
或者
或者,您可以设置一个快捷键来启动特定应用程序的窗口(如果存在),如此处所述。
然而,这需要有另一个快捷方式才能返回到第一个应用程序的窗口,
除非...,
您将设置一个快捷方式来在两个应用程序之间切换。然而,这将超出这个问题的范围......