xdotool:未知命令:21043361

xdotool:未知命令:21043361

据我所知,下面的代码行应该将焦点放在打开的 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)

相关内容