Mendapatkan Preview.app untuk menerima perintah AppleScript
Secara default, Pratinjau AppleScripting tidak berfungsi karena Pratinjau tidak memiliki kamus yang diperlukan. Untuk memperbaikinya, periksa jawaban Lauri di sini , yang menjelaskan pengaturan NSAppleScriptEnabled
untuk Preview.app.
Keluar dari Preview.app, lalu buka terminal dan masukkan:
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
Menutup jendela dari aplikasi
1) Dengan indeks jendela atau nama jendela
Perintah untuk menutup jendela aplikasi apa pun akan menjadi sesuatu seperti ini:
tell application "Preview" to close window 1
... atau jika Anda ingin menutup jendela dokumen bernama, misalnya foo.jpg
:
beri tahu aplikasi "Pratinjau" untuk menutup (setiap jendela yang namanya " foo.jpg ")
Jadi, dalam skrip shell Anda itu adalah:
#!/bin/sh
osascript <<EOF
tell application "Preview"
close (every window whose name is "$1")
end tell
EOF
Di sini, argumen pertama yang diteruskan ke skrip adalah nama jendela yang ingin Anda tutup, misalnya ./quit.sh foo.jpg
. Perhatikan bahwa jika file Anda mengandung spasi, Anda harus mengutip nama file, misalnya ./quit.sh "foo bar.jpg"
.
Atau jika Anda ingin menutup jendela sembarang dari aplikasi apa pun, gunakan ini:
#!/bin/sh
osascript <<EOF
tell application "$1"
close (every window whose name is "$2")
end tell
EOF
Di sini, Anda akan menggunakan ./quit.sh Preview foo.jpg
misalnya.
2) Dengan nama file
Jika Anda ingin menutup jendela yang dimiliki dokumen tertentu, tetapi memberikan nama file, Anda memerlukan sesuatu yang lain. Ini karena PDF multi-halaman dapat ditampilkan sebagai foo.pdf (Page 1 of 42)
, tetapi Anda hanya ingin meneruskan foo.pdf
ke AppleScript.
Di sini kita beralih melalui jendela dan membandingkan nama file dengan argumen yang diteruskan ke skrip:
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
Sekarang Anda cukup menelepon ./quit.sh foo.pdf
. Secara umum, untuk semua aplikasi dengan jendela dokumen bernama, itu akan menjadi:
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
Peringatan: Auto-closing Preview.app
Preview.app adalah salah satu aplikasi ini yang secara otomatis berhenti setelah jendela dokumen terakhir ditutup. Itu dilakukan untuk menghemat memori dan "membersihkan". Untuk menonaktifkan perilaku ini, jalankan yang berikut:
defaults write -g NSDisableAutomaticTermination -bool TRUE
Tentu saja, untuk membatalkan itu, ubah TRUE
ke FALSE
.
Menggunakan fungsi alih-alih skrip
Akhirnya, saya sarankan menempatkan skrip Anda ke dalam fungsi yang selalu tersedia di shell Anda. Untuk melakukan ini, tambahkan skrip ke ~/.bash_profile
. Buat file ini jika tidak ada.
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
}
Setelah Anda menyimpan profil bash dan memulai kembali shell, Anda dapat menelepon cw Preview foo.pdf
dari mana saja.