O serviço Automator baseado em AppleScript é bastante instável (às vezes muito lento, às vezes encontra erro)

3

Eu tenho alguns serviços Automator baseados em applescript, por exemplo, 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

Eu o atribui a um atalho de teclado Ctrl-E e o uso há vários meses.

Mas o serviço é bastante instável. Quando minha máquina, um MacBook Pro executando o OS X 10.8, está em carga normal, responde a outras tarefas e o Terminal já está funcionando, tudo o que aconteceu é o seguinte:

  1. Cerca de metade do tempo é rápido, demorando menos de um segundo para responder.
  2. Cerca de 25% do tempo que demora três segundos para iniciar uma nova janela do Terminal.
  3. Cerca de 5% do tempo que leva para sempre. Eu costumo acreditar que ele não responde, mas depois de vinte segundos uma janela finalmente aparece, o que é bem esquisito.
  4. Cerca de 10% das vezes recebo uma mensagem de erro Workflow encountered an error ou algo parecido.
  5. Cerca de 10% do tempo em que o atalho não responde (apenas realçará outro arquivo; mas não há absolutamente nenhum conflito de atalho). Eu tenho que ir para Finder->Services->Launch ... para usar o serviço.

Alguma ideia do motivo pelo qual o serviço é tão instável? (Bem, este não é o meu único serviço instável; na verdade, todos os serviços que criei são bastante instáveis ...) Agradecemos antecipadamente.

    
por 4ae1e1 16.05.2013 / 20:27

1 resposta

1

4. About 10% of the time I get an error message Workflow encountered an error or something like that.

Existe um bug em 10.7 e 10.8 onde o Finder ignora novas janelas quando obtém a propriedade de seleção. Se você abrir uma nova janela do Finder, selecionar alguns itens e executar tell app "Finder" to selection no AppleScript Editor, o resultado serão os itens selecionados em alguma janela atrás da janela frontal (ou uma lista vazia).

Uma solução alternativa é mover o foco para outro aplicativo e voltar:

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

Ou, nesse caso, você também pode obter a seleção como entrada para o serviço.

5. About 10% of the time the shortcut doesn't respond at all (it will just highlight another file; but there is absolutely no shortcut conflict). I have to go to Finder->Services->Launch ... to use the service.

Isso pode ser causado por outro bug. Às vezes, os atalhos para os serviços do Automator não funcionam até que você passe o mouse sobre o menu de serviços na barra de menus. Eu não conheço nenhuma solução alternativa para isso.

Tente apenas alternar para FastScripts ou atribua atalhos para scripts de alguma outra maneira . Há também um pequeno atraso (talvez 0,1 - 0,5 segundo) antes da execução dos serviços do Automator.

    
por 16.05.2013 / 22:21