Maccy + Hammerspoon: macOS पर अपने क्लिपबोर्ड वर्कफ़्लो को स्क्रिप्ट करें

Maccy + Hammerspoon: macOS पर अपने क्लिपबोर्ड वर्कफ़्लो को स्क्रिप्ट करें

Maccy में कोई स्क्रिप्टिंग API नहीं है, इसलिए इसे Hammerspoon के साथ जोड़ा जाता है। Maccy App आपकी क्लिपबोर्ड हिस्ट्री को स्टोर और सर्च करता है। Hammerspoon macOS के लिए एक मुफ़्त Lua ऑटोमेशन टूल है, जो क्लिपबोर्ड का कंटेंट बदल सकता है, क्लिपबोर्ड को छुए बिना टेक्स्ट टाइप कर सकता है और कस्टम हॉटकी से Maccy Mac को ट्रिगर कर सकता है। दोनों मिलकर किसी भारी टूल के बिना ज़्यादातर क्लिपबोर्ड ऑटोमेशन संभाल लेते हैं।

दोनों को साथ क्यों इस्तेमाल करें?

Maccy Clipboard जानबूझकर छोटा रखा गया है: मेन्यू-बार पॉपअप, तेज़ सर्च, पिन और एक ignore लिस्ट। मेरी जानकारी में इसमें कोई AppleScript डिक्शनरी, CLI या URL-स्कीम API नहीं है । लोकल-फ़र्स्ट और प्राइवेसी-केंद्रित टूल के लिए यह अच्छी बात है, लेकिन इसका मतलब है कि कोई भी शर्त वाला काम (“ट्रैकिंग पैरामीटर हटाओ, फिर पेस्ट करो”) कहीं और से करना पड़ेगा।

Hammerspoon इसके लिए ठीक बैठता है, क्योंकि यह ओपन सोर्स है, लोकल चलता है और macOS के pasteboard और कीबोर्ड API से सीधे बात करता है। दोनों को Homebrew से इंस्टॉल करें:

brew install --cask maccy hammerspoon

इसके बाद System Settings → Privacy & Security → Accessibility में Hammerspoon को अनुमति दें। इसके बिना कीस्ट्रोक वाली कोई भी रेसिपी काम नहीं करेगी। आपका कॉन्फ़िग ~/.hammerspoon/init.lua में रहता है। उसे Hammerspoon के मेन्यू-बार आइकन से या hs.reload() चलाकर रीलोड करें।

कौन सा टूल किस काम में बेहतर है?

काम सिर्फ़ Maccy Hammerspoon चाहिए
हिस्ट्री आइटम सर्च, पिन और पेस्ट करना हाँ नहीं
Maccy की पॉपअप हॉटकी बदलना हाँ (Settings → General) नहीं
कुछ ऐप्स या कंटेंट टाइप को स्किप करना हाँ (Settings → Ignore) नहीं
पेस्ट से पहले क्लिपबोर्ड टेक्स्ट बदलना नहीं हाँ
क्लिपबोर्ड इस्तेमाल किए बिना स्निपेट टाइप करना नहीं हाँ
एक टाइमआउट के बाद क्लिपबोर्ड अपने-आप साफ़ करना नहीं हाँ
स्क्रिप्ट से हिस्ट्री की कोई एक एंट्री डिलीट करना नहीं भरोसेमंद ढंग से नहीं

मोटा नियम: अगर Maccy में उस काम की सेटिंग मौजूद है, तो सेटिंग ही इस्तेमाल करें। Lua तभी उठाएँ जब लॉजिक ऐसा हो जो Maccy व्यक्त न कर सके।

रेसिपी 1: कस्टम हॉटकी से Maccy कैसे खोलें?

सिर्फ़ शॉर्टकट बदलना हो तो Hammerspoon की ज़रूरत नहीं है। Maccy → Settings → General में पॉपअप शॉर्टकट सेट कर लें। Hammerspoon तभी काम का है जब ट्रिगर किसी शर्त पर निर्भर हो, जैसे हर ऐप के लिए अलग शॉर्टकट। Maccy का डिफ़ॉल्ट ⇧⌘C है —, और Hammerspoon उसे फ़ायर कर सकता है:

local hyper = {"ctrl", "alt", "cmd"}

hs.hotkey.bind(hyper, "v", function()
  hs.eventtap.keyStroke({"shift", "cmd"}, "c")
end)

