我进行了两个类似的实验。第一个有效,第二个无效。我究竟做错了什么?两个实验的设置:我有两个并排的终端窗口(urxvt)(i3 wm,ubuntu 18.04.4 LTS)
实验一:
在左侧窗口中输入:
$ wmctrl -r :ACTIVE: -T test
这会将左侧窗口标题更改为“测试”。
在右侧窗口中输入:
$ wmctrl -a test
这将激活(更改焦点)回到左侧窗口。
成功!
实验二:
我想做同样的事情,但使用窗口 id 而不是窗口标题。所以...
在左侧窗口中输入:
$ echo $WINDOWID
31457300
在右侧窗口中输入:
$ wmctrl -i -a 31457300
什么都没发生。
失败!
好的,这只是一个实验。这是我真正想做的事情:
我有几个 bash 脚本,每个脚本都会运行,直到我将其杀死或重新启动,每个脚本都在自己的窗口中,在我很少看的备用桌面上。在脚本需要我注意的极少数情况下,我希望它找出正在运行的窗口并将该窗口提升到最前面。“弄清楚它在哪个窗口运行”我认为是微不足道的 - 它是$WINDOWID
. 用来wmctrl
提升已知窗口 ID 的窗口也应该是微不足道的,但我无法让它工作,正如您在实验 2 中看到的那样。
问题的替代陈述:
我也很乐意按标题而不是 ID 来提高窗口。使用 wmctrl 按标题弹出窗口很容易(wmctrl -a <title-or-fragment-thereof>
)。但我不知道我的 bash 脚本如何发现其窗口的标题。没有环境变量。
我知道一种解决方案,它对我有用,但我不喜欢它。我知道如何从 bash 设置窗口标题,所以嘿我不需要“发现”它,对吧?我可以改为设置它(wmctrl -r :ACTIVE: -T SomeUniqueWindowTitle
)。为什么我不喜欢这个?因为我失去了原来的窗口标题。
这是我不喜欢的另一个解决方案:几个 bash 脚本中的每一个都已经设置了它的窗口标题,因此共享过程可能需要第二个参数 - 窗口标题。我可以这样做,但是......只是想知道是否有更好,更简单的方法。
提前致谢!
我想出了怎么做。我为我的代码道歉,因为 (a) 它是 perl 和 bash 的混合体,并且 (b) 我不是大师,我确信有更好、更简单、更优雅的方法来做到这一点。无论如何,这对我有用。你的旅费可能会改变。
Bash 命令将运行它的窗口置于最前面:
my-window-id.pl 应该是可执行的并且在你的 shell 的搜索路径中。或者,如果这太麻烦了,您可以改为:
这是源代码
my-window-id.pl
: