如果这个问题已经被问到了,请提前道歉--这真的很难搜索到,因为bash和terminal一起出现在这么多地方。
基本上,我希望能够做的是有一个bash脚本,知道它正在运行的终端当前是否处于活动状态(选中),这样我就可以使用notify-send通知用户,只有在当前不是活动窗口的情况下,它才会通知用户某些操作已经完成。我猜至少可以通过访问gnome来检测活动窗口是否是终端窗口,但我不知道这是怎么回事,我想这很可能是一个黑客行为,但任何帮助都将不胜感激。
发布于 2011-10-20 18:54:08
经过进一步的挖掘,我发现了一个可行的解决方案,所以我打算将其作为答案发布,但它不是很便携,所以我仍然希望有更好的解决方案。
我发现,在使用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是否与我的窗口标题相等,而不是使用$WINDOWID。
发布于 2011-10-20 19:18:03
这个问题是关于xserver和窗口管理的,然后是bash本身。要做到这一点,需要两样东西:
xprop的
a)查找您的窗口:
$> xprop -root _NET_CLIENT_LIST_STACKING它会给出类似如下的输出:
_NET_CLIENT_LIST_STACKING(WINDOW): window id # 0xe0001e, 0x3a0006d, 0x1a00004这是窗口堆栈,所以最后一个窗口在顶部。您需要提取窗口ids列表(0xe0001e 0x3a0006d 0x1a00004)。
接下来,您必须遍历该ids列表。通过检查此属性,您将找到您的窗口:
xprop -id <win id> WM_NAMEb)下面是如何提升窗口的示例:X11: raise an existing window via command line?
https://stackoverflow.com/questions/7834552
复制相似问题