web-dev-qa-db-ja.com

AppleScriptベースのAutomatorサービスは非常に不安定です(非常に遅い場合もあれば、エラーが発生する場合もあります)

アップルスクリプトベースのAutomatorサービスがいくつかあります。たとえば、Launch Emacs With Selected File

tell application "Finder"
    set selectedDirectory to (quoted form of POSIX path of (target of window 1 as alias))
    set selectedItem to (quoted form of POSIX path of (the selection as alias))
    tell application "Terminal"
        tell window 1
            do script "cd " & selectedDirectory & " && emacs " & selectedItem
        end tell
        activate
    end tell
end tell

キーボードショートカットCtrl-Eに割り当てて、数か月使用しています。

しかし、サービスはかなり不安定です。私のマシンであるOSX10.8を実行しているMacBookProが通常の負荷で、他のタスクに応答し、ターミナルがすでに実行されている場合、次のすべてが発生する可能性があります。

  1. 約半分の時間は高速で、応答に1秒もかかりません。
  2. 新しいターミナルウィンドウを起動するのにかかる時間の約25%は3秒ほどです。
  3. 永遠にかかる時間の約5%。まったく反応しないと思う傾向がありますが、20秒後にようやくウィンドウが表示され、かなり変です。
  4. 約10%の確率で、エラーメッセージWorkflow encountered an errorなどが表示されます。
  5. ショートカットがまったく応答しない時間の約10%(別のファイルが強調表示されるだけですが、ショートカットの競合はまったくありません)。サービスを利用するには、Finder->Services->Launch ...にアクセスする必要があります。

サービスが非常に不安定である理由は何ですか? (まあ、これは私の唯一の不安定なサービスではありません。実際、私が作成したすべてのサービスは非常に不安定です...)よろしくお願いします。

3
4ae1e1

4.約10%の確率で、エラーメッセージWorkflow encountered an errorなどが表示されます。

10.7および10.8のバグ があり、Finderはselectionプロパティを取得するときに新しいウィンドウを無視します。新しいFinderウィンドウを開いていくつかの項目を選択し、AppleScriptEditorでtell app "Finder" to selectionを実行すると、最前面のウィンドウ(または空のリスト)の後ろのあるウィンドウで選択された項目が表示されます。

回避策の1つは、フォーカスを別のアプリケーションに移動して戻すことです。

activate application "SystemUIServer"
tell application "Finder"
    activate
    set d to POSIX path of (target of Finder window 1 as alias)
    set f to POSIX path of (item 1 of (get selection) as alias)
end tell
set cmd to "cd " & quoted form of d & " && emacs " & quoted form of f
tell application "Terminal"
    try
        set w to window 1 where visible is true and busy is false
        do script cmd in w
        set frontmost of w to true  
    on error
        do script cmd
    end try
    activate
end tell

または、この場合、サービスの入力として選択を取得することもできます。

5.約10%の確率で、ショートカットがまったく応答しません(別のファイルが強調表示されるだけですが、ショートカットの競合はまったくありません)。サービスを利用するには、Finder->Services->Launch ...にアクセスする必要があります。

これは別のバグが原因である可能性があります。メニューバーからサービスメニューにカーソルを合わせるまで、Automatorサービスのショートカットが機能しない場合があります。ただし、回避策はわかりません。

FastScriptsまたは 他の方法でスクリプトにショートカットを割り当てる に切り替えてみてください。 Automatorサービスが実行されるまでに短い(おそらく0.1〜0.5秒)遅延もあります。

1
Lri