2026-07-16
요약 (AI 작성)
주소창을 제대로 된 텍스트 필드로 만든 날입니다. 슬라이스 0 설계(caret·선택·마우스 편집)에서 출발해 슬라이스 1 순수 모델·레이아웃·hit-test, 슬라이스 2 fieldLayout 단일 소스 렌더, 슬라이스 3 마우스 편집과 모델 OverlayInput→TextField 교체, 슬라이스 4 클립보드 브리지(⌘C/⌘V, ⌘X 는 OSC52 write drain 재활용) 순으로 쌓았습니다. 작업 도중 terminal/grapheme.zig 를 최상위 중립 유틸로 승격해 재사용 기반도 정리했습니다.
caret 렌더는 시행착오가 그대로 드러납니다. 세로 막대(글자 안 가림) → 반투명 블록(글자 비침) → 터미널 반전 블록 커서 재활용 → 정적 반전 블록 셀(§6 원래 계획 복귀)로 네 번 바꿔가며 "커서가 안 보인다"는 문제를 잡았습니다. 한글 입력도 NFD 자모가 분해돼 보이던 것을 NFC 조합으로 고치고 IME 한글 조합 end-to-end 회귀 테스트를 붙였으며, ⌘A 가 터미널을 전체 선택하던 것과 ⌘⌫ 가 포커스를 튕기던 것을 주소 필드로 라우팅되게 수정했습니다. 붙여넣기 위생도 리뷰 지적을 받아 강화했습니다.
zntc 는 청크 relocate 계열을 뿌리부터 정리했습니다. #4542 manualChunks 로 relocate 된 wrapped entry 가 호출되지 않던 문제와 #4541 --splitting 에서 raw require() 의 common-chunk CJS 썽크가 cross-chunk 로 노출되던 문제를 고친 뒤, #4553 에서 아예 manualChunks 가 user entry 를 relocate 하지 않도록 바꿔 relocate 버그 계열의 근본을 제거했습니다. 증분 빌드 쪽은 #4535 로 provider emit fingerprint 를 Merkle deep-fold 로 캐시에 반영했습니다.
커밋
ohah/maru
- test(text-field): 주소창 IME 한글 조합 end-to-end 회귀 테스트
- fix(text-field): 주소창 편집 중 ⌘⌫가 포커스를 튕기지 않고 줄 시작까지 삭제
- fix(text-field): 주소창 편집 중 ⌘A가 터미널이 아닌 주소 필드를 전체 선택
- fix(text-field): 클립보드 붙여넣기 위생 강화 (리뷰 #3·#7)
- feat(text-field): 주소창 ⌘X(cut) — OSC52 write drain 재활용(Zig-only)
- feat(text-field): 주소창 클립보드 브리지 ⌘C/⌘V (슬라이스 4)
- fix(text-field): /code-review max 결함 수정 (머지된 슬라이스 1~3)
- fix(text-field): 주소창 한글 NFD 자모를 NFC로 조합(자모 분해 표시 수정)
- fix(text-field): caret를 정적 반전 블록 셀로(원래 계획 §6 복귀 — 커서 안 보임 수정)
- fix(text-field): 주소창 caret를 터미널 반전 블록 커서로(같은 렌더 경로 재활용)
- fix(text-field): caret를 세로 막대 대신 반투명 블록으로(글자 비침)
- fix(text-field): caret를 세로 막대로(글자 안 가림) + 키보드 이동/선택 배선
- feat(text-field): 주소창 마우스 편집 + 모델 OverlayInput→TextField 교체 (슬라이스 3)
- feat(text-field): 주소창 편집 밴드를 fieldLayout 단일 소스로 렌더 (슬라이스 2)
- feat(text-field): 주소창 인라인 편집 순수 모델·레이아웃·hit-test (슬라이스 1)
- refactor(grapheme): terminal/grapheme.zig → 최상위 중립 유틸 승격
- docs(text-field-editor): 주소창 caret·선택·마우스 편집 설계 (슬라이스 0)
ohah/zntc
- fix(bundler): #4542 manualChunks 로 relocate 된 wrapped entry 미호출
- fix(bundler): #4541 --splitting raw require() common-chunk CJS 썽크 cross-chunk 노출
- fix(bundler): #4535 증분 emit 캐시에 provider emit fingerprint 반영