"키를 삼키는 이벤트 탭은 이 기계가 만드는 모든 키 입력의 톨게이트야. 그 일을 정말 맡고 싶은지 아주 확실히 해."
요구사항
Firekeeper 의 기본 활성화는 맨 Fn 홀드 야. 조합키 없이, 안 쓰는 키 하나 누르고 말하는 거. 인터랙션은 사랑스러운데 구현은 진짜 어색해. 맨 모디파이어는 평범한 단축키가 아니거든. 평범한 단축키 API 엔 'Fn 눌림' 이벤트라는 게 없어. 모디파이어는 플래그가 바뀌는 걸로 자기를 알리니까, 누르고 있는 상태를 거기서 직접 재구성해야 해.
넘어가기 쉬운 틀린 도구
뻔한 답은 CGEventTap 이야. 시스템 전역 이벤트 스트림 위에 앉아서 모든 키를 보고, 내가 가져가겠다는 건 삼켜. 되긴 돼. 그리고 그 순간 네 앱이 이 기계가 만드는 모든 키 입력의 톨게이트가 돼. 탭이 잘못 굴면 네 앱이 깨지는 게 아니야. 어디서든 타이핑 이 깨져. 가정이 아니고, 경쟁자의 삼키는 탭이 유저들 스페이스바를 먹은 게 정확히 그거였어. 위험은 그렇다 치고, 탭은 Input Monitoring 권한까지 필요해. 삽입 때문에 이미 받아 둔 접근성 허가 위에 무서운 프롬프트를 하나 더 띄우는 거지.
CGEventTap (거부됨): flagsChanged + keyState (선택됨):
모든 키 입력에 앉음 모디파이어 플래그 변화만 관찰
시스템 전역 억제 가능 아무 키도 못 삼킴
Input Monitoring 필요 이미 가진 접근성 권한만 씀
경쟁자 게 스페이스바 먹음 가로채지 않는 걸 못 먹음
고른 길
Firekeeper 는 대신 NSEvent flagsChanged 모니터를 봐. 그리고 플래그만으로는 못 가리는 경우를 CGEventSource.keyState 로 구분해. 특히 쌍둥이 모디파이어가, 그러니까 반대쪽 Command 키 같은 게 아직 눌려 있을 때 누름과 놓음을 갈라내는 일. 앱이 삽입 때문에 이미 받아 둔 접근성 권한만으로 돌아가고, 새 권한을 하나도 안 더하고, 애초에 스트림을 안 가로채니까 구조적으로 키 입력을 삼킬 수가 없어. 같은 인터랙션인데 폭발 반경은 조각이야.