据我所知,下面的代码行应该将焦点放在打开的 Nautilus 窗口上
xdotool windowactivate `xdotool search --onlyvisible --class nautilus`
但我收到了错误
xdotool:未知命令:21043361
答案1
xdotool 作者在这里。
您看到的很可能是有两个窗口 ID。您可以尝试找出您想要的窗口 ID,但大多数情况下只需使用“命令链”和“窗口堆栈”功能即可 - 请参阅 xdotool 手册页中的“窗口堆栈”和“命令链”。
对于您的问题,最简单的解决方案是让 xdotool 搜索并将窗口 ID 直接传递给 windowactivate 命令,如下所示:
xdotool search --onlyvisible --class nautilus windowactivate
上述代码执行搜索,将结果保存在窗口堆栈中,然后调用 windowactivate,它不带任何参数应用于窗口堆栈中的第一个窗口(又名“%1”)。可以将其视为一种将搜索结果传送到同一命令行内的其他 xdotool 命令的方法。
下面是另一个获取所有谷歌浏览器窗口标题的示例,使用“%@”窗口堆栈,表示“堆栈上的所有窗口”(与%1,%2等不同,它们是堆栈中的特定窗口)
% xdotool search --onlyvisible --class chrome getwindowname %@
asdf - Google Search - Google Chrome
CNN.com - Breaking News, U.S., World, Weather, Entertainment & Video News - Google Chrome
Ask Ubuntu - Google Chrome
Google Chrome
通常,任何发出窗口 ID 的命令(search、selectwindow、getactivewindow 等)都将填充窗口堆栈以供链式命令使用。另一个示例是,通过单击窗口来关闭窗口(通常退出应用程序):
% xdotool selectwindow windowkill
答案2
我认为发生的事情是内部 xdotool 命令报告了多个窗口 ID。因此外部命令看到类似的内容xdotool windowactivate 12345678 21043361
,但不知道第二个数字的含义。
如果您不介意激活哪个打开的 Nautilus 窗口,您可以选择第一个:
xdotool windowactivate $(xdotool search --onlyvisible --class nautilus | head -n 1)
如果您介意的话,您可能想使用--title
或进一步选择--maxdepth
。
要排除 Nautilus 提供的根窗口,可以这样做:
xdotool windowactivate $(xdotool search --onlyvisible --class nautilus |
grep -vxF $(xwininfo -int -size -root |
sed -n 's/.*Window id: *\([0-9]\+\).*/\1/p') |
head -n 1)