macOS Tahoe में क्लिपबोर्ड असल में कैसे काम करता है

macOS Tahoe में क्लिपबोर्ड असल में कैसे काम करता है

संक्षिप्त उत्तर: macOS का क्लिपबोर्ड एक सिस्टम-वाइड सर्विस है जिसे पेस्टबोर्ड कहते हैं। जब आप कॉपी करते हैं, तो सोर्स ऐप सिस्टम को एक ही कंटेंट के एक या अधिक रूप (प्लेन टेक्स्ट, रिच टेक्स्ट, इमेज, फ़ाइल रेफ़रेंस) सौंपता है और एक काउंटर बढ़ जाता है। पेस्ट करते समय डेस्टिनेशन ऐप वह सबसे समृद्ध फ़ॉर्मैट चुनता है जिसे वह समझ सकता है। Tahoe यही मॉडल बरकरार रखता है, Spotlight में बिल्ट-इन क्लिपबोर्ड हिस्ट्री जोड़ता है, और बैकग्राउंड में क्लिपबोर्ड पढ़ने वाले ऐप्स के आसपास प्राइवेसी को और कसता है।

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

macOS में क्लिपबोर्ड क्या है?

तकनीकी रूप से क्लिपबोर्ड असल में जनरल पेस्टबोर्ड है, यानी एक साझा सिस्टम सर्विस जिस तक ऐप्स NSPasteboard API के ज़रिए पहुँचते हैं। यह कोई फ़ाइल या दिखने वाला ऐप नहीं है। यह एक समय में केवल एक मौजूदा «आइटम सेट» रखता है, और दोबारा कॉपी करने पर वह बदल जाता है। «पेस्टबोर्ड» नाम की वजह से ही आपको pbcopy और pbpaste जैसे टर्मिनल टूल्स में pb दिखता है।

आगे की हर बात के लिए दो बातें ज़रूरी हैं:

  • यह एक समय में एक ही चीज़ रखता है। macOS ने जनरल पेस्टबोर्ड के लिए कभी नेटिव मल्टी-आइटम हिस्ट्री नहीं रखी, जैसी Windows की ⊞V रखती है। हिस्ट्री ऊपर से जोड़ी गई चीज़ है। Tahoe का Spotlight फ़ीचर इस दिशा में Apple का पहला सिस्टम-लेवल प्रयास है (नीचे देखें)।
  • एक कॉपी असल में कई कॉपियाँ होती है। एक ⌘C एक ही कंटेंट के कई रूप एक साथ पेस्टबोर्ड पर रख सकता है।

⌘C दबाने पर क्या होता है?

  1. ऐप पेस्टबोर्ड पर दावा करता है। वह पुराना कंटेंट साफ़ करता है और घोषणा करता है कि वह क्या-क्या देगा। इसी क्षण पेस्टबोर्ड का चेंज काउंट (एक पूर्णांक) एक से बढ़ जाता है।
  2. ऐप कई टाइप ऑफ़र करता है। हर टाइप की पहचान एक Uniform Type Identifier (UTI) से होती है, वही सिस्टम जो फ़ाइल टाइप पहचानता है।
  3. डेटा लेज़ी तरीके से दिया जा सकता है। ऐप किसी फ़ॉर्मैट का वादा कर सकता है और असली बाइट्स तभी बनाता है जब कोई सच में पेस्ट करे। इससे बड़ी कॉपियाँ (बड़ी इमेज, स्प्रेडशीट की सेल रेंज) ज़रूरत पड़ने तक सस्ती रहती हैं।

अलग-अलग ऐप्स में पेस्ट करने पर अलग नतीजे क्यों मिलते हैं?

क्योंकि चुनाव डेस्टिनेशन करता है। Safari से कोई स्टाइल्ड पैराग्राफ़ कॉपी करें, तो पेस्टबोर्ड पर एक साथ कई वर्शन हो सकते हैं:

रूप (Representation) आम टाइप आइडेंटिफ़ायर इसे कौन चुनता है
प्लेन टेक्स्ट public.utf8-plain-text टर्मिनल, कोड एडिटर, सर्च फ़ील्ड
रिच टेक्स्ट public.rtf TextEdit, Pages, Mail
HTML public.html वेब एडिटर, Notes, रिच-टेक्स्ट फ़ील्ड
इमेज public.png / public.tiff Preview, Keynote, डिज़ाइन टूल्स
फ़ाइल रेफ़रेंस public.file-url Finder, Mail अटैचमेंट, चैट ऐप्स

कोड एडिटर प्लेन टेक्स्ट उठाता है और HTML को अनदेखा कर देता है, इसलिए स्टाइलिंग ग़ायब हो जाती है। Notes HTML उठाता है और उसे बनाए रखता है। इनमें से कोई भी बग नहीं है। इसी वजह से ⌥⇧⌘V (Paste and Match Style) मौजूद है: यह डेस्टिनेशन से कहता है कि वह प्लेन-टेक्स्ट रूप को प्राथमिकता दे और अपनी लोकल फ़ॉर्मैटिंग लगाए।

टर्मिनल में खुद देखिए

