⌘C को दो बार न कर पाना खलता था, इसलिए मैंने macOS clipboard को 3 हिस्सों में बना दिया - DualClip
(github.com/RAKKUNN)नमस्ते! मैंने हाल ही में पहली बार macOS इस्तेमाल करना शुरू किया, और उसी दौरान बनाया गया अपना छोटा प्रोजेक्ट DualClip साझा कर रहा हूँ.
ऐसी पोस्ट लिखना भी मेरे लिए पहली बार है, इसलिए थोड़ा नर्वस हूँ. अगर वाक्य थोड़े अनगढ़ लगें तो कृपया समझिएगा 🙇
यह क्या है
यह बस एक छोटा menu bar app है, जो clipboard के 3 'slot' देता है.
Slot A → वही default clipboard (⌘C / ⌘V)
Slot B → ⌥⌘C / ⌥⌘V
Slot C → ⌃⌘C / ⌃⌘V
यह Paste या Maccy जैसी 'history' वाली पद्धति नहीं, बल्कि 'slot' वाली पद्धति है.
अक्सर इस्तेमाल होने वाले email या variable name जैसी चीज़ें B में रख दीजिए, और रोज़मर्रा का copy-paste पहले की तरह ⌘C/⌘V से करते रहिए.
इसे क्यों बनाया
Refactoring या translation का काम करते समय, अगर आप ⌘C बस एक बार और दबा दें तो पहले copy किया हुआ सीधा गायब हो जाता है.
दिन भर में यह छोटी-छोटी बात मिलकर काफ़ी stress देने लगती है.
मैंने history app भी इस्तेमाल करके देखे, लेकिन मुझे इनमें ये बातें खटकती थीं.
- popup खोलकर उसमें से चुनने की अतिरिक्त गति धीमी लगती है
- "अभी वाला नहीं, उससे पिछला" ढूँढना हो तो आखिरकार आँखों से देखना ही पड़ता है
- मुझे तो बस ⌥⌘V दबाते ही वही तुरंत paste हो जाना चाहिए था
इसलिए मैंने ढेर सारे features जोड़ने के बजाय बस एक पंक्ति का concept रखा: "slot में रखो और shortcut से निकालो".
बनाते समय सबसे मज़ेदार हिस्सा (Atomic Paste)
यह उम्मीद से ज़्यादा पेचीदा था, क्योंकि macOS में ⌘V हमेशा सिर्फ system pasteboard को ही पढ़ता है.
इसलिए Slot B को paste करने के लिए system clipboard को थोड़ी देर के लिए overwrite करना पड़ता है, लेकिन ऐसा करते ही जो चीज़ आपने मूल रूप से ⌘C से copy की थी, वही उड़ जाती है.
इसे कैसे सुलझाऊँ, इस पर मैंने काफ़ी देर सोचा.
आख़िरकार इसे मैंने इस क्रम में काम करने लायक बनाया.
- मौजूदा system clipboard का पहले backup (सभी types की deep copy)
- उसे Slot B की सामग्री से overwrite करना
- CGEvent से ⌘V simulate करना
- 150ms बाद backup किए गए मूल clipboard को फिर restore करना
पूरा cycle 150ms के अंदर खत्म हो जाता है, इसलिए इस्तेमाल करने वाले को यह महसूस ही नहीं होता कि "⌘C से copy की हुई चीज़ एक पल के लिए गायब हुई थी".
मैं इसे अपने मन में 'Atomic Paste' कहता हूँ...(नाम रखकर खुद ही खुश हो गया था 😅).
थोड़ी देर के लिए polling रोकना और changeCount को ignore कराने की timing मिलाना ही सबसे ज़्यादा समय लेने वाला हिस्सा था.
"Slot A, Slot B की सामग्री में क्यों बदल रहा है...?" कहते हुए मैं काफ़ी देर तक उलझा रहा.
इसके अलावा कुछ छोटी-छोटी बातें:
- text/image/file/RTF सबका समर्थन (NSPasteboardItem deep copy)
- password field में बिल्कुल काम नहीं करता (IsSecureEventInputEnabled check)
- app बंद करते समय slot memory zero-fill (memset_s)
- सारे shortcuts बदले जा सकते हैं (sindresorhus/KeyboardShortcuts की बदौलत)
privacy के बारे में
clipboard app संवेदनशील data संभालते हैं, इसलिए इस हिस्से पर मैंने खास ध्यान दिया.
- disk पर कुछ भी नहीं लिखता. सब कुछ सिर्फ RAM में.
- network code है ही नहीं. update check या telemetry भी नहीं.
- यह MIT open source है, चाहें तो खुद देखकर जाँच सकते हैं.
अगर आज़माना चाहें
Homebrew शायद सबसे आसान रहेगा.
brew install RAKKUNN/tap/dualclip
या फिर GitHub Releases से zip डाउनलोड करके उसे /Applications में डाल सकते हैं.
यह Apple notarization वाला build है, इसलिए पहली बार चलाने पर warning dialog नहीं आएगा.
GitHub: https://github.com/RAKKUNN/DualClip
आवश्यकताएँ: macOS 13+ (Apple Silicon), accessibility permission
यह मेरा पहला macOS app है, इसलिए यक़ीनन इसमें अभी कई अनगढ़ हिस्से होंगे.
"इसे ऐसे करना बेहतर होगा" या "यहाँ error आ रहा है" जैसी feedback मिल जाए तो मैं सच में बहुत आभारी रहूँगा और सीखूँगा.
बेझिझक comment छोड़िए!
आप सबका दिन शानदार रहे!!
4 टिप्पणियां
Windows के लिए clipboard management प्रोग्राम
dittoभी आपके implementation जैसा ही काम करता है.उसे参考 करके सुधार की दिशा तय करने में मदद मिल सकती है~
जानकारी के लिए धन्यवाद!🙇🙇
मैं एक बार देखूँगा और चुनिंदा रूप से अपनाने पर विचार करूँगा!
लगता है कि Clipy की तरह storage फीचर भी बना दें तो अच्छा होगा
क्या आपको history और snippet में से किसी एक की ज़रूरत है?
लेकिन history, DualClip की दिशा के अनुरूप नहीं है।
इसे जितना हो सके हल्का और सुविधाजनक बनाने की कोशिश कर रहा हूँ।
फ़ीडबैक के लिए धन्यवाद।