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.pdf
AppleScript'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 TRUE
iç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 .