Bắt Preview.app để chấp nhận các lệnh AppleScript
Theo mặc định, AppleScripting Preview sẽ không hoạt động vì Preview thiếu từ điển cần thiết. Để khắc phục điều này, hãy kiểm tra câu trả lời của Lauri tại đây , giải thích cài đặt NSAppleScriptEnabled
cho Preview.app.
Thoát khỏi Preview.app, sau đó mở terminal và nhập:
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
Đóng cửa sổ từ một ứng dụng
1) Theo chỉ số cửa sổ hoặc tên của cửa sổ
Lệnh đóng cửa sổ của bất kỳ ứng dụng có tên nào sẽ giống như thế này:
tell application "Preview" to close window 1
Nếu bạn muốn đóng một cửa sổ tài liệu có tên, ví dụ foo.jpg
:
báo cho ứng dụng "Xem trước" để đóng (mọi cửa sổ có tên là " foo.jpg ")
Vì vậy, trong kịch bản shell của bạn sẽ là:
#!/bin/sh
osascript <<EOF
tell application "Preview"
close (every window whose name is "$1")
end tell
EOF
Ở đây, đối số đầu tiên được truyền cho tập lệnh là tên của cửa sổ bạn muốn đóng, vd ./quit.sh foo.jpg
. Lưu ý rằng nếu tệp của bạn chứa khoảng trắng, bạn phải trích dẫn tên tệp, vd ./quit.sh "foo bar.jpg"
.
Hoặc nếu bạn muốn đóng các cửa sổ tùy ý từ bất kỳ ứng dụng nào, hãy sử dụng:
#!/bin/sh
osascript <<EOF
tell application "$1"
close (every window whose name is "$2")
end tell
EOF
Ở đây, bạn sẽ sử dụng ./quit.sh Preview foo.jpg
ví dụ.
2) Theo tên tập tin
Nếu bạn muốn đóng một cửa sổ thuộc về một tài liệu nhất định, nhưng cung cấp tên tệp, bạn cần một cái gì đó khác. Điều này là do một tệp PDF nhiều trang có thể được hiển thị dưới dạng foo.pdf (Page 1 of 42)
, nhưng bạn chỉ muốn chuyển foo.pdf
sang AppleScript.
Ở đây chúng tôi lặp lại qua các cửa sổ và so sánh tên tệp với đối số được truyền cho tập lệnh:
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
Bây giờ bạn có thể chỉ cần gọi ./quit.sh foo.pdf
. Theo cách tổng quát, đối với tất cả các ứng dụng có cửa sổ tài liệu được đặt tên, đó sẽ là:
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
Hãy cẩn thận: Tự động đóng Preview.app
Preview.app là một trong những ứng dụng này tự động thoát khi cửa sổ tài liệu cuối cùng của nó bị đóng. Nó làm điều đó để tiết kiệm bộ nhớ và "dọn dẹp". Để vô hiệu hóa hành vi này, hãy chạy như sau:
defaults write -g NSDisableAutomaticTermination -bool TRUE
Tất nhiên, để hoàn tác điều đó, thay đổi TRUE
thành FALSE
.
Sử dụng các chức năng thay vì các tập lệnh
Cuối cùng, tôi khuyên bạn nên đặt các tập lệnh của mình vào một hàm luôn có sẵn trong trình bao của bạn. Để làm điều này, thêm các kịch bản cho của bạn ~/.bash_profile
. Tạo tập tin này nếu nó không tồn tại.
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
}
Khi bạn lưu hồ sơ bash của bạn và khởi động lại shell, bạn có thể gọi cw Preview foo.pdf
từ mọi nơi.