使用 Xdotool 在 Libreoffice 文档中输入

使用 Xdotool 在 Libreoffice 文档中输入

我经常想知道如何使用 xdotool 自动化 libreoffice。我知道必须从窗口堆栈中选择窗口,我尝试在 bash 脚本中将其编程为 xdotool 下的窗口 bash 变量。然后我尝试将下一个按键发送到窗口,但没有结果。现在我想将 ctrl+N 命令传递给 libre office 窗口以打开新文档。

#!/bin/bash
/usr/bin/libreoffice
mywindow=$(xdotool search --class libreoffice)
xdotool windowactivate $mywindow && xdotool key --window $mywindow Next
xdotool key ctrl+n

我确实收到了错误代码

There are no windows in the stack.
Invalid window '%1'
Usage: windowactivate [options] [window=%1]
--sync - only exit once window is active (is visible + active)
If no window is given, %1 is used. See WINDOW STACK in xdotool(1)

答案1

  • 要更有选择地查找 LibreOffice Writer 窗口(例如,不是 Calc 窗口),请使用以下命令:mywindow=$(xdotool search --class libreoffice-writer)。您可以使用命令查看打开的窗口类别wmctrl -lx。这将列出更多通用类名和更具体的类,以点分隔。对于 libreoffice,则是libreoffice.libreoffice-writer
  • 注意:该xdotool search命令将检索特定类别的所有窗口。因此,对于多个窗口,变量将包含多个以空格分隔的标识符,例如66167017 65540686. windowactivate,但仅支持单个参数。
  • 执行libreoffice命令后,进程将分叉到后台。尚未创建任何窗口。这就是winactivate失败的原因。使用--sync选项让winactivate命令等待窗口有效创建:mywindow=$(xdotool search --sync --class libreoffice.writer)

答案2

一个简单的解决方法是将 LO 放在后台,然后在xdotool命令之间添加延迟。

#!/bin/bash
/usr/bin/libreoffice &
sleep 10
mywindow=$(xdotool search --class libreoffice)
xdotool windowactivate $mywindow && xdotool key --window $mywindow Next
xdotool key ctrl+n

相关内容