首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以获得有关运行bash脚本的终端窗口/选项卡的状态信息?

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

Stack Overflow用户
提问于 2011-10-20 18:24:36
回答 2查看 466关注 0票数 2

如果这个问题已经被问到了,请提前道歉--这真的很难搜索到,因为bash和terminal一起出现在这么多地方。

基本上,我希望能够做的是有一个bash脚本,知道它正在运行的终端当前是否处于活动状态(选中),这样我就可以使用notify-send通知用户,只有在当前不是活动窗口的情况下,它才会通知用户某些操作已经完成。我猜至少可以通过访问gnome来检测活动窗口是否是终端窗口,但我不知道这是怎么回事,我想这很可能是一个黑客行为,但任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-20 18:54:08

经过进一步的挖掘,我发现了一个可行的解决方案,所以我打算将其作为答案发布,但它不是很便携,所以我仍然希望有更好的解决方案。

我发现,在使用Gnome时,您可以从gnome-terminal访问$WINDOWID变量(如果您不幸地切换到另一个机器,这将不起作用,因此这并不理想)。这可以与xprop结合使用,如下所示:

代码语言:javascript
复制
activeWindow=$(xprop -root | awk '/_NET_ACTIVE_WINDOW\(WINDOW\)/{print $NF}')
thisWindow=$(printf '0x%x\n' $WINDOWID)

然后可以比较它们的相等性。然而,获取当前窗口id的更合适的方式将是好的。

编辑:看过Zaytzev的答案后,我想这可以组合在一起,这样我就可以设置终端标题并检查xprop -id $activeWindow WM_NAME是否与我的窗口标题相等,而不是使用$WINDOWID。

票数 1
EN

Stack Overflow用户

发布于 2011-10-20 19:18:03

这个问题是关于xserver和窗口管理的,然后是bash本身。要做到这一点,需要两样东西:

xprop的

  • 包,如果我没记错的话,这是xutils。
  • 你需要设置唯一的终端窗口名称,这样你以后就可以在窗口堆栈上找到它了,下面是工作示例:xutils

a)查找您的窗口:

代码语言:javascript
复制
$> xprop -root _NET_CLIENT_LIST_STACKING

它会给出类似如下的输出:

代码语言:javascript
复制
_NET_CLIENT_LIST_STACKING(WINDOW): window id # 0xe0001e, 0x3a0006d, 0x1a00004

这是窗口堆栈,所以最后一个窗口在顶部。您需要提取窗口ids列表(0xe0001e 0x3a0006d 0x1a00004)。

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

代码语言:javascript
复制
 xprop -id <win id> WM_NAME

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7834552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档