Estoy tratando de producir un comando de shell basado en Applescript que le dice a la aplicación Vista previa de Mac OS X que cierre una ventana en particular.
#!/bin/sh
osascript <<EOF
tell application "Preview"
close "$1"
end tell
EOF
Pero esto no funciona: recibo el mensaje de error
25:52: execution error: Preview got an error: "musixdoc.pdf" doesn’t understand the close message. (-1708)
Pregunta relacionada: ¿Cómo cierro una aplicación OS X desde la línea de comandos usando un alias definido en mi .bash_profile?
macos
shell-script
applescript
Ewan Delanoy
fuente
fuente
Respuestas:
Obteniendo Preview.app para aceptar comandos AppleScript
De forma predeterminada, AppleScripting Preview no funcionará porque a Preview le falta el diccionario necesario. Para solucionar esto, verifique la respuesta de Lauri aquí , que explica la configuración
NSAppleScriptEnabled
de Preview.app.Salga de Preview.app, luego abra una terminal e ingrese:
Cerrar una ventana desde una aplicación
1) Por índice de ventana o nombre de la ventana
El comando para cerrar una ventana de cualquier aplicación con nombre sería algo como esto:
... o si desea cerrar una ventana de documento con nombre, por ejemplo
foo.jpg
:Entonces, en su script de shell eso sería:
Aquí, el primer argumento pasado al script es el nombre de la ventana que desea cerrar, por ejemplo
./quit.sh foo.jpg
. Tenga en cuenta que si su archivo contiene espacios, debe citar el nombre del archivo, por ejemplo./quit.sh "foo bar.jpg"
.O si desea cerrar ventanas arbitrarias desde cualquier aplicación, use esto:
Aquí, usarías
./quit.sh Preview foo.jpg
por ejemplo.2) Por nombre de archivo
Si desea cerrar una ventana que pertenece a un documento determinado, pero que proporciona el nombre del archivo, necesita algo más. Esto se debe a que un PDF de varias páginas podría mostrarse como
foo.pdf (Page 1 of 42)
, pero solo querría pasarfoo.pdf
al AppleScript.Aquí iteramos a través de las ventanas y comparamos los nombres de los archivos con el argumento pasado al script:
Ahora puedes simplemente llamar
./quit.sh foo.pdf
. De forma generalizada, para todas las aplicaciones con ventanas de documentos con nombre, eso sería:Advertencia: cierre automático Preview.app
Preview.app es una de estas aplicaciones que se cierra automáticamente una vez que se cierra su última ventana de documento. Lo hace para ahorrar memoria y "limpiar". Para deshabilitar este comportamiento, ejecute lo siguiente:
Por supuesto, para deshacer eso, cambie
TRUE
aFALSE
.Usar funciones en lugar de scripts
Finalmente, sugiero poner sus scripts en una función que siempre esté disponible en su shell. Para hacer esto, agregue los scripts a su
~/.bash_profile
. Cree este archivo si no existe.Una vez que guarde su perfil de bash y reinicie el shell, puede llamar
cw Preview foo.pdf
desde cualquier lugar.fuente
tell application "Preview" to windows
, ¿eso le da algún resultado? ¿Qué script exacto estás ejecutando?La respuesta de slhck se ve bien y completa. Cuidado, ejecutando la tercera línea de código :
'parece' haber causado que Vista previa se bloquee en cada lanzamiento con lo siguiente:
De acuerdo con el manual de codeign, eso
-f
está obligando a 'firmar el código para reemplazar y la firma existente' y-s
es 'firmar el código en la ruta dada' ... en este caso-
Aparentemente, la vista previa ahora está firmada incorrectamente e inutilizable. :(
fuente