इसे आँख मूँदकर मानने की ज़रूरत नहीं। कुछ कॉपी कीजिए, फिर चलाइए:

osascript -e 'clipboard info'

यह क्लिपबोर्ड पर मौजूद हर टाइप को उसके साइज़ (बाइट्स में) के साथ प्रिंट करता है। Numbers से सेल रेंज कॉपी करें, फिर किसी वेब पेज से पैराग्राफ़, और दोनों सूचियों की तुलना करें। यही अंतर पूरी कहानी है कि अलग-अलग ऐप्स में पेस्ट अलग क्यों बर्ताव करता है। टेक्स्ट वर्शन के लिए pbpaste उसे प्रिंट करता है, और echo "hello" | pbcopy उसमें लिखता है।

Mac को कैसे पता चलता है कि क्लिपबोर्ड बदला?

ज़्यादातर मामलों में वह किसी को बताता ही नहीं। सार्वजनिक रूप से दस्तावेज़ीकृत API की बात करें तो NSPasteboard में «क्लिपबोर्ड बदला» जैसी कोई नोटिफ़िकेशन नहीं है। जिन ऐप्स को इसकी परवाह है, यानी हर क्लिपबोर्ड मैनेजर, वे एक छोटे टाइमर पर चेंज काउंट को पोल करते हैं और नंबर बदलने पर ही कंटेंट पढ़ते हैं। यह सस्ता है, क्योंकि एक पूर्णांक पढ़ने में लगभग कुछ खर्च नहीं होता।

इसके व्यावहारिक नतीजे हैं:

  • हिस्ट्री ऐप वह कुछ नहीं देख सकता जो उसके न चलने के दौरान कॉपी हुआ।
  • अगर दो कॉपी पोल इंटरवल से भी तेज़ हो जाएँ, तो पहली छूट सकती है। Maccy का पोलिंग इंटरवल उसकी सेटिंग्स में बदला जा सकता है ।
  • जब कोई ऐप वही कंटेंट दोबारा लिखता है, तब भी चेंज काउंट बढ़ता है। इसीलिए हिस्ट्री टूल को अपना डी-डुप्लिकेशन खुद करना पड़ता है।

Tahoe में नया क्या है?

Spotlight में क्लिपबोर्ड हिस्ट्री

इस विषय पर Tahoe का सबसे बड़ा बदलाव यह है कि Spotlight में एक Clipboard व्यू जुड़ा है। Spotlight खोलकर उस पर स्विच करें (Spotlight की नई श्रेणियों के लिए Apple के शॉर्टकट सेट में क्लिपबोर्ड ⌘4 पर है ) और आप हाल की कॉपियाँ ब्राउज़ करके उनमें से कोई वापस पेस्ट कर सकते हैं। Apple इस हिस्ट्री को अल्पकालिक बताता है, जो सिर्फ़ लगभग आठ घंटे पीछे तक जाती है ।

इससे Spotlight «एक घंटे पहले जो कॉपी किया था» वाला एक ठीक-ठाक सेफ़्टी नेट बन जाता है। अपने बताए डिज़ाइन के हिसाब से यह लंबे समय का आर्काइव नहीं है: हफ़्ते भर पुराने स्निपेट नहीं, पिन किए हुए फ़ेवरेट नहीं, और समर्पित टूल्स जैसे पर-ऐप इग्नोर नियम भी नहीं ।

क्लिपबोर्ड रीड के आसपास सख़्त प्राइवेसी

Apple प्रोग्रामैटिक क्लिपबोर्ड रीड को यूज़र के लिए दिखाई देने वाला बनाने की ओर बढ़ रहा है। इसकी नींव डेवलपर्स के लिए नए पेस्टबोर्ड एक्सेस-बिहेवियर API के रूप में आई थी, और दिशा यह है कि जब कोई ऐप यूज़र के पेस्ट एक्शन के बिना क्लिपबोर्ड पढ़े, तो iOS जैसा प्रॉम्प्ट आए। Tahoe सामान्य थर्ड-पार्टी ऐप्स पर इसे कितनी सख़्ती से लागू करता है, और यूज़र को कौन-सी सेटिंग दिखती है, ये बातें मैं किसी Tahoe मशीन पर जाँचने के बाद ही भरोसे लायक मानूँगा । क्लिपबोर्ड मैनेजर्स के लिए यह मायने रखता है क्योंकि उनका पूरा काम ही बैकग्राउंड में क्लिपबोर्ड पढ़ना है, इसलिए Tahoe पर परमिशन के बारे में हर ऐप का दस्तावेज़ ज़रूर देखें।

क्या क्लिपबोर्ड मेरे Mac और iPhone के बीच सिंक होता है?

हाँ, Universal Clipboard के ज़रिए। यह Continuity का हिस्सा है: दोनों डिवाइसों पर एक ही Apple Account से साइन इन करें, Handoff चालू करें, Bluetooth और Wi-Fi ऑन रखें, और डिवाइस पास-पास रखें। एक डिवाइस पर कॉपी करें, दूसरे पर पेस्ट करें। ट्रांसफ़र किया गया कंटेंट सिर्फ़ थोड़ी देर के लिए उपलब्ध रहता है, यानी यह हैंडऑफ़ की तरह काम करता है, सिंक की हुई हिस्ट्री की तरह नहीं। यह भी सिंगल-आइटम है: हर नई कॉपी पिछली को बदल देती है।