इसे अपनी मशीन पर टेस्ट करें: सिंथेटिक की-इवेंट हर ऐप की ग्लोबल हॉटकी को ट्रिगर नहीं करते । साथ ही दोनों टूल में एक ही कॉम्बिनेशन कभी बाइंड न करें, क्योंकि जो पहले रजिस्टर होगा वही चलेगा और दूसरा चुपचाप कुछ नहीं करेगा।

रेसिपी 2: URL पेस्ट करने से पहले ट्रैकिंग पैरामीटर कैसे हटाएँ?

यह सबसे क्लासिक उपयोग है। utm_* से भरा लिंक कॉपी करें, हॉटकी दबाएँ और साफ़ वर्शन पेस्ट करें।

local function stripTracking(url)
  for _ = 1, 3 do  -- repeat: adjacent params overlap in a single pass
    url = url:gsub("([?&])utm_[%w_]+=[^&#]*&?", "%1")
    url = url:gsub("([?&])fbclid=[^&#]*&?", "%1")
  end
  url = url:gsub("[?&]$", "")
  return url
end

hs.hotkey.bind({"ctrl", "alt", "cmd"}, "u", function()
  local clip = hs.pasteboard.getContents()
  if not clip or not clip:match("^https?://%S+$") then
    hs.alert.show("Clipboard isn't a single URL")
    return
  end
  hs.pasteboard.setContents(stripTracking(clip))
  hs.timer.doAfter(0.05, function()


    hs.eventtap.keyStroke({"cmd"}, "v")
  end)
end)

50 ms की देरी ज़रूरी है। pasteboard पर लिखते ही उसी पल पेस्ट करने से पुराना कंटेंट पेस्ट हो सकता है। ध्यान रखें कि साफ़ किया हुआ URL Maccy में मूल URL के बगल में एक नई एंट्री के रूप में दिखेगा। अगर यह खटकता है तो रेसिपी 5 देखें।

रेसिपी 3: क्लिपबोर्ड हिस्ट्री गंदी किए बिना स्निपेट कैसे पेस्ट करें?

क्लिपबोर्ड का इस्तेमाल ही मत कीजिए। hs.eventtap.keyStrokes अक्षरों को ऐसे टाइप करता है जैसे आपने खुद दबाए हों, इसलिए Maccy को इनकी भनक तक नहीं लगती:

hs.hotkey.bind({"ctrl", "alt", "cmd"}, "e", function()
  hs.eventtap.keyStrokes("you@example.com")
end)

असली इस्तेमाल से मिली सीमाएँ: लंबी स्ट्रिंग के लिए टाइपिंग पेस्ट से धीमी है, non-ASCII अक्षर और कुछ इनपुट मेथड गड़बड़ कर सकते हैं —, और पासवर्ड बॉक्स जैसे secure input फ़ील्ड में यह कुछ नहीं करता, क्योंकि वहाँ macOS सिंथेटिक कीस्ट्रोक ब्लॉक कर देता है।

रेसिपी 4: क्लिपबोर्ड पर मौजूद JSON को pretty-print कैसे करें?

hs.hotkey.bind({"ctrl", "alt", "cmd"}, "j", function()
  local ok, data = pcall(hs.json.decode, hs.pasteboard.getContents() or "")
  if ok and data then
    hs.pasteboard.setContents(hs.json.encode(data, true))
    hs.alert.show("JSON prettified")
  else
    hs.alert.show("Clipboard isn't valid JSON")
  end
end)

एक ईमानदार सीमा: Lua टेबल unordered होती हैं, इसलिए की (keys) उस क्रम में वापस नहीं आतीं जिसमें आपने कॉपी की थीं। जहाँ क्रम मायने रखता हो, वहाँ hs.task से jq को शेल-आउट करें।

रेसिपी 5: Hammerspoon की लिखावट से Maccy को भरने से कैसे रोकें?

कई क्लिपबोर्ड टूल “transient” pasteboard टाइप को मानते हैं। यह एक कन्वेंशन है, जो मैनेजर्स को बताती है कि इस आइटम को स्किप करना है। Maccy में ignored टाइप्स की एक डिफ़ॉल्ट लिस्ट आती है, और आप उसे Settings → Ignore में बढ़ा सकते हैं —। वहाँ org.nspasteboard.TransientType जोड़ें, फिर अपनी लिखावट को टैग करें:

hs.pasteboard.setContents(cleaned)
hs.pasteboard.writeDataForUTI(nil, "org.nspasteboard.TransientType", "", true)  -- 

