รับ Preview.app เพื่อรับคำสั่ง AppleScript
ตามค่าเริ่มต้น AppleScripting Preview จะไม่ทำงานเนื่องจาก Preview หายไปจากพจนานุกรมที่จำเป็น ในการแก้ไขปัญหานี้ให้ตรวจสอบคำตอบของ Lauri ที่นี่ซึ่งจะอธิบายการตั้งค่าNSAppleScriptEnabled
สำหรับ Preview.app
ออกจาก Preview.app จากนั้นเปิดเทอร์มินัลแล้วป้อน:
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
การปิดหน้าต่างจากแอปพลิเคชัน
1) โดยดัชนีหน้าต่างหรือชื่อของหน้าต่าง
คำสั่งเพื่อปิดหน้าต่างของแอปพลิเคชันที่ตั้งชื่อไว้จะเป็นดังนี้:
tell application "Preview" to close window 1
... หรือถ้าคุณต้องการปิดหน้าต่างเอกสารที่มีชื่อเช่นfoo.jpg
:
แจ้งให้แอปพลิเคชัน "ดูตัวอย่าง" เพื่อปิด (ทุกหน้าต่างที่มีชื่อ " foo.jpg ")
ดังนั้นในเชลล์สคริปต์ของคุณนั่นก็คือ:
#!/bin/sh
osascript <<EOF
tell application "Preview"
close (every window whose name is "$1")
end tell
EOF
./quit.sh foo.jpg
นี่อาร์กิวเมนต์แรกส่งผ่านไปยังสคริปต์ที่เป็นชื่อของหน้าต่างที่คุณต้องการที่จะปิดเช่น ./quit.sh "foo bar.jpg"
โปรดทราบว่าถ้าไฟล์ของคุณมีช่องว่างที่คุณต้องพูดชื่อไฟล์เช่น
หรือถ้าคุณต้องการปิดหน้าต่างโดยพลการจากแอปพลิเคชันใด ๆ ให้ใช้สิ่งนี้:
#!/bin/sh
osascript <<EOF
tell application "$1"
close (every window whose name is "$2")
end tell
EOF
ที่นี่คุณจะใช้./quit.sh Preview foo.jpg
เป็นตัวอย่าง
2) ตามชื่อไฟล์
หากคุณต้องการปิดหน้าต่างที่เป็นของเอกสารบางอย่าง แต่ให้ชื่อไฟล์คุณต้องมีอย่างอื่น นี่เป็นเพราะ PDF หลายหน้าสามารถแสดงเป็นfoo.pdf (Page 1 of 42)
ได้ แต่คุณต้องการส่งfoo.pdf
ต่อไปยัง AppleScript
ที่นี่เราวนซ้ำผ่านหน้าต่างและเปรียบเทียบชื่อไฟล์กับอาร์กิวเมนต์ที่ส่งผ่านไปยังสคริปต์:
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
./quit.sh foo.pdf
ตอนนี้คุณก็สามารถโทร ในแบบทั่วไปสำหรับแอพทั้งหมดที่มีหน้าต่างเอกสารที่ระบุชื่อนั่นคือ:
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
Caveat: ปิดแอพ Preview.app อัตโนมัติ
Preview.app เป็นหนึ่งในแอปพลิเคชันเหล่านี้ที่ออกโดยอัตโนมัติเมื่อหน้าต่างเอกสารล่าสุดถูกปิด มันทำเช่นนั้นเพื่อประหยัดหน่วยความจำและ "ล้าง" หากต้องการปิดใช้งานลักษณะการทำงานนี้ให้เรียกใช้สิ่งต่อไปนี้:
defaults write -g NSDisableAutomaticTermination -bool TRUE
ของหลักสูตรที่จะยกเลิกที่เปลี่ยนแปลงไปTRUE
FALSE
การใช้ฟังก์ชั่นแทนสคริปต์
ในที่สุดฉันขอแนะนำให้วางสคริปต์ของคุณลงในฟังก์ชันที่มีอยู่ในเปลือกของคุณเสมอ ~/.bash_profile
การทำเช่นนี้เพิ่มสคริปต์เพื่อคุณ สร้างไฟล์นี้หากไม่มีอยู่
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 แล้วรีสตาร์ทเชลล์คุณสามารถโทรได้cw Preview foo.pdf
จากทุกที่