> [!warning] > 非公開APIなので自己責任で実施すること ## アクティブリーフがCanvasかを確認 ```ts app.workspace.activeLeaf.view.getViewType() === "canvas" ``` ```ts export function isActiveLeafCanvas(): boolean { return this.unsafeApp.workspace.activeLeaf?.view.getViewType() === "canvas"; } ``` ## Canvasオブジェクトの取得 ```ts app.workspace.activeLeaf.view.canvas ``` 型定義を書くならこんな感じ。 ```ts interface UnsafeCanvasView extends View { canvas: UnsafeCanvas; requestSave(): unknown; } type UnsafeCardLayout = { x: number; y: number; width: number; height: number }; interface UnsafeCanvas { posCenter(): { x: number; y: number }; createFileNode(args: { file: TFile; pos: { x: number; y: number }; subpath?: unknown | undefined; size?: unknown | undefined; position?: unknown | undefined; save?: unknown | undefined; focus?: unknown | undefined; }): UnsafeCardLayout; } ``` ## Canvasにファイルをノードとして追加 以下の`addFileToCanvas`のような処理を書く。 ```ts // Canvasの中央にファイルを追加 export function addFileToCanvas( file: TFile, offset: { x: number; y: number } = { x: 0, y: 0 } ): UnsafeCardLayout { const unsafeView = this.app.workspace.activeLeaf ?.view as UnsafeCanvasView; const { x, y } = unsafeView.canvas.posCenter(); return unsafeView.canvas.createFileNode({ file, pos: { x: x + offset.x, y: y + offset.y }, }); } ``` ## 参考 - [[📜Another Quick Switcherでキャンバスにファイルを追加]]