编辑:我不是在寻找其他方法或更好的方法来更改窗口的标题或向终端中的选项卡添加标题。建议的副本 中的答案无论如何都无法解决当标题由wmctrl设置时为什么xdotool search …
不拾取窗口标题的具体问题,如上所述。
操作系统:Ubuntu 18.04
当我打开一个gnome-terminal窗口时,标题是dkb@dkb:~
我可以改变它使用
wmctrl -r :ACTIVE: -N "NewName"
但是xdotool search …
,没有“看到”这个标题:
dkb@dkb:~$ xdotool search --name NewName
dkb@dkb:~$
我只是返回提示,而不是提供相应的窗口标识符。
另一方面,我可以使用xdotool本身来设置标题,然后xdotool search …
提供窗口标识符:
dkb@dkb:~$ xdotool getactivewindow set_window --name NewName
dkb@dkb:~$ xdotool search --name NewName
39845894
dkb@dkb:~$
换句话说,如果标题由xdotool设置,xdotool search
则可以正常工作:
从man xdotool
search [options] 模式 搜索带有正则表达式模式的标题、名称或类的窗口。输出是 X 窗口标识符的行分隔列表。
因此,虽然这没什么大不了的,但我想知道xdotool没有“看到” wmctrl 设置的窗口标题的原因是什么。
我们可以看到,至少
xdotool getactivewindow getwindowname
可以按预期工作。所以让我们更深入。
xprop -id <id>
我们可以使用命令列出窗口的属性。对于名称由它设置的窗口,wmctrl
它给出:对于名称由它设置的窗口,
xdotool
它给出:我们可以看到,在这两种情况下
_NET_WM_NAME
都设置正确。是什么_NET_WM_NAME
?这是 x11 的扩展(链接,链接)所以 x11 应用程序应该更喜欢这个属性而不是
WM_NAME
. 让我们显示这两个属性。我从这里获取了 C 代码:只加了
printf("WM_NAME: %s\n", get_string_property("WM_NAME"));
一行。跑步:所以结论是:
xdotool
同时设置_NET_WM_NAME
andWN_NAME
但只搜索WM_NAME
andwmctrl
设置 only_NET_WM_NAME
。