Preview.app dazu bringen, AppleScript-Befehle zu akzeptieren
Standardmäßig funktioniert die AppleScripting-Vorschau nicht, da in der Vorschau das erforderliche Wörterbuch fehlt. Um dies zu beheben, überprüfen Sie Lauris Antwort hier , in der die Einstellung NSAppleScriptEnabled
für Preview.app erläutert wird .
Beenden Sie Preview.app, öffnen Sie ein Terminal und geben Sie Folgendes ein:
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
Schließen eines Fensters aus einer Anwendung
1) Nach Fensterindex oder Name des Fensters
Der Befehl zum Schließen eines Fensters einer benannten Anwendung lautet ungefähr so:
tell application "Preview" to close window 1
… Oder wenn Sie ein benanntes Dokumentfenster schließen möchten, z foo.jpg
.
Weisen Sie die Anwendung an, "Vorschau" zu schließen (jedes Fenster mit dem Namen " foo.jpg ").
In Ihrem Shell-Skript wäre das also:
#!/bin/sh
osascript <<EOF
tell application "Preview"
close (every window whose name is "$1")
end tell
EOF
Hier ist das erste an das Skript übergebene Argument der Name des Fensters, das Sie schließen möchten, z ./quit.sh foo.jpg
. Beachten Sie, dass Sie, wenn Ihre Datei Leerzeichen enthält, den Dateinamen angeben müssen, z ./quit.sh "foo bar.jpg"
.
Oder wenn Sie beliebige Fenster aus einer Anwendung schließen möchten, verwenden Sie Folgendes:
#!/bin/sh
osascript <<EOF
tell application "$1"
close (every window whose name is "$2")
end tell
EOF
Hier würden Sie ./quit.sh Preview foo.jpg
zum Beispiel verwenden.
2) Nach Dateiname
Wenn Sie ein Fenster schließen möchten, das zu einem bestimmten Dokument gehört, aber den Dateinamen angeben, benötigen Sie etwas anderes. Dies liegt daran, dass eine mehrseitige PDF-Datei als angezeigt werden foo.pdf (Page 1 of 42)
kann, Sie sie jedoch nur foo.pdf
an AppleScript übergeben möchten .
Hier iterieren wir durch die Fenster und vergleichen die Dateinamen mit dem an das Skript übergebenen Argument:
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
Jetzt können Sie einfach anrufen ./quit.sh foo.pdf
. Allgemein gilt für alle Apps mit benannten Dokumentfenstern Folgendes:
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
Vorsichtsmaßnahme: Automatisch schließende Preview.app
Preview.app ist eine dieser Anwendungen, die automatisch beendet wird, sobald das letzte Dokumentfenster geschlossen wird. Dies geschieht, um Speicherplatz zu sparen und "aufzuräumen". Führen Sie Folgendes aus, um dieses Verhalten zu deaktivieren:
defaults write -g NSDisableAutomaticTermination -bool TRUE
Um dies rückgängig zu machen, wechseln Sie natürlich TRUE
zu FALSE
.
Verwenden von Funktionen anstelle von Skripten
Schließlich würde ich vorschlagen, Ihre Skripte in eine Funktion einzufügen, die immer in Ihrer Shell verfügbar ist. Fügen Sie dazu die Skripte zu Ihrem hinzu ~/.bash_profile
. Erstellen Sie diese Datei, wenn sie nicht vorhanden ist.
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
}
Sobald Sie Ihr Bash-Profil gespeichert und die Shell neu gestartet haben, können Sie cw Preview foo.pdf
von überall aus anrufen .