![有没有办法在 OSX 中编写脚本设置空间(任务控制)?](https://linux22.com/image/1347227/%E6%9C%89%E6%B2%A1%E6%9C%89%E5%8A%9E%E6%B3%95%E5%9C%A8%20OSX%20%E4%B8%AD%E7%BC%96%E5%86%99%E8%84%9A%E6%9C%AC%E8%AE%BE%E7%BD%AE%E7%A9%BA%E9%97%B4%EF%BC%88%E4%BB%BB%E5%8A%A1%E6%8E%A7%E5%88%B6%EF%BC%89%EF%BC%9F.png)
Spaces 的设计似乎考虑到了将应用程序分配给空间(参见此知识库文章)甚至像 TotalSpaces 这样的应用程序以此模型建造。这对我来说似乎是多余的,因为已经有一个应用程序切换器(Cmd-Tab)可以让您在应用程序之间切换。
我想使用 Spaces 来切换项目。例如,我为 ProjectA 准备了一个空间,其中分别有 XCode、Safari、Sublime Text 和 Terminal 的窗口。然后,我为 ProjectB 准备了一个不同的空间,其中也分别有 XCode、Safari、Sublime Text 和 Terminal 的窗口。只是这些窗口打开了不同的文档。
但维护这些设置很不方便,因为我必须一遍又一遍地设置它们,当我在电脑之间来回切换时,尤其糟糕,我必须自己打开五个窗口并将它们设置到正确的空间。有没有办法可以生成一个一步到位的脚本,自动按照我喜欢的方式设置空间?共享软件、Applescript 等?或者我只是试图将我的工作风格强行塞进为别人开发的功能中?
答案1
当然可以。前段时间我写了一个 AppleScript 来执行在每个空间打开终端窗口这项繁琐的任务。
互联网上的大多数示例最终都使用 AppleScript 来生成按键。例如,如果您已将其设置为“control-2”将带您进入空格 2(这可以在“键盘”偏好设置窗格中设置),则可以使用以下 AppleScript:
tell application "System Events"
tell process "Finder"
keystroke "2" using control down --switches to space 2
end tell
end tell
切换到空间 2。所以我的脚本在每个空间中打开一个终端窗口,其工作方式如下:
tell application "System Events"
tell process "Finder"
keystroke "1" using control down --switches to space 1
end tell
tell process "Terminal"
activate
keystroke "t" using command down --new terminal tab
end tell
tell process "Finder"
keystroke "2" using control down --switches to space 2
end tell
...etc...
end tell
显然,您可以指示终端以外的应用程序在给定空间中打开窗口。
您可以使用 启动未运行的应用程序do shell script "open -a application_name"
。
这种方法的问题在于它完全依赖于发送击键,因此击键可能会发送得太快,最终排队,并最终以错误的顺序执行。为了防止这种情况,有必要delay 0.1
在每个脚本击键后添加延迟(例如),使整个脚本需要一些时间才能执行。
或者,例如,如果您启动一个应用程序,它可能需要一些时间来初始化,并且一旦启动完成,它就会在任何活动的空间中打开窗口(而不是您首次启动应用程序时的任何活动空间)。因此,每次都必须适当设置延迟,有时可能需要几秒钟。更糟糕的是,由于系统负载差异,每次执行的时间可能不一致,迫使您使用足够长的延迟来应对最坏的情况。(例如,如果您启动一个应用程序,从执行到显示其第一个窗口可能需要长达 5 秒钟的时间,您需要延迟 5 秒钟才能切换到下一个空间并继续。)
不幸的是,我还没有看到其他切换空间的方法。希望有人能提供比发送按键更好的切换方法,或者让脚本等待而不产生任意延迟的方法。
不过,如果您不介意花几秒钟的时间让您的脚本启动并运行,那么您应该能够使用我提供的功能轻松地对一系列应用程序启动或窗口打开和空间选择进行排序。