Skip to Content
API 레퍼런스프리셋 (presets)

프리셋 (presets)

프리셋 API를 사용하면 현재 설정을 파일로 저장하거나 불러올 수 있습니다.

프리셋 저장

save()

현재 설정을 프리셋 파일로 저장합니다. 파일 저장 다이얼로그가 열립니다.

const result = await dmn.presets.save(); if (result.success) { console.log("프리셋 저장 완료"); } else { console.error("저장 실패:", result.error); }

프리셋 불러오기

load()

프리셋 파일을 불러와 설정에 적용합니다. 파일 선택 다이얼로그가 열립니다.

const result = await dmn.presets.load(); if (result.success) { console.log("프리셋 불러오기 완료"); } else { console.error("불러오기 실패:", result.error); }

탭 프리셋

saveTab()

현재 선택된 탭(키 매핑·레이아웃)만 탭 프리셋 파일로 저장합니다. 파일 저장 다이얼로그가 열립니다.

const result = await dmn.presets.saveTab();

loadTab()

탭 프리셋 파일을 현재 선택된 탭에 불러옵니다. 파일 선택 다이얼로그가 열립니다. 탭 프리셋에는 tabOrderbarCount가 들어 있지 않아 전역 탭 순서를 건드리지 않습니다.

const result = await dmn.presets.loadTab();

사용 예제

컨텍스트 메뉴에서 프리셋 관리

// @id preset-manager if (dmn.window.type !== "main") return; // 프리셋 저장 메뉴 dmn.ui.contextMenu.addGridMenuItem({ id: "save-preset", label: "프리셋 저장", onClick: async () => { const result = await dmn.presets.save(); if (result.success) { await dmn.ui.dialog.alert("프리셋이 저장되었습니다!"); } }, }); // 프리셋 불러오기 메뉴 dmn.ui.contextMenu.addGridMenuItem({ id: "load-preset", label: "프리셋 불러오기", onClick: async () => { const confirmed = await dmn.ui.dialog.confirm( "현재 설정이 덮어씌워집니다. 계속하시겠습니까?" ); if (confirmed) { const result = await dmn.presets.load(); if (result.success) { await dmn.ui.dialog.alert("프리셋을 불러왔습니다!"); } } }, }); dmn.plugin.registerCleanup(() => { dmn.ui.contextMenu.clearMyMenuItems(); });

이벤트 구독

onSnapshot(listener)

프리셋 로드 완료 시 적용된 스냅샷 데이터를 수신합니다. 키 매핑, 위치, 탭, 모드 등이 한 번에 전달됩니다.

스냅샷의 위치 컬렉션에는 이번 로드에서 새로 발급된 요소 id가 담깁니다. 프리셋 적용은 모든 요소를 새 UUID로 재발급하므로, 프리셋 파일 안의 ID나 이전 로드의 ID는 적용 상태로 이어지지 않고, 같은 프리셋을 두 번 적용하면 서로 다른 ID 집합이 생깁니다. 캐시해 둔 요소 ID는 이 스냅샷에서 다시 조회하세요.

interface PresetSnapshot { // 항목은 KeySlot union(string | MultiKeySlot) keys: KeyMappings; positions: KeyPositions; statPositions: StatItemPositions; graphPositions: GraphItemPositions; knobPositions: KnobItemPositions; customTabs: CustomTab[]; tabOrder: string[]; barCount: number; selectedKeyType: string; tabNoteOverrides: TabNoteOverrides; }
const unsub = dmn.presets.onSnapshot((snapshot) => { console.log("프리셋 로드됨:", snapshot.selectedKeyType); console.log("키 매핑:", snapshot.keys); });

프리셋 로드 시 개별 이벤트(onChanged, onPositionsChanged 등)는 발행되지 않습니다. 프리셋 로드를 감지하려면 onSnapshot을 사용하세요.

프리셋에 포함되는 항목

프리셋은 “전체 설정 덤프”가 아니라, 아래 항목들을 파일로 저장/복원합니다.

필드설명
keys키 매핑
positions키 위치/크기/개별 옵션(클래스, 이미지, 카운터 설정 포함)
customTabs커스텀 탭 목록
tabOrder내장 모드와 커스텀 탭을 합친 표시 순서
barCount그중 툴바 바에 나오는 앞쪽 개수 (1~4)
selectedKeyType선택된 탭/모드
backgroundColor오버레이 배경색
noteSettings / noteEffect노트 이펙트 관련 설정
laboratoryEnabled실험실(랩) 기능 사용 여부
useCustomCSS / customCSS커스텀 CSS 사용 여부/내용
useCustomJS / customJS커스텀 JS 사용 여부/내용(플러그인 목록 포함)

플러그인 설정(dmn.plugin.storage)은 프리셋에 포함되지 않습니다. 플러그인 데이터를 포함하려면 별도로 관리하세요.

키 카운터 “값”(누적 카운트)은 프리셋에 포함되지 않습니다.