Search
moon
sun
🪟

04 · Dockable UI — 등록·수명·복원

도킹 패널은 안정적인 스크립트 identity로 등록하고 AE workspace가 배치를 관리한다. 일반 창과 도킹 패널의 생성·해제 절차는 다르다.

세 종류의 ID

•
//@ID com.example.titles — 배포 스크립트의 영구 identity. 등록·업데이트·AE panel match-name에 사용
•
createPanel({id: 'main', ...}) — 현재 JS 세션 안의 surface ID. 창/패널끼리 고유
•
XML id="create" — 각 surface 안의 요소 ID. get/on에 사용
파일명을 바꾸거나 이동해도 metadata ID를 바꾸지 않는다. 서로 다른 도구에는 서로 다른 ID를 준다. 서로 다른 surface에는 같은 요소 ID를 써도 된다.

도킹 패널 등록

1.
.aeu 선두에 유효한 @ID와 @TYPE panel을 선언한다.
2.
본문은 ui.createPanel로 UI를 만들고 이벤트를 연결한다. 초기화 본문에서 AE 프로젝트에 접근하지 않는다.
3.
저장 후 Build Current Script로 빌드한다.
4.
Window > AEUScripts > Panels > Add panel script...에서 생성 .aeu를 등록한다. 등록은 metadata를 읽으며 본문을 실행하지 않는다.
5.
새 ID는 AE를 재시작해야 factory가 등록된다. 이후 Open Selected Panel로 열고 AE 기본 도킹 조작으로 배치한다.
6.
스크립트 내용/XML 수정 후에는 재빌드하고 패널 메뉴의 Restart Script를 사용한다.
@TYPE panel을 쓴 것만으로 자동 등록되지는 않는다. 기존 4개 고정 UI 슬롯 방식은 현재 등록 방식으로 대체되었다.

열기·닫기·Restart

AE가 workspace에서 복원하거나 사용자가 연 패널은 idle에서 한 번 초기화된다. 모든 등록 스크립트를 시작 시 무조건 실행하는 방식이 아니다. 초기화/Restart 자체에서 AE 레이어를 생성하지 않는다.
스크립트 패널의 AE 메뉴에서 Show Debug Controls, Restart Script, Stop Script를 사용할 수 있다. 디버그 표시를 켜고 끄는 것은 세션·로그를 유지한다.
Stop은 대기 이벤트를 비우고 콜백을 중지한다. Restart는 파일을 다시 읽어 JS context, UI 모델, 콜백을 새로 만든다. 관리 UI의 More > Close selected panel은 세션과 보조 창을 명시적으로 해제한다.
AE의 tab/view 파괴는 도킹 조작 중에도 일어나므로 그 자체를 JS 세션 종료로 취급하지 않는다. tab을 닫았는데 세션을 확실히 해제하고 싶다면 관리 UI의 Close를 사용한다.

AE 접근과 Undo

이벤트마다 ae.project.activeComp를 다시 조회한다. Comp/Layer/Property는 현재 이벤트 종료 후 다시 사용할 수 없다. 일반 JS 변수와 UI 값만 클로저에 유지한다.
AE 변경 이벤트는 Undo 하나로 묶인다. 순수 UI 조작은 AE Undo를 만들지 않는다. 오류 시 UI 모델은 복원되지만 JS 상태와 이미 완료한 AE 변경은 자동 rollback되지 않는다. 필요하면 AE Undo 후 Restart한다.

창과 modeless dialog 수명

ui.createWindow/ui.createDialog는 등록 없이 Common Run에서 만들 수 있다. 본문 반환 후에도 콜백이 유지된다. hide는 숨길 뿐 context를 해제하지 않는다. 마지막 창이 닫히고 close 콜백까지 처리되면 세션이 해제된다.
onClose는 host idle에 큐로 전달된다. 동기 modal 루프를 만들지 않는다. 창을 닫기 전에 필요한 입력을 읽고, 닫힌 객체/요소를 재사용하지 않는다. 도킹 패널이 가려져 있어도 보조 창의 close 정리는 유지한다.
Tab/Shift+Tab은 컨트롤 이동, Enter는 포커스된 버튼 실행, idle 상태의 Escape는 독립 창을 닫는다. 실행 중 Escape/Stop은 중지 경로다. 일반 창의 위치·상태는 AE 재시작 후 복원하지 않는다.

파일 이동·충돌·제거

같은 ID나 경로의 중복 등록은 거부한다. More > Locate script file...로 파일을 변경할 때는 등록된 ID와 동일해야 한다. 등록 후 파일의 ID/TYPE이 달라지면 본문 평가 전에 차단된다.
목록에서 Remove는 등록을 제거하며 원본 파일을 삭제하지 않는다. 현재 AE 프로세스의 factory는 종료까지 유지되므로 같은 ID의 제거·재등록은 재시작이 필요할 수 있다. 상세 ID/경로/로그는 Developer의 Panel diagnostics에서 확인한다.

Workspace와 비정상 종료 복구

도킹 위치·그룹과 Save Changes to this Workspace / Reset은 AE가 관리한다. AEUScripts는 workspace XML을 수정하지 않으며 모든 workspace에 이전 전역 배치를 강제로 적용하지 않는다.
플러그인은 사용 중 열린 패널 ID를 checkpoint에 기록한다. AE가 위치를 기억하지 못하면 플러그인만으로 그 위치를 재현할 수 없다. Reopen previous panels는 이전 패널을 다시 여는 요청이며 완전한 배치 복구 보장은 아니다.
현재 Windows 저장 위치는 %LOCALAPPDATA%/AEUScript/dock-v1/이다. registry/checkpoint는 임시 파일·원자 교체·이전 세대 backup을 사용한다. 초기화 중단 흔적이 있으면 반복 자동 실행을 막고 수동 Restart를 요구한다. 설정 파일을 수동 편집하는 API는 제공하지 않는다.
여러 AE 인스턴스에서는 첫 writer가 저장 권한을 갖고 나머지는 등록/checkpoint를 읽기 전용으로 사용한다. registry는 128개, 등록 패널 초기화의 합산 active UI 세션 제한은 16개다. UI 세션당 16 live surfaces/256 노드 제한도 별도로 적용된다.
AE 재시작 시 등록 파일을 다시 초기화한다. JS 변수와 입력값 자체를 자동 직렬화하지 않으므로 앱 종료 후 값 유지 기능을 있다고 가정하지 않는다.

근거

docs/DOCKABLE_SCRIPTS.md, docs/SCRIPT_UI_API.md, docs/decisions/0009-dockable-registry.md, docs/decisions/0010-user-developer-panels.md.