3 poin oleh woojinim64 2026-04-22 | 4 komentar | Bagikan ke WhatsApp

Halo! Saya baru pertama kali memakai macOS, dan ingin memperkenalkan proyek mini yang saya buat, DualClip.

Ini juga pertama kalinya saya menulis posting seperti ini, jadi agak gugup. Mohon maklum kalau kalimatnya masih canggung ๐Ÿ™‡


Jadi, ini apa?

Ini cuma aplikasi kecil di menu bar, tapi menyediakan 3 'slot' clipboard.

Slot A โ†’ clipboard bawaan seperti biasa (โŒ˜C / โŒ˜V)
Slot B โ†’ โŒฅโŒ˜C / โŒฅโŒ˜V
Slot C โ†’ โŒƒโŒ˜C / โŒƒโŒ˜V

Ini bukan model 'history' seperti Paste atau Maccy, melainkan model 'slot'.
Hal-hal yang sering dipakai seperti email atau nama variabel bisa disimpan di B, sementara copy-paste harian tetap dipakai seperti biasa dengan โŒ˜C/โŒ˜V.


Kenapa saya membuatnya

Saat refactoring atau menerjemahkan, begitu menekan โŒ˜C sekali lagi, salinan yang sebelumnya langsung hilang begitu saja.
Kalau itu menumpuk sepanjang hari, ternyata cukup bikin stres.
Saya juga pernah mencoba aplikasi history, tapi ada beberapa hal yang terasa kurang pas buat saya.

  • Ritme kerja jadi melambat karena harus membuka popup lalu memilih
  • Kalau mau mencari "bukan yang barusan, tapi yang sebelumnya lagi", pada akhirnya tetap harus melihat dengan mata
  • Saya cuma ingin saat menekan โŒฅโŒ˜V, isinya langsung tertempel begitu saja

Jadi, alih-alih menempelkan banyak fitur, saya menyisakan konsep sederhana: "simpan di slot, lalu ambil dengan shortcut".


Bagian yang paling seru saat membuatnya (Atomic Paste)

Ternyata ini lebih merepotkan dari dugaan, karena di macOS, โŒ˜V selalu hanya membaca system pasteboard.
Jadi kalau ingin menempelkan Slot B, system clipboard harus ditimpa sebentar, dan akibatnya hasil โŒ˜C asli yang tadi disalin bisa hilang.
Saya lama memikirkan bagaimana cara menyelesaikannya.
Akhirnya saya membuatnya bekerja dengan urutan seperti ini.

  1. Backup system clipboard saat ini terlebih dulu (deep copy semua tipe)
  2. Timpa dengan isi Slot B
  3. Simulasikan โŒ˜V dengan CGEvent
  4. Setelah 150ms, pulihkan lagi ke salinan asli yang tadi dibackup

Seluruh siklus ini selesai dalam waktu kurang dari 150ms, jadi pengguna sama sekali tidak merasa bahwa "hasil โŒ˜C yang tadi sempat menghilang sesaat".
Saya diam-diam menyebutnya 'Atomic Paste'...(senang sendiri setelah memberinya nama ๐Ÿ˜…).
Bagian yang paling makan waktu adalah mengatur timing untuk menghentikan polling sebentar dan mengabaikan changeCount.
Saya sempat lama kebingungan sambil berpikir, "Kenapa Slot A berubah jadi isi Slot B...?"

Hal-hal kecil lainnya:

  • Mendukung teks/gambar/file/RTF semuanya (NSPasteboardItem deep copy)
  • Tidak berjalan sama sekali di field kata sandi (IsSecureEventInputEnabled check)
  • Zero-fill memori slot saat aplikasi ditutup (memset_s)
  • Semua shortcut bisa diubah (berkat sindresorhus/KeyboardShortcuts)

Soal privasi

Karena aplikasi clipboard menangani data sensitif, bagian ini benar-benar saya perhatikan.

  • Tidak menulis apa pun ke disk. Semuanya hanya di RAM.
  • Sama sekali tidak ada kode jaringan. Tidak ada pengecekan update maupun telemetri.
  • Open source MIT, jadi silakan dibedah sendiri juga.

Kalau ingin mencobanya

Homebrew mungkin akan jadi cara yang paling nyaman.
brew install RAKKUNN/tap/dualclip

Atau Anda juga bisa mengunduh file zip dari GitHub Releases lalu menaruhnya di /Applications.
Build-nya sudah dinotarize oleh Apple, jadi saat pertama kali dijalankan tidak akan muncul jendela peringatan.

GitHub: https://github.com/RAKKUNN/DualClip
Persyaratan: macOS 13+ (Apple Silicon), izin Aksesibilitas


Ini adalah aplikasi macOS pertama yang saya buat, jadi pasti masih banyak bagian yang belum rapi.
Kalau ada masukan seperti "ini sebaiknya begini" atau "ada error di bagian ini", saya akan sangat berterima kasih dan belajar banyak darinya.
Silakan tinggalkan komentar dengan santai!
Semoga semuanya menjalani hari yang menyenangkan!!

4 komentar

 
vwjdalsgkv 2026-04-23

Program manajemen clipboard untuk Windows, ditto, juga bekerja mirip dengan yang Anda implementasikan.
Mungkin bisa dijadikan referensi untuk menentukan arah perbaikannya~

 
woojinim64 2026-04-23

Terima kasih atas informasinya!๐Ÿ™‡๐Ÿ™‡
Saya akan melihatnya dulu sekali dan mempertimbangkan untuk mengambil sebagian yang diperlukan!

 
greekr4 2026-04-23

Sepertinya akan bagus juga kalau dibuat fitur penyimpanan seperti Clipy.

 
woojinim64 2026-04-23

Apakah Anda membutuhkan riwayat atau snippet?
Namun riwayat tidak sejalan dengan arah DualClip.
Saya sedang berusaha membuatnya seringan dan senyaman mungkin untuk digunakan.
Terima kasih atas masukannya.