it-swarm-ja.com

OSXでスペース(ミッションコントロール)を設定するスクリプトを作成する方法はありますか?

Spacesは、アプリをスペースに割り当てることを念頭に置いて設計されているようです( このKB記事 を参照)。 TotalSpacesのようなアプリでさえ このモデルで構築されています 。アプリケーションを切り替えることができるアプリスイッチャー(Cmd-Tab)がすでに存在するため、これは私には冗長に思えます。

プロジェクトを切り替える方法としてスペースを使用したいと思います。たとえば、XCode、Safari、Sublime Text、TerminalのそれぞれにウィンドウがあるProjectA用のスペースがあります。次に、ProjectB用に別のスペースがあり、XCode、Safari、Sublime Text、およびTerminal用のウィンドウもあります。ウィンドウでさまざまなドキュメントが開いているだけです。

しかし、セットアップを維持するのは不便です。何度もセットアップする必要があり、コンピューター間を行ったり来たりして、5つのウィンドウを開いて、自分で適切なスペースに配置する必要がある場合は特にひどいです。スペースを好きなように自動的に設定するワンステップスクリプトを生成する方法はありますか?シェアウェア、Applescriptなど?それとも、自分の作業スタイルを他の誰かのために構築された機能に押し込もうとしているだけですか?

7
Drew

あなたは確かにできます。私は少し前に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秒遅らせる必要があります。)

残念ながら、スペースを切り替える別のアプローチは見たことがありません。うまくいけば、誰かがやって来て、キーストロークを送信するよりも良い切り替え方法を提供したり、任意の遅延を与えずにスクリプトを待機させる方法を提供したりできます。

それでも、環境を稼働させるためにスクリプトを数秒与えてもかまわない場合は、私が提供したものを使用して、一連のアプリケーションの起動またはウィンドウの開口部とスペースの選択を簡単にシーケンスできるはずです。

1