AppleScript आदेशों को स्वीकार करने के लिए Preview.app प्राप्त करना
डिफ़ॉल्ट रूप से, AppleScripting पूर्वावलोकन काम नहीं करेगा क्योंकि पूर्वावलोकन आवश्यक शब्दकोश को याद कर रहा है। इसे ठीक करने के लिए, लॉरी के उत्तर को यहां देखें , जो NSAppleScriptEnabled
प्रीव्यू.एप के लिए सेटिंग की व्याख्या करता है।
प्रीव्यू छोड़ें। टैप करें, फिर एक टर्मिनल खोलें और दर्ज करें:
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) फ़ाइल नाम से
यदि आप एक विंडो को बंद करना चाहते हैं जो एक निश्चित दस्तावेज़ से संबंधित है, लेकिन फ़ाइल नाम की आपूर्ति करते हुए, आपको कुछ और चाहिए। ऐसा इसलिए है क्योंकि एक बहु-पृष्ठ पीडीएफ के रूप में प्रदर्शित किया जा सकता है 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
कैविएट: ऑटो-क्लोजिंग प्रीव्यू.ऐप
प्रीव्यू.ऐप इन एप्लिकेशनों में से एक है जो अपने आखिरी डॉक्यूमेंट विंडो के बंद होने के बाद अपने आप क्विट हो जाता है। यह स्मृति को बचाने और "साफ" करने के लिए करता है। इस व्यवहार को अक्षम करने के लिए, निम्नलिखित चलाएँ:
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
}
एक बार जब आप अपने बैश प्रोफाइल को बचा लेते हैं और शेल को पुनरारंभ करते हैं, तो आप cw Preview foo.pdf
हर जगह से कॉल कर सकते हैं ।