इसे एक प्रयोग मानें। भरोसा करने से पहले Maccy में जाँच लें कि आइटम सचमुच स्किप हो रहा है।

रेसिपी 6: क्या क्लिपबोर्ड से सीक्रेट अपने-आप साफ़ किए जा सकते हैं?

आंशिक रूप से। एक pasteboard watcher API-key जैसी दिखने वाली स्ट्रिंग पहचान सकता है और 30 सेकंड बाद क्लिपबोर्ड साफ़ कर सकता है:

local function looksSecret(s)
  if #s < 20 or s:find("%s") then return false end
  return s:match("^sk%-[%w_%-]+$") or s:match("^AKIA[%u%d]+$") or s:match("^ghp_%w+$")
end

local clearTimer
clipWatcher = hs.pasteboard.watcher.new(function(content)  -- keep this global, or it gets garbage-collected
  if type(content) == "string" and looksSecret(content) then
    if clearTimer then clearTimer:stop() end
    local count = hs.pasteboard.changeCount()
    clearTimer = hs.timer.doAfter(30, function()
      if hs.pasteboard.changeCount() == count then
        hs.pasteboard.clearContents()
      end
    end)
  end
end)
clipWatcher:start()

सबसे अहम बात इसकी सीमा है: आपका watcher फ़ायर होने तक Maccy सीक्रेट को पहले ही स्टोर कर चुका होता है। सिस्टम क्लिपबोर्ड साफ़ करने से Maccy की हिस्ट्री पर कोई असर नहीं पड़ता। सीक्रेट्स के लिए Maccy की Ignore सेटिंग्स में एक ignore रूल जोड़ें, चाहे सोर्स ऐप (आपका पासवर्ड मैनेजर) के आधार पर या किसी पैटर्न के आधार पर, ताकि वे कभी स्टोर ही न हों। Hammerspoon को सिर्फ़ दूसरी सुरक्षा परत की तरह इस्तेमाल करें। अपने Hammerspoon वर्शन पर watcher callback का आर्गुमेंट जाँच लें ।

आमतौर पर क्या गड़बड़ होती है?

लक्षण संभावित कारण समाधान
हॉटकी कुछ नहीं करतीं Accessibility अनुमति नहीं है Privacy & Security में Hammerspoon दोबारा चालू करें और उसे रीस्टार्ट करें
पुराना क्लिपबोर्ड कंटेंट पेस्ट हो रहा है लिखने और ⌘V के बीच कोई देरी नहीं पेस्ट को hs.timer.doAfter(0.05, …) में रैप करें
कुछ समय बाद watcher फ़ायर होना बंद कर देता है Watcher ऑब्जेक्ट garbage-collect हो गया उसे ग्लोबल वेरिएबल में रखें
शॉर्टकट सिर्फ़ एक ऐप में चलता है उस ऐप की अपनी बाइंडिंग से टकराव hyper-key कॉम्बो चुनें (⌃⌥⌘ + कोई अक्षर)
किसी फ़ील्ड में कुछ टाइप नहीं होता Secure input चालू है यह अपेक्षित है; macOS इसे डिज़ाइन से ही ब्लॉक करता है

Pasteboard watching पर प्राइवेसी नोट

हाल के macOS रिलीज़ उपयोगकर्ताओं को यह बताने की दिशा में बढ़ रहे हैं कि कौन सा ऐप pasteboard पढ़ रहा है —। Watcher स्क्रिप्ट आपकी कॉपी की हर चीज़ पढ़ती है, इसलिए अपना Lua कोड लोकल रखें, क्लिपबोर्ड का कंटेंट कभी डिस्क पर लॉग न करें, और इंटरनेट से कॉपी किया कोई भी कॉन्फ़िग चलाने से पहले उसे ध्यान से पढ़ लें।

आगे कहाँ जाएँ?

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

Maccy मुफ़्त और ओपन सोर्स है; इसे maccy.app से डाउनलोड करें।

