有没有办法在OSX中脚本设置空间(任务控制)?


7

Spaces的设计似乎是将应用程序分配给一个空间(参见 这篇知识库文章 )。甚至像TotalSpaces这样的应用程序也是 用这个模型建造 。这对我来说似乎是多余的,因为已经有一个应用程序切换器(Cmd-Tab)可以让你在应用程序之间切换。

我想用Spaces作为一种切换方式 项目 。例如,我为ProjectA提供了一个空间,每个窗口都有一个用于XCode,Safari,Sublime Text和Terminal的窗口。然后我为ProjectB提供了一个不同的空间,它还有一个窗口,分别用于XCode,Safari,Sublime Text和Terminal。只是窗户打开了不同的文件。

但是保持设置是不方便的,因为我必须一遍又一遍地设置它们,当我在计算机之间来回移动时,它特别糟糕,并且必须打开五个窗口并让它们自己进入正确的空间。有没有什么方法可以生成一个单步脚本,以我自己喜欢的方式设置空间?共享软件,Applescript等?或者我只是想把我的工作风格变成一个为别人建造的功能?

Answers:


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秒才能切换到下一个空格并继续前进。)

不幸的是,我还没有看到另一种切换空间的方法。希望有人能够提供更好的切换方式,而不是发送击键,或者也许是让脚本等待而不会产生任意延迟的方法。

尽管如此,如果你不介意给你的脚本几秒钟来启动和运行你的环境,你应该能够轻松地按照我提供的内容对一系列应用程序启动或窗口和空间选择进行排序。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.