크라우니 오피스 아웃라인 punch #3 — Tab/Shift+Tab 들여쓰기·내어쓰기 + ⌥↑↓ 이동
개요
아웃라인(Outline) 모듈 편집기의 핵심 조작 3종을 crownyBridge.js §23(installOutlineBridge)에 확장.
앱 번들(index.html) 무수정 · 런타임 몽키패치. punch#1(hoist/주제편집)·#2(추가/삭제) 위에 얹음.
무엇을 했는지
- Tab 들여쓰기: 선택 항목을 바로 위 형제의 자식으로 재부모화(depth+1). 위 형제 없으면 no-op.
- Shift+Tab 내어쓰기: 부모의 형제로 승격(parentId=조부모, depth-1). 최상위 no-op.
- ⌥↑/⌥↓ 순서이동: 형제 내 위/아래(하위트리 통째). 경계 클램프.
- 세 조작 모두 하위트리 통째 이동(대상만 parentId 교체, 자손 포인터 유지 → depth 파생 자동).
- onOutlineKeydown 재정의: punch#2 Tab=자식추가 → 표준 아웃라인 Tab=들여쓰기로 통일.
(자식추가는 Enter(형제)→Tab(들여쓰기) 흐름 or window.__crownyOutlineAddChild API)
- 편집 중 Tab=커밋(blur)+들여쓰기, Shift+Tab=커밋+내어쓰기. 그 외는 네이티브 편집 양보.
- window API: __crownyOutlineIndent/Outdent/MoveUp/MoveDown/Depth/Parent.
검증
- 한선씨 정본 아웃라인이동.한선: hanseonc_high 컴파일+crownyc run 30/30 PASS.
- 문서 회귀 27/27 PASS (회귀하니스.js).
- 라이브 CDP(:9333) 17/17 PASS: Tab들여쓰기(depth·parentId)·Shift+Tab내어쓰기·위형제없음no-op·
최상위no-op·⌥↑↓이동·경계클램프·하위트리동반·카운트/접기무회귀·#1~#2(주제편집/추가/삭제)무회귀.
관련 파일
- /Users/ef/crownybrowser/bundle/office/bridge/crownyBridge.js §23 (11194→11304줄)
- /Users/ef/crownybrowser/bundle/office/bridge/아웃라인이동.한선 (신규 30/30)
- dist 미러 동기화: dist/CrownyAI.app/Contents/Resources/office/bridge/crownyBridge.js (md5 일치)
- 백업: 백업/crownyBridge-아웃라인3착수-0718-1326.js.bak
잔여 이슈
- punch #4(체크박스) · #5(드래그 재정렬) · #6(자동번호) · #7(colVis 실소비) 등 판정표 후속.
- 앱번들·crowny-browser.m·crowny-shell.m·Makefile·§19~§22 무수정.