3

システムの起動時に、3 つの異なるデスクトップ/スペースでファイルを開く AppleScript を実行したいと考えています。

First Space: Mail and Things (my to do list program)
Second Space: Textmate and a Safari for my first project
Third Space: Textmate and a Safari for my second project

まず、Mission Control でさらに 2 つのデスクトップを作成しました。これらのデスクトップは、手動で削除しない限り、次回システムが起動したときに残ります。1 つの長いスクリプトを作成する代わりに、3 つの AppleScript (boot1、boot2、および boot3) をチェーンして、より単純なコード ブロックに分割しました。boot1 の最後に次のように表示されます。

run script file "<drive name>:Users:<username>:boot2.scpt"

boot2 と boot3 には、たくさんのdelay行が表示されます。AppleScript について私が気に入らない点の 1 つは、OS が前のコマンドへの応答を完了する前に、次のコマンドの処理を開始することが多いことです。これにより、矛盾やエラーが発生します。遅延は、物事を強制的に遅くするためのハックです。それらは役に立ちますが、それらを使用したとしても、物事はまだ少し危険です. boot2.script:

# this emulates the keyboard shortcut to move to desktop 2
# there doesn't seem to be any way to modify an `open` command to open a file on desktop 2
tell application "System Events"
    delay 2
    # key code 19 is the key code for the number 2. 
    # <cntl> 2 is the shortcut to get to desktop 2
    key code 19 using control down
end tell

tell application "TextMate"
    activate
    # 'sites' is the name of the directory my projects are in
    open "/users/<username>/sites/project1/"
end tell

tell application "Terminal"
    activate
    do script "cd /users/<username>/sites/project1/"

    delay 2
    do script "rails s" in front window

    delay 2
    tell application "System Events" to tell process "Terminal" to keystroke "t" using command down
    tell application "System Events" to tell process "Terminal" to keystroke return

    delay 2
    do shell script "open -a Safari http://localhost:3000"
end tell

わかりました...これは、遅延が十分に長くない場合の不一致を除いて、ほとんどの場合、デスクトップ 2 を配置するために機能します。Boot3.script は boot2 とほとんど同じですが、デスクトップ 3 でアプリケーションを開こうとすると、デスクトップ 2 にウィンドウがあるため、システムはそのデスクトップに戻ります。これが次の問題です。どうすればそれを克服できますか?

スペース設定がなくなったため、2305491は関連性がなくなりました。

ありがとう。

4

1 に答える 1

1

Boot3.script は boot2 とほとんど同じですが、デスクトップ 3 でアプリケーションを開こうとすると、デスクトップ 2 にウィンドウがあるため、システムはそのデスクトップに戻ります。

Mission Control の環境設定には、「アプリケーションに切り替えるときに、アプリケーションのウィンドウが開いているスペースに切り替える」というオプションがあります。これのチェックを外します。

わかりました...これは、遅延が十分に長くない場合の不一致を除いて、ほとんどの場合、デスクトップ 2 を配置するために機能します。

より良い解決策は常にこのようなものです

repeat until something exists
delay 0.1
end repeat
于 2014-04-07T11:50:45.743 に答える