"선택을 못 읽으면, 앱한테 복사하라고 시켜 — 그다음 클립보드를 찾은 그대로 정확히 돌려줘."
클립보드를 빌리고, 도로 줘
AX 가 선택을 못 볼 때, 모든 앱이 이해하는 게 하나 있어: Cmd+C. Flint 가 복사를 합성하면, 불투명 앱이 선택된 텍스트를 클립보드에 올리고, Flint 가 거기서 읽을 수 있어. 함정은 뻔해 — 그게 사용자가 클립보드에 갖고 있던 걸 뭉개. 그래서 프로브는 되돌릴 수 있게 지어져: 클립보드를 스냅샷하고, 복사 한 번을 위해 빌리고, 결과를 읽고, 원본을 복원해. 제대로 하면, 사용자 클립보드는 손대지 않고 빌린 걸 절대 몰라.
Cmd+C 합성하기
복사 자체는 합성 키 입력이야. Command 플래그가 설정된 C 키의 키-다운과 키-업 이벤트를 만들어 이벤트 스트림에 게시해, 사용자가 Cmd+C 를 누른 것처럼 정확히. 최전면 앱이 그걸 받고 복사에 늘 하는 걸 해. Flint 는 앱 내부를 파싱하는 게 아냐 — 앱이 이미 구현한 하나의 보편 제스처를 쓰고, 결과가 떨어지는 표준 자리를 읽는 거야.
NSPasteboard 를 읽으면, 옛 내용을 얻고 프로브가 실패했다고 생각해. 맞는 패턴은 페이스트보드의 changeCount 를 먼저 기록하고, 증가할 때까지 기다리는 거야(짧은 타임아웃과 함께) — 그 증가가 복사가 실제로 일어났다는 네 증명이야.되돌릴 수 있다 = 복원됐다
이 프로브가 받아들여지는 이유 전부는 복원 단계야. 복사 전에, Flint 가 완전한 현재 페이스트보드를 캡처해. 프로브된 텍스트를 읽은 뒤, 캡처한 상태를 도로 써. 복사가 아무것도 안 만들었으면(changeCount 가 안 움직임), Flint 는 어쨌든 복원하고 선택 없음을 보고해 — 성공이든 실패든, 클립보드를 빌린 상태로 절대 안 남겨. 다음 레슨은 그 캡처-복원을 완전히 하는 거야, '클립보드 복원' 은 들리는 것보다 어려우니까.