AppleScript komutlarını kabul etmek için Preview.app alma
Varsayılan olarak, Önizleme gerekli sözlüğü eksik olduğu için AppleScripting Önizleme çalışmaz. Bunu düzeltmek için Lauri'nin Preview.app ayarını açıklayan cevabını burada kontrol edin NSAppleScriptEnabled.
Preview.app uygulamasından çıkın, ardından bir terminal açın ve şunu girin:
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
Uygulamadan bir pencereyi kapatma
1) Pencere dizinine veya pencerenin adına göre
Adlandırılmış herhangi bir uygulamanın penceresini kapatma komutu şu şekilde olur:
tell application "Preview" to close window 1
… Veya adlandırılmış bir belge penceresini kapatmak istiyorsanız, örneğin foo.jpg:
"Önizleme" uygulamasını kapatmasını söyleyin (adı " foo.jpg " olan her pencere )
Yani, kabuk betiğinizde şöyle olurdu:
#!/bin/sh
osascript <<EOF
tell application "Preview"
close (every window whose name is "$1")
end tell
EOF
Burada, betiğe iletilen ilk argüman kapatmak istediğiniz pencerenin adıdır, örn ./quit.sh foo.jpg. Dosyanız boşluk içeriyorsa, dosya adını belirtmeniz gerektiğini unutmayın, örn ./quit.sh "foo bar.jpg".
Veya herhangi bir uygulamadan rastgele pencereleri kapatmak istiyorsanız, şunu kullanın:
#!/bin/sh
osascript <<EOF
tell application "$1"
close (every window whose name is "$2")
end tell
EOF
Burada, ./quit.sh Preview foo.jpgörneğin kullanırsınız .
2) Dosya adına göre
Belirli bir belgeye ait olan ancak dosya adını sağlayan bir pencereyi kapatmak istiyorsanız, başka bir şeye ihtiyacınız vardır. Bunun nedeni, çok sayfalı bir PDF'nin görüntülenebilmesidir foo.pdf (Page 1 of 42), ancak yalnızca foo.pdfAppleScript'e geçmek istersiniz .
Burada pencerelerden tekrarlıyoruz ve dosya adlarını senaryoya iletilen argümanla karşılaştırıyoruz:
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
Şimdi sadece arayabilirsiniz ./quit.sh foo.pdf. Genelleştirilmiş bir şekilde, adlandırılmış belge pencerelerine sahip tüm uygulamalar için şu şekilde olur:
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
Uyarı: Otomatik kapanma Preview.app
Preview.app, son belge penceresi kapatıldığında otomatik olarak çıkan bu uygulamalardan biridir. Hafızadan tasarruf etmek ve "temizlemek" için bunu yapar. Bu davranışı devre dışı bırakmak için aşağıdakileri çalıştırın:
defaults write -g NSDisableAutomaticTermination -bool TRUE
Tabii ki, değişikliği geri almak TRUEiçin FALSE.
Komut dosyaları yerine işlevleri kullanma
Son olarak, komut dosyalarınızı her zaman kabuğunuzda bulunan bir işleve koymanızı öneririm. Bunu yapmak için, komut dosyalarını bilgisayarınıza ekleyin ~/.bash_profile. Bu dosyayı yoksa oluşturun.
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
}
Bash profilinizi kaydedip kabuğu yeniden başlattıktan sonra cw Preview foo.pdf, her yerden arayabilirsiniz .