Estou tentando produzir um comando shell baseado em Applescript que informa ao aplicativo Preview do Mac OS X para fechar uma janela específica.
#!/bin/sh
osascript <<EOF
tell application "Preview"
close "$1"
end tell
EOF
Mas isso não funciona: recebo a mensagem de erro
25:52: execution error: Preview got an error: "musixdoc.pdf" doesn’t understand the close message. (-1708)
Pergunta relacionada: Como fecho um aplicativo OS X na linha de comando usando um alias definido em meu .bash_profile?
macos
shell-script
applescript
Ewan Delanoy
fonte
fonte
Respostas:
Obtendo o Preview.app para aceitar comandos AppleScript
Por padrão, o AppleScripting Preview não funciona porque o Preview não possui o dicionário necessário. Para corrigir isso, verifique a resposta de Lauri aqui , que explica a configuração
NSAppleScriptEnabled
do Preview.app.Saia do Preview.app, abra um terminal e digite:
Fechando uma janela de um aplicativo
1) Por índice da janela ou nome da janela
O comando para fechar uma janela de qualquer aplicativo nomeado seria algo como isto:
… Ou se você deseja fechar uma janela de documento nomeada, por exemplo
foo.jpg
:Então, no seu script shell, seria:
Aqui, o primeiro argumento passado para o script é o nome da janela que você deseja fechar, por exemplo
./quit.sh foo.jpg
. Observe que se o seu arquivo contiver espaços, você deverá citar o nome do arquivo, por exemplo./quit.sh "foo bar.jpg"
.Ou se você deseja fechar janelas arbitrárias de qualquer aplicativo, use o seguinte:
Aqui, você usaria
./quit.sh Preview foo.jpg
por exemplo.2) Pelo nome do arquivo
Se você deseja fechar uma janela que pertence a um determinado documento, mas fornecendo o nome do arquivo, você precisa de outra coisa. Isso ocorre porque um PDF de várias páginas pode ser exibido como
foo.pdf (Page 1 of 42)
, mas você deseja apenas passarfoo.pdf
para o AppleScript.Aqui, iteramos pelas janelas e comparamos os nomes de arquivos com o argumento passado para o script:
Agora você pode simplesmente ligar
./quit.sh foo.pdf
. De maneira generalizada, para todos os aplicativos com janelas de documentos nomeadas, isso seria:Advertência: Preview.app de fechamento automático
O Preview.app é um desses aplicativos que fecha automaticamente quando a última janela do documento é fechada. Faz isso para economizar memória e "limpar". Para desativar esse comportamento, execute o seguinte:
Obviamente, para desfazer isso, mude
TRUE
paraFALSE
.Usando funções em vez de scripts
Por fim, sugiro colocar seus scripts em uma função que esteja sempre disponível em seu shell. Para fazer isso, adicione os scripts ao seu
~/.bash_profile
. Crie este arquivo se ele não existir.Depois de salvar seu perfil do bash e reiniciar o shell, você pode ligar
cw Preview foo.pdf
de qualquer lugar.fonte
tell application "Preview" to windows
: isso dá algum resultado? Qual script exato você está executando?A resposta do slhck parece boa e completa. Cuidado, executando a terceira linha de código :
'parece' ter causado o travamento da visualização a cada lançamento, com o seguinte:
De acordo com o manual de codesign, isso
-f
está forçando 'sinal de código para substituir e assinatura existente' e-s
'sinalizando o código no caminho especificado' ... neste caso-
Aparentemente, a visualização agora está incorretamente assinada e inutilizável. :(
fonte