프리셋 (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()
탭 프리셋 파일을 현재 선택된 탭에 불러옵니다. 파일 선택 다이얼로그가
열립니다. 탭 프리셋에는 tabOrder와 barCount가 들어 있지 않아 전역 탭 순서를
건드리지 않습니다.
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)은 프리셋에 포함되지 않습니다. 플러그인 데이터를 포함하려면 별도로 관리하세요.
키 카운터 “값”(누적 카운트)은 프리셋에 포함되지 않습니다.