3 puan yazan woojinim64 2026-04-22 | 4 yorum | WhatsApp'ta paylaş

Merhaba! macOS'u bu kez ilk kez kullanırken yaptığım mini proje DualClip'i paylaşmak istiyorum.

Böyle bir yazı yazmakta yeniyim, o yüzden biraz heyecanlıyım. Cümleler biraz acemice olsa da lütfen hoş görün 🙇


Bu ne derseniz

Bu sadece küçük bir menü çubuğu uygulaması ve size 3 pano "slot"u veriyor.

Slot A → varsayılan pano olduğu gibi (⌘C / ⌘V)
Slot B → ⌥⌘C / ⌥⌘V
Slot C → ⌃⌘C / ⌃⌘V

Paste ya da Maccy gibi bir "geçmiş" yaklaşımı değil, bir "slot" yaklaşımı.
Sık kullandığınız e-posta adresi ya da değişken adı gibi şeyleri B'ye sabitleyip, normal kopyala-yapıştır işlerini her zamanki gibi ⌘C/⌘V ile kullanma hissi veriyor.


Neden yaptım

Refactor yaparken ya da çeviri işiyle uğraşırken, ⌘C'ye bir kez daha basınca önceden kopyaladığınız şey doğrudan silinip gidiyor ya.
Bu da gün içine yayılınca beklenmedik şekilde stres yaratıyordu.
Geçmiş uygulamalarını da denedim ama bende şu eksikler kaldı.

  • Açılır pencereyi gösterip bir şey seçme adımı yavaş geliyor
  • "Az önceki değil, ondan önceki" şeyi bulmak için sonuçta gözle bakmak gerekiyor
  • Ben ise sadece ⌥⌘V'ye basınca onun hemen yapıştırılmasını istiyordum

Bu yüzden özelliği üstüne özellik eklemek yerine, sadece "slota sabitle ve kısayolla çıkar" gibi tek satırlık bir konsepte bıraktım.


Yaparken en eğlendiğim kısım (Atomic Paste)

Bu düşündüğümden daha uğraştırıcıydı çünkü macOS'ta ⌘V her zaman yalnızca system pasteboard'u okuyor.
Yani Slot B'yi yapıştırmak için system clipboard'u kısa süreliğine üzerine yazmak gerekiyor; ama o zaman da aslında ⌘C ile kopyaladığınız şey kayboluyor.
Bunu nasıl çözerim diye uzun süre düşündüm.
Sonunda şu sırayla çalışacak hale getirdim.

  1. Mevcut system clipboard'u önce yedekle (tüm tiplerin deep copy'si)
  2. Slot B içeriğiyle üzerine yaz
  3. CGEvent ile ⌘V simülasyonu yap
  4. 150ms sonra yedeklenen orijinali geri yükle

Bu döngünün tamamı 150ms içinde bittiği için, kullanıcı "⌘C ile kopyaladığım şey kısa süreliğine kayboldu" hissini hiç yaşamıyor.
Kendi kendime buna "Atomic Paste" diyorum...(isim koyup kendi kendime gururlanmıştım 😅).
Polling'i kısa süreliğine durdurup changeCount'u yok saydırma zamanlamasını ayarlamak gerçekten en çok zaman alan kısımdı.
"Slot A neden Slot B içeriğine dönüştü...?" diye bayağı uğraştım.

Bunun dışında küçük şeyler:

  • Metin/görsel/dosya/RTF desteğinin tamamı var (NSPasteboardItem deep copy)
  • Parola alanlarında hiç çalışmaz (IsSecureEventInputEnabled kontrolü)
  • Kapanışta slot belleği zero-fill yapılır (memset_s)
  • Tüm kısayollar değiştirilebilir (sindresorhus/KeyboardShortcuts sayesinde)

Gizlilik tarafında

Pano uygulamalarının işlediği veriler hassas olabildiği için özellikle bu kısma dikkat ettim.

  • Diske hiçbir şey yazmıyor. Her şey sadece RAM'de.
  • Hiç ağ kodu yok. Güncelleme kontrolü ya da telemetri de yok.
  • MIT açık kaynak, isterseniz doğrudan inceleyebilirsiniz.

Denemek isterseniz

En kolayı muhtemelen Homebrew olur.
brew install RAKKUNN/tap/dualclip

Ya da GitHub Releases'ten zip indirip /Applications içine atabilirsiniz.
Apple notarization'dan geçmiş bir build olduğu için ilk çalıştırmada uyarı penceresi çıkmıyor.

GitHub: https://github.com/RAKKUNN/DualClip
Gereksinimler: macOS 13+ (Apple Silicon), Erişilebilirlik izni


İlk kez yaptığım bir macOS uygulaması olduğu için mutlaka acemice kalan yerler vardır.
"Bunu şöyle yapmak daha iyi olur", "Şurada hata oluşuyor" gibi geri bildirimler paylaşırsanız gerçekten minnetle öğrenirim.
Rahatça yorum bırakın!
Herkese iyi günler!!

4 yorum

 
vwjdalsgkv 2026-04-23

Windows için bir pano yönetim programı olan Ditto da, sizin uyguladığınıza benzer şekilde çalışıyor.
Bir göz atarsanız, geliştirme yönünü belirlemede faydalı olabilir diye düşünüyorum~

 
woojinim64 2026-04-23

Bilgi için teşekkürler!🙇🙇
Bir göz atıp kısmen almayı değerlendireceğim!

 
greekr4 2026-04-23

Clipy gibi bir kaydetme özelliği de eklenirse güzel olabilir.

 
woojinim64 2026-04-23

Geçmiş ve snippet tarafında bir ihtiyacınız mı var?
Ancak geçmiş, DualClip'in yönüyle uyuşmuyor.
Mümkün olduğunca hafif ve kullanışlı yapmak için çalışıyorum.
Geri bildiriminiz için teşekkürler.