Similar Posts

  • Maccy Image Clipboard Support Explained: What Gets Saved, Shown and Pasted

    Yes, Maccy saves images you copy on macOS. Screenshots copied to the clipboard, images copied from browsers and design apps, and pictures from Preview all land in your history as thumbnails, and you can paste them back into any app that accepts images. It is controlled by one checkbox in Settings → Storage, and it…

  • Maccy mit iPhone und iPad: So funktioniert der geräteübergreifende Zwischenablage-Workflow wirklich

    Maccy mit iPhone und iPad: So funktioniert der geräteübergreifende Zwischenablage-Workflow wirklich Kurz gesagt: Maccy läuft ausschließlich unter macOS, eine Maccy App-App für iPhone oder iPad gibt es nicht. Die Universelle Zwischenablage von Apple überträgt aber alles, was du auf dem iPhone oder iPad kopierst, in die Zwischenablage deines Macs, und Maccy Mac zeichnet es dort…

  • Maccy × Hammerspoon:macOSのクリップボード操作をスクリプトで自動化する

    Maccy × Hammerspoon:macOSのクリップボード操作をスクリプトで自動化する Maccy自体にはスクリプト用のAPIがないので、Hammerspoonと組み合わせて使います。Maccy Appはクリップボード履歴の保存と検索を担当し、macOS向けの無料Lua自動化ツールであるHammerspoonが、クリップボード内容の書き換え、クリップボードを経由しないテキスト入力、独自ホットキーからのMaccy Mac呼び出しを担当します。この2つを組み合わせれば、より大がかりなツールを入れなくても、クリップボード周りの自動化のほとんどをカバーできます。 結論(TL;DR) Maccyは「履歴」、Hammerspoonは「ロジック」です。お互いの役割を相手に期待しないのがコツです。 実際の処理は Hammerspoon の hs.pasteboard、hs.eventtap、hs.hotkey の各モジュールが行います。以下のレシピはどれも5〜15行程度です。 Hammerspoonがクリップボードに書き込んだ内容は、transient(一時的)としてマークするか無視設定にしない限り、Maccyの履歴にも残ります。 Hammerspoonから、Maccyに保存済みの項目だけを後から確実に削除することはできません。保存そのものを防ぎたい場合は、Maccyの「無視(Ignore)」設定を使ってください。 そもそもなぜ組み合わせるのか? Maccy Clipboardは意図的にシンプルに作られています。メニューバーのポップアップ、高速な検索、ピン留め、無視リストが主な機能です。私の知る限り、AppleScript辞書、CLI、URLスキームのいずれのAPIも公開されていません 。ローカルファーストでプライバシーを重視するツールとしては妥当な設計ですが、「トラッキングパラメータを除去してからペースト」のような条件付きの処理は、別の場所で行う必要があるということでもあります。 Hammerspoonが向いているのは、オープンソースでローカルで動作し、macOSのペーストボードやキーボードのAPIを直接扱えるからです。どちらもHomebrewでインストールできます。 brew install –cask maccy hammerspoon 続いて、システム設定 → プライバシーとセキュリティ → アクセシビリティでHammerspoonを許可します。これがないと、キー入力系のレシピはすべて動きません。設定ファイルは ~/.hammerspoon/init.lua にあり、メニューバーのHammerspoonアイコンから、または hs.reload() でリロードできます。 それぞれの得意分野は? やりたいこと Maccyだけで可能か Hammerspoonが必要か 履歴の検索、ピン留め、ペースト 可能 不要 Maccyのポップアップ用ホットキーの変更 可能(設定 → 一般) 不要 特定のアプリやコンテンツタイプを記録しない 可能(設定 → 無視) 不要 ペースト前にクリップボードのテキストを書き換える 不可 必要 クリップボードを使わずにスニペットを入力する…

  • Maccy y las imágenes del portapapeles: qué se guarda, qué se muestra y qué se pega

    Sí, Maccy guarda las imágenes que copias en macOS. Las capturas de pantalla enviadas al portapapeles, las imágenes copiadas desde el navegador o desde apps de diseño y las fotos de Vista Previa acaban en tu historial como miniaturas, y puedes volver a pegarlas en cualquier app que acepte imágenes. Todo depende de una casilla…

  • Maccy + Hammerspoon: Deinen Clipboard-Workflow unter macOS skripten

    Maccy + Hammerspoon: Deinen Clipboard-Workflow unter macOS skripten Maccy hat keine Skript-API, deshalb kombinierst du es mit Hammerspoon. Maccy App speichert und durchsucht deinen Zwischenablage-Verlauf. Hammerspoon, ein kostenloses Lua-Automatisierungstool für macOS, schreibt Inhalte der Zwischenablage um, tippt Text ein, ohne die Zwischenablage anzufassen, und löst Maccy Mac über eigene Tastenkürzel aus. Zusammen decken die beiden…