क्या किसी कस्टम आइकन को बनाए रखने के लिए AppleScript .scpt फ़ाइल के लिए संभव है, भले ही कोड में संपादन किए गए हों?


3

फ़ाइल:

मैंने Script Debugger.app में AppleScript .scpt फ़ाइल बनाई।

यहां बताया गया है कि मैंने इस .scpt फ़ाइल को एक कस्टम आइकन कैसे सौंपा है:

  • मैंने IconArchive.com से एक अद्वितीय आइकन ("512px PNG" प्रारूप में) डाउनलोड किया

  • मैंने पूर्वावलोकन .app के साथ .png फ़ाइल खोली। पूर्वावलोकन में, मैंने इस छवि को अपने क्लिपबोर्ड पर रखने के लिए Edited क्लिक किया Copy

  • मैंने Get Infoखोजक में .scpt फ़ाइल की विंडो खोली । मैंने डिफ़ॉल्ट आइकन पर क्लिक किया, जो Get Infoविंडो के ऊपरी-बाएँ कोने में पाया गया । फिर एक नीली रूपरेखा डिफ़ॉल्ट आइकन के चारों ओर दिखाई दी, यह दर्शाता है कि आइकन का चयन किया गया था।

  • अंत में, मैंने कीबोर्ड शॉर्टकट, ⌘ command+ के माध्यम से डिफ़ॉल्ट आइकन पर कस्टम आइकन चिपकाया V। कस्टम आइकन तुरंत सेट किया गया था। मैंने Get Infoखिड़की से बाहर बंद कर दिया ।


बग:

जब मैं कोड को संपादित करने के लिए स्क्रिप्ट डीबगर में .scpt फ़ाइल को खोलता हूं, और फिर .scpt फ़ाइल को फिर से शुरू करता हूं, तो कस्टम आइकन गायब हो जाता है।

सहेजने पर, निम्न आइकन तुरंत कस्टम आइकन की जगह लेता है:

(यह .scpt फ़ाइलों के लिए OS X का डिफ़ॉल्ट आइकन है।)

बेशक, कस्टम आइकन सेट करने की प्रक्रिया से हर बार गुजरना, जिसे मैं सहेजता हूं (यानी, संपादित करें) फ़ाइल एक असुविधा है।

लेकिन, एक दूसरा, कोरोलरी बग भी है: हर बार जब मैं Get Infoखिड़की में कस्टम आइकन को फिर से जोड़ता हूं , .scpt फ़ाइल का आकार संचयी रूप से बढ़ जाता है। दूसरे शब्दों में, जब स्क्रिप्ट डीबगर कस्टम फ़ाइल आइकन को हटा देता है, तो आइकन का फ़ाइल आकार अभी भी, कुल मिलाकर .scpt फ़ाइल आकार के रूप में, किसी भी तरह से शामिल है।

बिंदु में मामला: .scpt फ़ाइल का फ़ाइल आकार इस समय 12.6 MB है। फ़ाइल .5 MB से बड़ी नहीं होनी चाहिए।


प्रश्न:

मैं समझता हूं कि AppleScript .app फ़ाइल में एक कस्टम फ़ाइल आइकन कैसे सेट किया जाए, ताकि संपादन के बाद यह कस्टम आइकन बना रहे , लेकिन मैं उत्सुक हूं कि क्या कोई .scpt फ़ाइल के लिए भी किया जा सकता है।

क्या मेरे कस्टम स्क्रिप्ट आइकन के स्थान पर बने रहने का एक तरीका है, भले ही .scpt फ़ाइल को स्क्रिप्ट डीबगर में संशोधित किया गया हो?

यह एक .scpt फ़ाइल है जिसे FastScripts.app मेनू बार ड्रॉप-डाउन मेनू के माध्यम से लॉन्च किया गया है। (.Scpt फ़ाइल में स्थित है /Users/Me/Library/Scripts।) FastScripts ड्रॉप-डाउन मेनू वास्तव में स्क्रिप्ट्स के फ़ाइल आइकन प्रदर्शित करता है , जो एक अच्छी सुविधा है। यही कारण है कि मैं .scpt फ़ाइल (यानी, ताकि मैं FastScripts शॉर्टकट मेनू में एक apposite आइकन का पालन कर सकते हैं) एक कस्टम आइकन सेट करना चाहते हैं।

नहीं, यह केवल AppleScript .scpt फ़ाइलों को परिवर्तित करने के लिए एक बड़ी बात नहीं है जो मैं AppleScript .app फ़ाइलों के लिए एक कस्टम फ़ाइल आइकन करना चाहता हूं। मैं यह प्रश्न केवल यह देखने के लिए करता हूं कि क्या ऐसा कुछ है जो मुझे याद आ रहा है या यहां दिखाई दे रहा है।


स्क्रिप्ट एडिटर के बारे में क्या ?

ऐसा प्रतीत होता है कि यह बग स्क्रिप्ट डीबगर के लिए अद्वितीय है ।

जब मैं OS X के मूल AppleScript संपादन प्रोग्राम, स्क्रिप्ट Editor.app में समान चरणों का पालन करता हूं , तो .scpt फ़ाइल आइकन सहेजने पर चातुर्य में रहता है। हालाँकि, मैं शपथ ले सकता था कि मेरे पास अतीत में स्क्रिप्ट संपादक में इस मुद्दे का अनुभव है।

उदाहरण के लिए, मुझे याद है कि, एक बार, स्क्रिप्ट संपादक ने एक .scpt फ़ाइल को सहेजने से इनकार कर दिया था जिसे मैंने संपादित किया था; सहेजें पर एक अस्पष्ट त्रुटि संवाद प्रस्तुत किया गया था। फ़ाइल को सफलतापूर्वक सहेजने के लिए, मुझे या तो फाइंडर की Get Infoविंडो से कस्टम आइकन को हटाना होगा , या कोड टेक्स्ट को कॉपी करके नई .scpt फ़ाइल में पेस्ट करना होगा (जो कि निश्चित रूप से, डिफ़ॉल्ट .scpt फ़ाइल आइकन के पास होगा)।

लेकिन, इस समय, मैं स्क्रिप्ट एडिटर में त्रुटि नहीं दोहरा सकता।

किसी भी दर पर, मैं अपने AppleScripts को संपादित करने के लिए Script Editor का उपयोग नहीं करने का प्रयास करता हूं। इसका कारण यह है स्क्रिप्ट संपादक है laggy , संभावित दुर्घटनाओं एक तीसरे पक्ष के स्क्रिप्ट पुस्तकालय का उपयोग करते समय , और हो सकता है मनमौजी जब यह खोलने और बचत फ़ाइलों के लिए आता है।

मेरे अनुभव में, अब तक, स्क्रिप्ट डीबगर के पास इन मुद्दों में से कोई भी नहीं है।

बेशक, स्क्रिप्ट डीबगर में कम से कम एक मुद्दा होता है, हालांकि (अर्थात, इस पोस्ट में विस्तृत मुद्दा)।


OS X El Capitan, संस्करण 10.11.6।



"बेशक, कस्टम आइकन सेट करने की प्रक्रिया से गुजरना हर बार जब मैं फ़ाइल को सहेजता हूं (यानी, संपादित करता हूं) एक असुविधा है।" आप इसे करने के लिए एक स्क्रिप्ट लिख सकते हैं। जैसा कि आप कहते हैं, स्क्रिप्ट एडिटर .scpt फ़ाइलों की बचत के बीच कस्टम आइकन रखता है।
रास्ते में अजनबी

आपने लिखा, "जैसा कि आप कहते हैं, स्क्रिप्ट एडिटर .scpt फाइलों की सेविंग्स के बीच कस्टम आइकन रखता है।" लेकिन, मैं यह नहीं देखता कि यह एक अच्छा या उपयोगी कैसे है? मेरा मतलब है, मैं सहेजने के बाद कस्टम आइकन का उपयोग कैसे करूं? मैं इस व्यवहार को एक बुरी चीज़ के रूप में देखता हूं, क्योंकि यह .scpt फ़ाइल का फ़ाइल आकार बढ़ाता रहता है, अनिश्चित काल तक, शून्य लाभ या उद्देश्य के साथ। यदि मैं आपको क्या सुझाता हूं, और एक समर्पित AppleScript बनाएँ, जो .scpt फ़ाइल के फ़ाइल आइकन को एक कस्टम आइकन के रूप में सेट करता है, .scpt फ़ाइल का फ़ाइल आकार तब भी बड़ा और बड़ा होता रहेगा, जो कि प्रत्येक बार कस्टम आइकन होता है। सेट है।
रबिक का गोला

यदि यह पुराने कस्टम आइकन को रख रहा है, तो आप कट को क्लिपबोर्ड पर रख सकते हैं।
रास्ते में अजनबी

मुझे अब भी आपका सुझाव समझ नहीं आ रहा है। .Scpt फ़ाइल को सहेजने पर, कस्टम आइकन तुरंत गायब हो जाता है। आप कस्टम आइकन को क्लिपबोर्ड पर कैसे काट सकते हैं, क्योंकि यह पहले से ही डिफ़ॉल्ट फ़ाइल आइकन से अधिलेखित हो गया है?
रूबिक का गोला

जवाबों:


3

सामान्यतया, जब कोई उपयोगकर्ता किसी छवि फ़ाइल को आइकन में कॉपी और पेस्ट करके एक फ़ाइल को एक कस्टम आइकन प्रदान करता है , तो ऊपरी बाएँ कोने में, फ़ाइल के गेट इन्फो शीट पर, छवि फ़ाइल को फ़ाइल की com.apple.ResourceFork विस्तारित विशेषता के रूप में संग्रहीत किया जाता है। ls -l@ filename.extफ़ाइल के विस्तारित गुणों को दिखाने के लिए टर्मिनल में लागू किया जा सकता है और देखा जा सकता है । विस्तारित विशेषताओं में हेरफेर करने के लिए , xattrटर्मिनल में उपयोगिता का उपयोग करें । ध्यान दें कि इस संपर्क में शब्द छवि फ़ाइल का उपयोग क्लिपबोर्ड पर कॉपी किया गया कोई भी वैध स्रोत है, फिर उसे गेट इन्फो शीट में चिपकाया जा सकता है।

स्क्रिप्ट फ़ाइल को सहेजने के बाद आइकन फ़ाइल को फिर से लागू करने के लिए। स्क्रिप्ट डीबगर में .scpt फ़ाइल के कारण आकार में वृद्धि जारी रखने के लिए com.apple.ResourceFork विस्तारित विशेषता का कारण बनता है , जबकि संभवतः संचित आइकन फ़ाइलों तक पहुंच खोना , यह सुनिश्चित करने के लिए नहीं कह सकता कि मैंने पर्याप्त नहीं किया है। परिक्षण। दुर्भाग्य से, जबकि स्क्रिप्ट एडिटर कस्टम आइकन फ़ाइल रखता है, फिर भी यह com.apple.ResourceFork विस्तारित विशेषता के आकार को बढ़ाता हुआ प्रतीत होता है ।

विशेष रूप से com.apple.ResourceFork विस्तारित विशेषताओं को हटाकर फ़ाइल का आकार कम करने के लिए , टर्मिनल में निम्न कमांड सिंटैक्स का उपयोग करें :

xattr -d com.apple.ResourceFork filename.ext

फिर फ़ाइल के लिए कस्टम आइकन पुन: लागू करें।

xattrटाइप करके टर्मिनल में मैन पेज पर नज़र डालें , xattrऔर फिर संदर्भ मेनू से ओपन मैन पेज का चयन करके उस पर राइट-क्लिक करें

स्क्रिप्ट डिबगर को डिफ़ॉल्ट आइकन पर रीसेट करने के साथ समस्या को शायद डेवलपर के साथ उठाना होगा, या wch1zpink के उत्तर में सुझाए गए वर्कअराउंड का उपयोग करना होगा।

चूंकि com.apple.ResourceFork विस्तारित विशेषता इस बात की परवाह किए बिना बढ़ती है कि आप किस ऐप, स्क्रिप्ट एडिटर या स्क्रिप्ट डीबगर का उपयोग करते हैं, यह एक ऐसा मुद्दा है जिसे Apple को संबोधित करने की आवश्यकता है।

मुझे पता है कि आप OS X El Capitan 10.11.6 का उपयोग कर रहे हैं, हालांकि मैंने इसे macOS Sierra 10.12.5 के तहत परीक्षण किया है और व्यवहार स्पष्ट रूप से एक ही है, यह शायद कोई फर्क नहीं पड़ता कि मैंने बाद के ओएस रिलीज़ में इसका परीक्षण किया। मैं स्क्रिप्ट डीबगर 6.0.4 का उपयोग कर रहा था।

आप जो कर रहे हैं, उसकी पुनरावृत्ति के कारण, एक स्क्रिप्टेड समाधान दोनों छोटे फ़ाइल आकार, इसे विस्तारित विशेषताओं और कस्टम आइकन को सम्मिलित करने के लिए आवश्यक प्रयास को कम करने के लिए यहां है ।


अपडेट करें:

OS X 10.8.5 के तहत एक समान सड़क से नीचे जाने के बाद, प्रोग्रामेटिक रूप से किसी फ़ाइल के आइकन को सेट करने के साथ, और टर्मिनल के उपयोग से फ़ाइल या फ़ोल्डर आइकन कैसे बदल सकता है, के तहत प्रस्तुत लगभग हर समाधान का परीक्षण करने के बाद , मैंने setfileicon इस उत्तर से उपयोग करना चुना , क्योंकि यह उस समय मेरी जरूरतों के लिए सबसे अच्छा शब्द था।

निम्न AppleScript कोड उदाहरण कोड है जो प्रोग्राम फ़ाइल की com.apple.ResourceFork विस्तारित विशेषता को इसे संचयी आकार को कम करने और लक्ष्य फ़ाइल के आइकन को रीसेट करने के लिए प्रोग्रामेटिक रूप से हटा सकता है । यह स्क्रिप्ट डीबगर के तहत एक बचाने के दौरान आइकन को अक्षुण्ण रखने के लिए फ़ाइल को लॉक करने के संदर्भ में wch1zpink के उत्तर में सुझाए गए वर्कअराउंड के उपयोग के आसपास लिखा गया है।

इस उदाहरण कोड का मुख्य उद्देश्य यह दिखाना है कि लक्ष्य फ़ाइल की com.apple.ResourceFork विस्तारित विशेषता को कैसे हटाया जाए और इसके कस्टम आइकन को प्रोग्रामेटिक रूप से रीसेट किया जाए। यदि आप सहेजने के बीच आइकन को अक्षुण्ण रखने की उस विधि का उपयोग करना चाहते हैं, तो यदि इसे हटाया नहीं जा सकता है, तो मैंने लक्ष्य फ़ाइल को अनलॉक / लॉक करने के लिए कोड में फेंक दिया है। मुझे लगता है कि यह सिर्फ इस बात पर निर्भर करता है कि लक्ष्य फ़ाइल की com.apple.ResourceFork विस्तारित विशेषता के आकार को कितनी बार रीसेट करना है ।

tell current application

    set theTargetFilename to "filename.scpt" as string
    set theHomeFolderPath to (path to home folder) as string
    set theScriptsFolder to (path to scripts folder) as string
    set theTargetFilePathname to theScriptsFolder & theTargetFilename as alias
    set theTargetIcon to quoted form of (POSIX path of (theHomeFolderPath & "bin:icon.icns") as string)
    set theTargetExecutable to quoted form of (POSIX path of (theHomeFolderPath & "bin:setfileicon") as string)

    tell application "Finder" to set locked of theTargetFilePathname to false
    do shell script "xattr -d com.apple.ResourceFork " & quoted form of (POSIX path of theTargetFilePathname) & "; exit 0"
    do shell script theTargetExecutable & " " & theTargetIcon & " " & quoted form of (POSIX path of theTargetFilePathname)
    tell application "Finder" to set locked of theTargetFilePathname to true

end tell

टिप्पणियाँ:

इस उदाहरण कोड के उद्देश्य के लिए, मैंने अपने होम फ़ोल्डर की जड़ में बिन फ़ोल्डर में setfileiconकमांड लाइन उपयोगिता और लक्ष्य icon.icnsफ़ाइलों को रखा है । फ़ाइल है .icns अपने प्रश्न में जुड़े हुए एक की फ़ाइल। आप PNG फ़ाइल का उपयोग कर सकते हैं , हालांकि मेरा मानना ​​है कि .nns फ़ाइल एक बेहतर छवि तैयार करती है।icon.icns

स्क्रिप्ट अधिक कठिन कोडित हो सकती है और क्रिया के रूप में नहीं, हालांकि मैंने इसे कुछ कारणों से इस तरह से कोडित किया है जिसके बारे में मुझे तब तक जानकारी नहीं होगी जब तक आपको इसकी आवश्यकता न हो। अपने वातावरण में आवश्यकतानुसार / कार्यशील समाधान को लागू करने के लिए उदाहरण कोड का उपयोग करने के लिए स्वतंत्र महसूस करें।

इसका परीक्षण macOS Sierra 10.12.5 के तहत किया गया था, हालांकि इसे OS X El Capitan 10.11.6 के तहत भी काम करना चाहिए।


प्रतिभाशाली। विशेष रूप से "सेट लॉक" ;-)
wch1zpink

1
@ wch1zpink, स्क्रिप्ट डीबगर के साथ वर्कअराउंड के रूप में सेव करते समय कस्टम आइकन को अक्षुण्ण रखने के लिए फाइल को लॉक करने का श्रेय आप सभी को है (और मुझे इसके लिए आपके उत्तर को +1 करना होगा)! लेकिन com.apple.ResourceFork विस्तारित विशेषता के साथ एक बुरा मुद्दा क्या बढ़ रहा है! कम से कम हमारे दोनों उत्तरों के बीच, दोनों मुद्दों को संभालने के लिए एक समाधान है।
user3439894

