Ottenere Preview.app per accettare i comandi AppleScript
Per impostazione predefinita, l'anteprima di AppleScript non funziona perché in Anteprima manca il dizionario necessario. Per risolvere questo problema, controlla qui la risposta di Lauri , che spiega le impostazioni NSAppleScriptEnabled
di Preview.app.
Esci da Preview.app, quindi apri un terminale e inserisci:
sudo defaults write /Applications/Preview.app/Contents/Info NSAppleScriptEnabled -bool true
sudo chmod 644 /Applications/Preview.app/Contents/Info.plist
sudo codesign -f -s - /Applications/Preview.app
Chiudere una finestra da un'applicazione
1) Per indice della finestra o nome della finestra
Il comando per chiudere una finestra di qualsiasi applicazione denominata sarebbe simile al seguente:
tell application "Preview" to close window 1
... o se si desidera chiudere una finestra del documento con nome, ad esempio foo.jpg
:
di chiudere l'applicazione "Anteprima" (ogni finestra il cui nome è " foo.jpg ")
Quindi, nel tuo script shell sarebbe:
#!/bin/sh
osascript <<EOF
tell application "Preview"
close (every window whose name is "$1")
end tell
EOF
Qui, il primo argomento passato allo script è il nome della finestra che si desidera chiudere, ad es ./quit.sh foo.jpg
. Nota che se il tuo file contiene spazi, devi citare il nome del file, ad es ./quit.sh "foo bar.jpg"
.
O se vuoi chiudere finestre arbitrarie da qualsiasi applicazione, usa questo:
#!/bin/sh
osascript <<EOF
tell application "$1"
close (every window whose name is "$2")
end tell
EOF
Qui, useresti ./quit.sh Preview foo.jpg
per esempio.
2) Per nome file
Se si desidera chiudere una finestra che appartiene a un determinato documento, ma fornendo il nome del file, è necessario qualcos'altro. Questo perché un PDF multipagina potrebbe essere visualizzato come foo.pdf (Page 1 of 42)
, ma vorresti solo passare foo.pdf
ad AppleScript.
Qui passiamo attraverso le finestre e confrontiamo i nomi dei file con l'argomento passato allo script:
osascript <<EOF
tell application "Preview"
set windowCount to number of windows
repeat with x from 1 to windowCount
set docName to (name of document of window x)
if (docName is equal to "$1") then
close window x
end if
end repeat
end tell
EOF
Ora puoi semplicemente chiamare ./quit.sh foo.pdf
. In modo generalizzato, per tutte le app con finestre di documenti con nome, sarebbe:
osascript <<EOF
tell application "$1"
set windowCount to number of windows
repeat with x from 1 to windowCount
set docName to (name of document of window x)
if (docName is equal to "$2") then
close window x
end if
end repeat
end tell
EOF
Avvertenza: Preview.app con chiusura automatica
Preview.app è una di queste applicazioni che si chiude automaticamente una volta chiusa la finestra dell'ultimo documento. Lo fa per risparmiare memoria e "ripulire". Per disabilitare questo comportamento, eseguire quanto segue:
defaults write -g NSDisableAutomaticTermination -bool TRUE
Naturalmente, per annullare ciò, passare TRUE
a FALSE
.
Utilizzo delle funzioni anziché degli script
Infine, suggerirei di inserire i tuoi script in una funzione che è sempre disponibile nella tua shell. Per fare ciò, aggiungi gli script al tuo ~/.bash_profile
. Crea questo file se non esiste.
cw() {
osascript <<EOF
tell application "$1"
set windowCount to number of windows
repeat with x from 1 to windowCount
set docName to (name of document of window x)
if (docName is equal to "$2") then
close window x
end if
end repeat
end tell
EOF
}
Dopo aver salvato il tuo profilo bash e riavviato la shell, puoi chiamare cw Preview foo.pdf
da qualsiasi luogo.