키 (keys)
키 매핑 조회/수정
get()
모든 키 모드의 키 매핑을 조회합니다.
type KeyMappings = Record<string, string[]>;
// { "4key": ["KeyD", "KeyF", "KeyJ", "KeyK"], ... }const mappings = await dmn.keys.get();
console.log("4key 매핑:", mappings["4key"]);update(mappings)
키 매핑을 업데이트합니다.
const current = await dmn.keys.get();
current["4key"] = ["KeyS", "KeyD", "KeyJ", "KeyK"];
await dmn.keys.update(current);getPositions()
모든 키 모드의 위치 정보를 조회합니다.
interface KeyPosition {
dx: number;
dy: number;
width: number;
height: number;
activeImage?: string;
inactiveImage?: string;
activeTransparent?: boolean;
idleTransparent?: boolean;
count: number;
noteColor: string | { type: "gradient"; top: string; bottom: string };
noteOpacity: number;
noteEffectEnabled: boolean;
noteGlowEnabled: boolean;
noteGlowSize: number;
noteGlowOpacity: number;
noteGlowColor?: string | { type: "gradient"; top: string; bottom: string };
noteAutoYCorrection: boolean;
className?: string;
zIndex?: number;
counter: KeyCounterSettings;
}const positions = await dmn.keys.getPositions();
console.log("4key 위치:", positions["4key"]);updatePositions(positions)
키 위치 정보를 업데이트합니다.
const current = await dmn.keys.getPositions();
current["4key"][0].dx = 100;
await dmn.keys.updatePositions(current);모드 관리
setMode(mode)
현재 활성 키 모드를 변경합니다.
const result = await dmn.keys.setMode("8key");
console.log("모드 변경 성공:", result.success);resetMode(mode)
특정 키 모드를 기본값으로 초기화합니다.
await dmn.keys.resetMode("4key");resetAll()
모든 키, 위치, 커스텀 탭을 기본값으로 초기화합니다.
const reset = await dmn.keys.resetAll();카운터
setCounters(counters)
모든 키의 카운트를 일괄 설정합니다.
await dmn.keys.setCounters({
"4key": { KeyD: 100, KeyF: 200, KeyJ: 150, KeyK: 180 },
});resetCounters()
모든 키의 누적 카운트를 초기화합니다.
await dmn.keys.resetCounters();resetCountersMode(mode)
특정 모드의 키 카운트만 초기화합니다.
await dmn.keys.resetCountersMode("4key");resetSingleCounter(mode, key)
특정 모드의 특정 키 카운트만 초기화합니다.
await dmn.keys.resetSingleCounter("4key", "KeyD");이벤트 구독
onKeyState(listener)
실시간 키 입력 이벤트를 구독합니다.
오버레이 윈도우에서만 수신 가능합니다.
interface KeyStatePayload {
key: string; // 키 코드 (예: "KeyD")
state: string; // "DOWN" | "UP"
mode: string; // 현재 모드
}const unsub = dmn.keys.onKeyState(({ key, state, mode }) => {
console.log(`[${mode}] ${key} is ${state}`);
});onRawInput(listener)
로우 레벨 입력 이벤트를 구독합니다. 키보드, 마우스의 원시 입력을 감지합니다.
interface RawInputPayload {
device: "keyboard" | "mouse" | "unknown";
label: string; // "KeyD", "MOUSE1", "MOUSE4" 등
labels: string[]; // 모든 레이블 목록
state: string; // "DOWN" | "UP"
}const unsub = dmn.keys.onRawInput(({ device, label, state }) => {
console.log(`[${device}] ${label} ${state}`);
});구독자가 없으면 백엔드에서 이벤트를 emit하지 않아 성능 오버헤드가 없습니다.
onChanged(listener)
키 매핑 변경 이벤트를 구독합니다.
const unsub = dmn.keys.onChanged((mappings) => {
console.log("키 매핑 변경:", mappings);
});onPositionsChanged(listener)
키 위치 변경 이벤트를 구독합니다.
const unsub = dmn.keys.onPositionsChanged((positions) => {
console.log("키 위치 변경:", positions);
});onModeChanged(listener)
키 모드 변경 이벤트를 구독합니다.
const unsub = dmn.keys.onModeChanged(({ mode }) => {
console.log("모드 변경:", mode);
});onCounterChanged(listener)
개별 키 카운트 변경 이벤트를 구독합니다.
const unsub = dmn.keys.onCounterChanged(({ mode, key, count }) => {
console.log(`[${mode}] ${key}: ${count}`);
});onCountersChanged(listener)
전체 키 카운터 변경 이벤트를 구독합니다.
const unsub = dmn.keys.onCountersChanged((counters) => {
console.log("카운터:", counters);
});커스텀 탭 (customTabs)
list()
커스텀 탭 목록을 조회합니다.
const tabs = await dmn.keys.customTabs.list();create(name)
새 커스텀 탭을 생성합니다.
const result = await dmn.keys.customTabs.create("My Keys");
if (result.error) {
console.error(result.error); // "invalid-name", "duplicate-name", "max-reached"
} else {
console.log("생성됨:", result.result);
}delete(id)
커스텀 탭을 삭제합니다.
const result = await dmn.keys.customTabs.delete("custom-123");select(id)
커스텀 탭을 선택합니다.
await dmn.keys.customTabs.select("custom-123");onChanged(listener)
커스텀 탭 변경 이벤트를 구독합니다.
const unsub = dmn.keys.customTabs.onChanged(
({ customTabs, selectedKeyType }) => {
console.log("선택된 탭:", selectedKeyType);
}
);