每当我打开一个新应用程序时,有没有什么办法可以打开一个新的工作区?
例如,我在工作区 1 上有一个终端,我想在工作区 2 上打开 spotify,而且当我打开 spotify 时,我想自动移动到工作区 2。
这可能吗?
答案1
我还没有实现这个特定的应用程序,但它看起来xdotool
可以实现你想要的效果。
尝试使用包装脚本启动你的应用程序,例如:
desktops=$(xdotool get_num_desktops)
desktops="$desktops"+1
xdotool set_num_desktops "$desktops"
xdotool set_desktop "$desktops"
run-my-application
我省略了一些使其更加健壮所需的细节,因为它们会根据您正在做的事情而有所不同,并且会掩盖主要思想:
每个xdotool
命令都会返回一个状态,您应该检查该状态。如果某个步骤失败,您不想盲目地继续。
您可能想要设置脚本可以创建的最大桌面数量。
xdotool
可以查看窗口是否已存在以及当前位于哪个桌面。它还可以将窗口移动到另一个桌面。它还可以激活窗口,将其置于前台并成为焦点。
您可能需要sleep
在某些操作之后添加命令,以便在运行下一步之前让桌面和特别是应用程序有时间完成它们的工作。
由于您的脚本可能从桌面运行(而不仅仅是从终端运行),您可能还希望将一些消息记录到文件中,告诉您脚本执行了哪些操作,以便于调试。
当应用程序打开多个窗口时,情况会变得有点棘手。然后,您必须处理一堆实例,并以某种方式找到正确的实例或处理所有实例。例如,我的应用程序Thunderbird
在启动时要求输入主密码,因此它打开了两个窗口。
xdotool
还提供命令链,您可以在其中从一个xdotool
命令运行多个操作。当前操作的结果被推送到命令中的下一个操作读取的堆栈上。我发现这很难可视化和调试,但如果您可以让它工作,它就非常强大。
虽然xdotool
最适合这个特定问题,但你可能还想看看自动键它可以通过发出按键和鼠标事件来帮助您自动执行各种桌面/GUI 操作,这些操作看起来就像您手动执行的一样,因此它们可以在大多数应用程序和桌面功能上运行。