Show GN: ⌘C를 두 번 못 하는 게 싫어서 macOS 클립보드를 3개로 만들었습니다 - DualClip
(github.com/RAKKUNN)안녕하세요! macOS를 이번에 처음 써보면서 만든 미니 프로젝트 DualClip을 공개해봅니다.
이런 글을 쓰는 게 처음이라 좀 떨리네요. 문장이 어설퍼도 너그럽게 봐주세요 🙇
이게 뭐냐면요
그냥 작은 메뉴바 앱인데, 클립보드 '슬롯'을 3개 줍니다.
Slot A → 기본 클립보드 그대로 (⌘C / ⌘V)
Slot B → ⌥⌘C / ⌥⌘V
Slot C → ⌃⌘C / ⌃⌘V
Paste나 Maccy 같은 '히스토리' 방식이 아니라 '슬롯' 방식이에요.
자주 쓰는 이메일이나 변수명 같은 걸 B에 박아두고, 평소 복붙은 ⌘C/⌘V로 그대로 쓰는 느낌입니다.
왜 만들었냐면
리팩터링하거나 번역 작업할 때, ⌘C 한 번만 더 누르면 이전에 복사해둔 게 그냥 날아가잖아요.
그게 하루 동안 쌓이면 은근 스트레스더라구요.
히스토리 앱도 써봤는데, 저한텐 이런 점이 아쉬웠어요.
- 팝업 띄우고 고르는 한 템포가 느리다
- "방금 전 거 말고 그 전 거" 찾으려면 결국 눈으로 봐야 한다
- 저는 그냥 ⌥⌘V 누르면 바로 그게 붙었으면 좋겠더라구요
그래서 기능을 덕지덕지 붙이기보단 "슬롯에 박아두고 단축키로 꺼낸다"는 한 줄짜리 컨셉만 남겼습니다.
만들면서 제일 재밌었던 부분 (Atomic Paste)
이게 생각보다 골치아팠는데, macOS에서 ⌘V는 무조건 system pasteboard만 읽거든요.
그래서 Slot B를 붙여넣으려면 system clipboard를 잠깐 덮어써야 하는데, 그러면 원래 ⌘C 해둔 게 날아가버리는 거죠.
이걸 어떻게 해결할까 한참 고민했습니다.
결국 이런 순서로 동작하게 했어요.
- 현재 system clipboard를 일단 백업 (모든 타입 딥카피)
- Slot B 내용으로 덮어쓰기
- CGEvent로 ⌘V 시뮬레이션
- 150ms 뒤에 백업해둔 원본으로 다시 복원
이 사이클이 150ms 안에 전부 끝나서, 쓰는 사람은 "⌘C 해둔 게 잠깐 사라졌다"는 걸 체감 자체를 못 해요.
혼자서 'Atomic Paste'라고 부르고 있습니다...(이름 붙이고 혼자 뿌듯해했음 😅).
폴링을 잠깐 멈추고 changeCount를 무시시키는 타이밍 맞추는 부분이 진짜 오래 걸렸어요.
"왜 Slot A가 Slot B 내용으로 바뀌지...?" 하면서 한참 헤맸습니다.
그 외 자잘한 것들:
- 텍스트/이미지/파일/RTF 전부 지원 (NSPasteboardItem 딥카피)
- 비밀번호 필드에선 아예 동작 안 함 (IsSecureEventInputEnabled 체크)
- 종료할 때 슬롯 메모리 zero-fill (memset_s)
- 단축키는 전부 바꿀 수 있습니다 (sindresorhus/KeyboardShortcuts 덕분에)
프라이버시 쪽은
클립보드 앱이 다루는 게 민감한 데이터라 여기만큼은 신경 썼어요.
- 디스크에 아무것도 안 씁니다. 전부 RAM에만.
- 네트워크 코드가 아예 없어요. 업데이트 체크나 텔레메트리도 없음.
- MIT 오픈소스라 직접 까보셔도 됩니다.
써보시려면
Homebrew가 편하실 거예요.
brew install RAKKUNN/tap/dualclip
아니면 GitHub Releases에서 zip 받아서 /Applications에 넣으셔도 됩니다.
Apple 공증(notarization)된 빌드라 첫 실행 때 경고창은 안 떠요.
GitHub: https://github.com/RAKKUNN/DualClip
요구사항: macOS 13+ (Apple Silicon), 접근성 권한
처음 만들어본 macOS 앱이라 분명 어설픈 부분이 많을 거예요.
"이건 이렇게 하는 게 낫다", "어디서 오류가 발생한다" 같은 피드백 주시면 진짜 감사히 배우겠습니다.
편하게 댓글 남겨주세요!
모두들 좋은 하루 보내세요!!