अगर यह काम करना बंद कर दे, तो आम कारण हैं Handoff का बंद होना, Bluetooth का डिसेबल होना, या डिवाइसों का अलग-अलग Apple Account पर होना। Handoff को बंद करके दोबारा चालू करना पहला पुराना आज़माया हुआ उपाय है।

क्या प्राइवेट रहता है और क्या नहीं?

क्लिपबोर्ड को हर वह ऐप पढ़ सकता है जिसे इसकी अनुमति है। हर कॉपी की अपनी एन्क्रिप्शन नहीं होती। इसलिए कम्युनिटी ने एक कन्वेंशन बनाई: संवेदनशील डेटा कॉपी करने वाले ऐप्स उसे विशेष पेस्टबोर्ड टाइप से मार्क करते हैं, जो nspasteboard.org पर दस्तावेज़ित हैं, जैसे org.nspasteboard.ConcealedType (पासवर्ड) और org.nspasteboard.TransientType (अल्पकालिक कंटेंट)। पासवर्ड मैनेजर आमतौर पर इन्हें सेट करते हैं, और अच्छे व्यवहार वाले क्लिपबोर्ड मैनेजर इन्हें वहन करने वाली किसी भी चीज़ को छोड़ देते हैं।

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

नेटिव क्लिपबोर्ड बनाम क्लिपबोर्ड मैनेजर

बिल्ट-इन क्लिपबोर्ड (पेस्टबोर्ड) Spotlight हिस्ट्री (Tahoe) समर्पित मैनेजर (जैसे Maccy)
रखे गए आइटम एक सिर्फ़ हाल के आइटम, लगभग कुछ घंटे कॉन्फ़िगर करने योग्य हिस्ट्री
सर्च नहीं Spotlight के ज़रिए हाँ, टाइप करके फ़िल्टर करें
संवेदनशील ऐप्स/टाइप्स इग्नोर करना लागू नहीं हाँ
डिस्क पर स्टोर नहीं आपके Mac पर लोकली
क़ीमत शामिल शामिल Maccy: मुफ़्त और ओपन सोर्स

अगर आपको सिर्फ़ कभी-कभार कोई हाल की कॉपी वापस चाहिए, तो Spotlight की हिस्ट्री शायद काफ़ी है। अगर आप रोज़ स्निपेट के एक ही सेट से पेस्ट करते हैं, या संवेदनशील ऐप्स का बहिष्कार और लंबी हिस्ट्री चाहते हैं, तो समर्पित मैनेजर अपनी जगह कमाता है। Maccy App मेन्यू बार से चलता है, डिफ़ॉल्ट रूप से ⇧⌘C से खुलता है, और कीबोर्ड-फ़र्स्ट फ़िल्टरिंग के इर्द-गिर्द बना है । आप जो भी रास्ता चुनें, ऊपर की सारी बातें लागू रहती हैं, क्योंकि हर टूल उसी पेस्टबोर्ड के ऊपर बैठा है।

ट्रबलशूटिंग: जब क्लिपबोर्ड गड़बड़ करे

  • पेस्ट कुछ नहीं करता या पुराना कंटेंट पेस्ट करता है। स्टेट रीसेट करने के लिए किसी प्लेन टेक्स्ट फ़ील्ड से कोई मामूली चीज़ कॉपी करें, फिर दोबारा कोशिश करें। अगर समस्या बनी रहे, तो जिस ऐप में पेस्ट कर रहे हैं उसे रीस्टार्ट करें।
  • फ़ॉर्मैटिंग पीछा नहीं छोड़ती। Paste and Match Style (⌥⇧⌘V) इस्तेमाल करें।
  • फ़ाइल कॉपी की, पाथ मिला (या उल्टा)। ऐप वह रूप नहीं चुन रहा जिसकी आप उम्मीद कर रहे थे। osascript -e 'clipboard info' से जाँचें कि क्लिपबोर्ड पर क्या है।
  • Universal Clipboard अस्थिर है। पक्का करें कि Apple Account वही है, Handoff चालू है, और Bluetooth व Wi-Fi ऑन हैं।
  • आख़िरी उपाय। लॉग आउट करके दोबारा लॉग इन करें, या रीस्टार्ट करें। पेस्टबोर्ड सर्विस सिस्टम मैनेज करता है और आपके सेशन के साथ फिर से शुरू हो जाती है।

याद रखने लायक मानसिक मॉडल

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

कौन-सा पेस्ट सरप्राइज़ आपको सबसे ज़्यादा परेशान करता है: खोई हुई फ़ॉर्मैटिंग, खोई हुई हिस्ट्री, या कुछ और? हमें बताइए, हो सकता है वही अगली गाइड बन जाए।



Игорь Балькин
Автор: Игорь Балькин. Веб-разработчик с 2001 года. Разработчик сайтов на WordPress, CRM и веб-приложений. Минск, Беларусь. Контактная информация.