Saya kesal karena tidak bisa menekan โC dua kali, jadi saya membuat clipboard macOS menjadi 3 buah - DualClip
(github.com/RAKKUNN)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.
- Backup system clipboard saat ini terlebih dulu (deep copy semua tipe)
- Timpa dengan isi Slot B
- Simulasikan โV dengan
CGEvent - 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 (
NSPasteboardItemdeep copy) - Tidak berjalan sama sekali di field kata sandi (
IsSecureEventInputEnabledcheck) - 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
Program manajemen clipboard untuk Windows, ditto, juga bekerja mirip dengan yang Anda implementasikan.
Mungkin bisa dijadikan referensi untuk menentukan arah perbaikannya~
Terima kasih atas informasinya!๐๐
Saya akan melihatnya dulu sekali dan mempertimbangkan untuk mengambil sebagian yang diperlukan!
Sepertinya akan bagus juga kalau dibuat fitur penyimpanan seperti Clipy.
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.