是否可以获取有关正在运行bash脚本的终端窗口/选项卡的状态信息?

时间:2011-10-20 10:24:36

标签: bash

如果已经提出要求,请提前道歉 - 搜索bash和终端在很多地方一起出现真的很难。

基本上我希望能够做的是让bash脚本知道它运行的终端当前是否处于活动状态(已选中),以便我可以使用notify-send通知用户仅当它当前不是活动窗口时才完成。我猜想有可能通过某种方式访问​​gnome来做一些至少可以检测活动窗口是否是终端窗口的东西,但是我不知道怎么样,我想它可能是一个hack,但任何帮助都会是赞赏。

2 个答案:

答案 0 :(得分:1)

在进行了一些挖掘之后,我找到了一个可行的解决方案,所以我将把它作为答案发布,但它不是非常便携,所以我仍然感谢任何更好的解决方案。

我发现当使用Gnome时你可以从gnome-terminal访问一个$ WINDOWID变量(如果你不幸地把它变成了另一个盒子,那就不行了,所以不太理想) 。这可以与xprop结合使用:

activeWindow=$(xprop -root | awk '/_NET_ACTIVE_WINDOW\(WINDOW\)/{print $NF}')
thisWindow=$(printf '0x%x\n' $WINDOWID)

然后可以比较哪些是平等的。然而,获得当前窗口id的更合适的方法是好的。

编辑:看过Zaytzev的回答我想这可以合并,所以我可以设置终端标题,检查xprop -id $activeWindow WM_NAME是否等于我的窗口标题。

答案 1 :(得分:1)

这个问题更像是关于xserver和窗口管理然后bash本身。你需要两件事:

a)找到你的窗口:

$> xprop -root _NET_CLIENT_LIST_STACKING

它输出如下:

_NET_CLIENT_LIST_STACKING(WINDOW): window id # 0xe0001e, 0x3a0006d, 0x1a00004

这是窗口堆栈,因此最后一个窗口位于顶部。您需要提取窗口ID列表(0xe0001e 0x3a0006d 0x1a00004)。

接下来,您必须遍历该ID列表。您将通过检查此属性找到您的窗口:

 xprop -id <win id> WM_NAME

b)如何提升窗口的示例如下: X11: raise an existing window via command line?