3

У меня есть несколько сервисов Automator, основанных на appleScript, например, 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 и пользуюсь им уже несколько месяцев.

Но сервис у него довольно нестабильный. Когда мой компьютер, MacBook Pro, работающий под управлением OS X 10.8, загружается нормально, реагирует на другие задачи и терминал уже запущен, может произойти все следующее:

  1. Примерно в половине случаев это быстро, на ответ уходит меньше секунды.
  2. Около 25% времени занимает три секунды или около того, чтобы запустить новое окно терминала.
  3. Около 5% времени это занимает вечность. Я склонен полагать, что он не отвечает вообще, но через двадцать секунд наконец появляется окно, что довольно странно.
  4. Примерно в 10% случаев я получаю сообщение об ошибке. В Workflow encountered an error или что-то в этом роде.
  5. Примерно в 10% случаев ярлык не отвечает вообще (он просто выделяет другой файл; но при этом ярлык конфликта не возникает). Я должен пойти в Finder->Services->Launch ... чтобы использовать сервис.

Есть идеи, почему сервис так нестабилен? (Ну, это не единственный мой нестабильный сервис; фактически каждый созданный мной сервис довольно нестабилен ...) Заранее спасибо.

1 ответ1

1

4. Примерно в 10% случаев я получаю сообщение об ошибке. В Workflow encountered an error или что-то в этом роде.

В 10.7 и 10.8 есть ошибка, когда Finder игнорирует новые окна при получении свойства selection. Если вы откроете новое окно Finder, выберите некоторые элементы и запустите tell app "Finder" to selection в редакторе AppleScript, результатом будут элементы, выбранные в некотором окне позади самого переднего окна (или в пустом списке).

Один из обходных путей - перенести фокус на другое приложение и обратно:

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 секунды) задержка.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .