AppleScript मज़ा: सफारी के डाउनलोड फ़ोल्डर को स्वचालित रूप से बदल रहा है

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

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

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

प्रारंभ में जब इस समस्या के बारे में सोचते हैं तो समाधान काफी सरल लग सकता है, और निम्नलिखित परिदृश्य एक अच्छे उत्तर की तरह लग सकता है:

  1. "NAME" द्वारा निर्दिष्ट स्थान पर डाउनलोड फ़ोल्डर को बदलने के लिए कमांड "डिफॉल्ट्स राइट com.apple.Safari DownloadFolder NAME" को चलाने के लिए एक स्क्रिप्ट सेट करें।
  2. सिस्टम लॉन्चर का उपयोग करके इस स्क्रिप्ट को तभी चलाएं जब कोई विशिष्ट ड्राइव संलग्न हो।
  3. जब ड्राइव अब संलग्न नहीं है, तो एक समान स्थान की ओर इशारा करते हुए एक समान कमांड के साथ इसे दोहराएं।

हालांकि यह बुनियादी दृष्टिकोण उचित लग सकता है, यह कई कारणों से काम नहीं करेगा। सबसे पहले, एक बार सफारी चल रही है, तो अपनी वरीयताओं को बदलने का एकमात्र तरीका कार्यक्रम के माध्यम से ही है। जब प्रोग्राम लोड होता है, तो यह रैम में वरीयताओं को पढ़ेगा और वहां इसकी सेटिंग्स का प्रबंधन करेगा, इसलिए यदि आप ऊपर बताए गए टेक्स्टएडिट या "डिफॉल्ट्स" कमांड का उपयोग करके वरीयता फ़ाइल को संपादित करते हैं, तो इसका कार्यक्रम पर कोई प्रभाव नहीं पड़ेगा। इसके अलावा, सफारी अपनी प्राथमिकताओं को डिस्क पर वापस लिखते हैं, जो किसी भी परिवर्तित सेटिंग्स को अधिलेखित कर देगा।

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

अंत में, कई बारीकियों पर विचार करना है। उदाहरण के लिए, चूंकि सफारी को चलाते समय अपनी वरीयताओं को बदलने के लिए स्वयं का उपयोग करने की आवश्यकता होती है, ऐसा करने से यह सबसे महत्वपूर्ण अनुप्रयोग होगा, जहां यह तब तक रहेगा जब तक कि आपके पास पहली बार स्क्रिप्ट का पता नहीं है और सफारी में संशोधन होने पर इसे पुनर्स्थापित करें। पूर्ण हैं। इसके अतिरिक्त, आप नहीं चाहते हैं कि कोई भी यादृच्छिक ड्राइव संलग्न होने पर स्क्रिप्ट सक्रिय प्रोग्राम को चलाने और उसके चारों ओर स्वाइप करें।

इनकी वजह से, स्क्रिप्ट को निम्नलिखित पाँच विचारों को शामिल करना होगा:

  1. जब कोई नया ड्राइव संलग्न हो, तभी लॉन्च करें
  2. "डाउनलोड" (या कोई भी वांछित नाम) नामक ड्राइव संलग्न होने पर ही सेटिंग्स बदलें
  3. सफ़ारी वर्तमान में लॉन्च की गई है या नहीं, इस पर सेटिंग बदलने के लिए इसके दृष्टिकोण में सशर्त रहें
  4. यदि कोई नया वांछित डाउनलोड स्थान मौजूद है तो केवल सेटिंग्स बदलें
  5. सबसे महत्वपूर्ण अनुप्रयोग को पुनर्स्थापित करने की क्षमता है अगर स्क्रिप्ट को सफारी पर स्विच करने की आवश्यकता है

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

स्क्रिप्ट 1: मॉनिटरिंग ड्राइव के लिए LaunchAgent

सिस्टम स्क्रिप्टर के लिए बनाने के लिए पहली स्क्रिप्ट है, जिसे लॉन्च एजेंट कहा जाता है। इसे बनाने के लिए, टर्मिनल खोलें और निम्न कमांड टाइप करें (सरलता के लिए इसे कॉपी और पेस्ट करें):

टच ~ / लाइब्रेरी / LaunchAgents / local.ChangeSafariDownload.plist

जब यह हो जाए, तो इसे TextEdit में निम्न कमांड चलाकर खोलें:

खुला -e ~ / पुस्तकालय / LaunchAgents / local.ChangeSafariDownload.plist

अब आपके पास एक खाली TextEdit दस्तावेज़ खुला होना चाहिए, इसलिए इसमें निम्न पाठ की प्रतिलिपि बनाएँ और दस्तावेज़ को सहेजें, लेकिन इसे अभी के लिए खुला रखें। स्क्रिप्ट के स्थान को बदलने के लिए आपको "FILEPATH" अनुभाग को बदलना होगा:

 लेबल लोकल। चेंजसैफारीडाउनलोड्स क्यूडायरेक्टरीज वॉचपैथ / वॉल्यूम प्रोग्राम / यूएसआर / बिन / ऑसस्क्रिप्ट प्रोग्राम ऑर्ग्यूमेंट्स ऑस्क्रिप्‍ट FILEPATH 

जब आप लॉग इन करते हैं, तो यह स्क्रिप्ट सिस्टम लॉन्चर प्रक्रिया में लोड हो जाएगी और इसे सफारी की वरीयताओं को संपादित करने के लिए मुख्य स्क्रिप्ट चलाने के लिए शर्तें और निर्देश देगा। इस मामले में, लॉन्चर को डायरेक्टरी / वॉल्यूम देखने के लिए कहा जाएगा ताकि यह देखा जा सके कि उस डायरेक्टरी में कोई बदलाव हुआ है या नहीं। चूँकि यह वह जगह है जहाँ फाइलसिस्टम आरोहित होते हैं, कभी भी कोई ड्राइव जुड़ी होती है या सिस्टम से अलग हो जाती है जो चलाने के लिए मुख्य स्क्रिप्ट को ट्रिगर करेगी।

स्क्रिप्ट 2: सेटिंग्स बदलने के लिए AppleScript

दूसरी स्क्रिप्ट मुख्य है जो सभी क्रियाओं को करेगी, जिसमें ड्राइव नाम की जाँच करना, सफारी खुला है या नहीं, और वरीयताओं को बदलने के लिए कोई अन्य शर्तें शामिल हैं। इसे बनाने के लिए, / एप्लिकेशन / यूटिलिटीज / फ़ोल्डर पर जाएं और AppleScript एडिटर प्रोग्राम खोलें। एक रिक्त संपादक विंडो खुलेगी, और जब वह इसमें निम्न स्क्रिप्ट को कॉपी और पेस्ट करेगी:

- यहां डाउनलोड फ़ोल्डर के रूप में उपयोग करने के लिए वैकल्पिक ड्राइव नाम सेट करें

कन्वर्ट करने के लिए dlFolder सेट करें ("/ वॉल्यूम / डाउनलोड")

एप्लिकेशन "खोजक" बताएं

यदि मौजूद है [ POSIX फ़ाइल dlFolder] तब

- कुछ न करें और फ़ोल्डर का उपयोग करें

अन्य

- डिफ़ॉल्ट घर निर्देशिका के लिए dlFolder सेट करें

सेट करने के लिए dlFolder (POSIX पथ ( पाठ के रूप में घर फ़ोल्डर के लिए पथ )) और "डाउनलोड"

अगर अंत

अंत बताओ

- सफारी प्लिस्ट से वर्तमान मार्ग प्राप्त करें

कन्वर्ट करने के लिए currentpath सेट करें ( शेल स्क्रिप्ट करें "डिफॉल्ट पढ़ें com.apple.Safari डाउनलोडपैथ")

- परिवर्तन पथ केवल तभी चालू सेटिंग इनपुट पथ से मेल नहीं खाती (परिवर्तन के लिए कुछ है)

अगर ( पाठ के रूप में वर्तमान) बराबर नहीं है ( पाठ के रूप में dlFolder) तो

- यदि सफारी चल रही है, तो सफारी की वरीयताओं के माध्यम से सेटिंग्स बदलें

अगर appIsunning ("सफारी") तो

- स्क्रिप्ट होने पर उसे पुनर्स्थापित करने के लिए सबसे सामने वाले एप्लिकेशन को निर्धारित करें

टेक्स्ट के रूप में फ्रंटएस्ट एप्लिकेशन को पथ पर सेट करें

- क्लिपबोर्ड में डाउनलोड फ़ोल्डर पथ की प्रतिलिपि बनाएँ

टेक्स्ट के रूप में क्लिपबोर्ड को dlFolder पर सेट करें

अनुप्रयोग "सफारी" सक्रिय करें

एप्लिकेशन "सिस्टम इवेंट" को एप्लिकेशन प्रक्रिया "सफारी" बताने के लिए कहें

- प्राथमिकताएँ खोलें या सामने लाएँ (विंडो 1)

कीस्ट्रोक ", " {कमांड डाउन} का उपयोग करके

देरी 1 - खिड़की के प्रदर्शन में ठहराव के परिणामस्वरूप त्रुटि हो सकती है, इसलिए हम एक सेकंड इंतजार करते हैं

- जनरल टैब में बदलें

विंडो 1 के टूल बार 1 के बटन "सामान्य" पर क्लिक करें

- डाउनलोड स्थान को अन्य में बदलें

पॉप अप बटन बताएं "डाउनलोड की गई फ़ाइलें सहेजें:" समूह 1 के समूह 1 के विंडो "सामान्य"

क्लिक

मेनू 1 के मेनू आइटम "अन्य ..." पर क्लिक करें - तीन डॉट्स एक दीर्घवृत्त है, तीन अवधि नहीं

अंत बताओ

- "फ़ोल्डर में जाएं" संवाद बॉक्स खोलें

कीस्ट्रोके "जी" {शिफ्ट डाउन, कमांड डाउन} का उपयोग कर

- फोल्डर पाथ को लोकेशन फील्ड में पेस्ट करें

विंडो बताएं "फ़ोल्डर में जाएं"

कीस्ट्रोक "v" {कमांड डाउन} का उपयोग करके

कीस्ट्रोक वापसी

अंत बताओ

"जनरल" विंडो के शीट 1 के बटन "सिलेक्ट" पर क्लिक करें

- वरीयताओं को बंद करें

कीस्ट्रोक "w" {कमांड डाउन "का उपयोग करके

अंत बताओ

- नौकरी पूरी होने के बाद फ्रंटएस्ट एप्लिकेशन को पुनर्स्थापित करें

सक्रिय करने के लिए एप्लिकेशन frontApp बताओ

अन्य

- यदि सफारी नहीं चल रही है, तो वरीयताओं को बदलने के लिए डिफॉल्ट्स कमांड का उपयोग करें

शेल स्क्रिप्ट करते हैं ("डिफॉल्ट राइट्स कॉम.प्ले.सैफरी डाउनलोडपाथ" और dlFolder)

अगर अंत

अगर अंत

- घर पथ संदर्भों को पूर्ण पथों में बदलने का कार्य

कन्वर्टहोम (करेंट) पर

अगर करेंट में "~ /" है तो

AppleScript के पाठ आइटम सीमांकक के लिए पुराना डिलिमिटर सेट करें

AppleScript के पाठ आइटम को {"~ /"} पर वितरित करता है

करंटपथ के हर टेक्स्ट आइटम पर textPath सेट करें

AppleScript के टेक्स्ट आइटम को पुराने डिलिमिटर पर सेट करें

POSIX पथ ( पाठ के रूप में घर फ़ोल्डर के लिए पथ ) और textPath में आइटम 2 के लिए currentpath सेट करें

अगर अंत

वर्तमान करें

अंत कन्वर्टहोम

- अनुप्रयोग "appName" चल रहा है (इस मामले में, सफारी के लिए इस्तेमाल किया जाता है) की जाँच करने के लिए समारोह

appIsunning पर (appName)

एप्लिकेशन को "सिस्टम ईवेंट" ( प्रक्रियाओं का नाम) बताएं जिसमें ऐपनाम हो

अंत appIsRunning

स्क्रिप्ट का पाठ शुरू में बैंगनी होगा, लेकिन जब आप संकलन टूलबार बटन पर क्लिक करते हैं या यदि आप स्क्रिप्ट को सहेजते हैं, तो यह आपके द्वारा यहां देखी गई चीजों के समान रंगीन हो जाएगा। अपनी पसंद के स्थान पर "ChangeDownloads" जैसे नाम के साथ स्क्रिप्ट को सहेजें (आप इसे अपने दस्तावेज़ निर्देशिका में, या अपने उपयोगकर्ता लाइब्रेरी के भीतर "लिपियों" फ़ोल्डर में रख सकते हैं) और AppleScript संपादक को बंद कर सकते हैं।

अब एक नई टर्मिनल विंडो खोलें और उसमें नई बनी स्क्रिप्ट फाइल को ड्रैग करें। जब आप ऐसा करेंगे तो स्क्रिप्ट का पूरा फ़ाइल पथ विंडो में प्रवेश कर जाएगा, जो कुछ इस तरह दिखेगा "/User/username/Documents/ChangeDownloads.scpt।" माउस का उपयोग करके, संपूर्ण फ़ाइल पथ का चयन करें, क्लिपबोर्ड पर कॉपी करने के लिए कमांड-सी दबाएं और TextEdit में स्क्रिप्ट 1 पर वापस जाएं और अपने कॉपी किए गए पाठ के साथ "FILEPATH" प्रविष्टि को बदलें। फिर दस्तावेज़ को सहेजें और बंद करें।

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

ध्यान रखें कि जब यह स्क्रिप्ट काम करती है, तो इसका परीक्षण केवल OS X 10.6 "स्नो लेपर्ड" और OS X 10.7 "लायन" पर किया जा रहा है जो कि सफारी 5.1 है; हालाँकि, इसे कम से कम Safari 5.0 पर चलने वाले अन्य सिस्टम कॉन्फ़िगरेशन पर ठीक काम करना चाहिए। मुख्य आवश्यकताएं हैं जब स्क्रिप्ट कार्यक्रम के भीतर से सफारी की वरीयताओं में हेरफेर कर रही है, यह विभिन्न मेनू खोलने और स्क्रीन पर विभिन्न बटन क्लिक करने के लिए बटन इंडेक्स का उपयोग करती है। यदि भविष्य में Apple सफारी में वरीयताओं के संगठन को बदल देता है, तो स्क्रिप्ट का यह हिस्सा तब तक काम नहीं करेगा जब तक कि इसे फिर से उचित बटन को इंगित करने के लिए संपादित नहीं किया जाता है। हालाँकि, अभी के लिए यह एक सीमा है जिससे हमें निपटना होगा। लायन में इसके लिए एक समाधान यह है कि सफारी से बाहर निकलने के लिए एक स्क्रिप्ट में ऐप्पल के रिज्यूमे फ़ीचर का लाभ उठाया जाए, वरीयताओं में बदलाव किया जाए और फिर इंटरफ़ेस को प्रोग्राम करने के बजाय प्रोग्राम को रिलॉन्च किया जाए।

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

rm ~ / पुस्तकालय / LaunchAgents / local.ChangeSafariDownload.plist


 

अपनी टिप्पणी छोड़ दो