1
मैं वास्तव में xattr के लिए मैन पेजों में था और कुछ सीखने और पढ़ने के लिए कर रहा था। मैं केवल लगभग आठ महीने से स्क्रिप्टिंग कर रहा हूं, इसके पहले मेरी बेल्ट के नीचे शून्य प्रोग्रामिंग कौशल है। इतना कुछ सीखना है। ईमानदारी से आपके जवाब और जवाब ने मुझे बहुत कुछ सिखाया है। धन्यवाद दोस्त
wch1zpink

आइकॉसेट मैन पेज को भी पढ़ रहा था, यह देखने के लिए जाँच कर रहा था कि क्या कोई कमांड है जिसका हम उपयोग कर सकते हैं। दिलचस्प सामग्री
wch1zpink

1
गुरु ने किया। आपका कोड त्रुटिपूर्ण रूप से दोनों बगों की देखभाल करता है। आपकी सरलता के लिए धन्यवाद! साथ ही धन्यवाद, @ wch1zpink! यह उत्तर कला का एक काम है।
रुबिक का गोला

3

असल में एक उपाय है। मैंने आपके द्वारा दिए गए लिंक से .nns फ़ाइल डाउनलोड की। मैंने स्क्रिप्ट के गेट इंफो विंडो में आइकॉन इमेज से आइकॉन विंडो तक पूरी। नया आइकन सेट होने के बाद, मैंने गेट इन्फो विंडो में "लॉक फाइल" का विकल्प चुना।

यहाँ छवि विवरण दर्ज करें

इसके बाद, मैंने उस स्क्रिप्ट को फिर से स्क्रिप्ट डीबगर ऐप में खोला और स्क्रिप्ट में कुछ बदलाव किए, स्क्रिप्ट को फिर से जोड़ दिया और इसे फिर से सहेजा। जब मैंने इसे फिर से सहेजने की कोशिश की, तो मुझे यह संदेश विंडो मिला।

यहाँ छवि विवरण दर्ज करें

मैंने "आयवे सहेजें" और बिंगो के विकल्प का चयन किया !! संपादन सहेजे गए लेकिन कस्टम आइकन अपरिवर्तित रहा।


यहाँ एक सुझाव है कि शायद कोई गेंद को पकड़ सकता है और उसके साथ दौड़ सकता है। इसे स्क्रिप्ट डीबगर में स्क्रिप्ट फ़ाइल के रूप में सहेजने के बजाय, इसे स्क्रिप्ट बंडल (.scptd) के रूप में सहेजें। ऐसा करने के बाद, ctrl + फाइंडर में उस फाइल पर क्लिक करें और "पैकेज कंटेंट दिखाएं" चुनें। संसाधन फ़ोल्डर में अपनी कस्टम .icns फ़ाइल जोड़ें। आप एक info.plist फ़ाइल भी देखेंगे। Xcode में info.plist फाइल खोलें। यदि आप सूचना गुण सूची पंक्ति पर + बटन दबाते हैं, तो यह आइकन फ़ाइलों को जोड़ने का विकल्प देता है।

यहाँ छवि विवरण दर्ज करें

यह मेरे ज्ञान के दायरे से ऊपर है, लेकिन हो सकता है कि किसी तरह कस्टम आइकन फ़ाइल को यहां सेट किया जा सके।


स्क्रिप्ट डीबगर को कस्टम आइकन को रीसेट नहीं करने के लिए यह एक दिलचस्प समाधान है लेकिन दुर्भाग्य से फ़ाइल की com.apple.ResourceFork विस्तारित विशेषता हर बार सहेजने के बाद भी बढ़ती रहती है। इसलिए समय-समय पर com.apple.ResourceFork विस्तारित विशेषता को हटाना होगा और आइकन रीसेट करना होगा। फ़ाइल को ऐसा करने के लिए अनलॉक करना होगा, क्योंकि यहां तक sudoकि लॉक का उपयोग नहीं किया जाएगा।
user3439894

मुझे विश्वास नहीं है कि दस्तावेज़ बंडल Info.plist में एक आइकन फ़ाइल संपत्ति का समर्थन करता है, लेकिन आवेदन बंडल करते हैं।
user3439894

मेरा मानना ​​है कि आप उस अवलोकन में सही हैं क्योंकि मैंने दस्तावेज़ फ़ाइल में आवश्यक फ़ाइल में समायोजन किया है, लेकिन यदि मैंने स्क्रिप्ट डिबगर में .scptd को फिर से खोला और परिवर्तन करें और सहेजे तो उन्होंने कस्टम आइकन नहीं रखा।
wch1zpink
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.