昔DraftPadにBubbleというアクションがあって、あの感じ。
decollage
実際に使っていると改良したくなって、改良してるとなんか違ったものになっていく。 スクリプトは自然と成長していきます。
ということで、現時点の「姿」を残しておきます。
collage.md
名前を変えました。
<%* // excalidraw(非圧縮)を箇条書きに変換します。 const FOLDER = "Inbox/" function getExcalidrawData() { const file = tp.file.content const startString = '```json' const endString = '```\n%%' const startIndex = file.indexOf(startString) const endIndex = file.indexOf(endString) if (startIndex === -1 || endIndex === -1) return null const jsonString = file.substring(startIndex + startString.length, endIndex).trim() return JSON.parse(jsonString) } function Items(excalidrawData) { const d = excalidrawData.elements .filter(x => x.type === 'text' && !x.isDeleted) .sort((a,b) => a.y - b.y) .map(x => x.rawText) TITLE = d[0] || "Collage" return d.join("\n\n") } s = tp.file.title if(/\.excalidraw/.test(s)) { const excalidrawData = await getExcalidrawData() if (excalidrawData) { s = await Items(excalidrawData) f = `${FOLDER}${TITLE}.md` p = app.vault.getAbstractFileByPath(f) k = 1 while(p){ f = `${FOLDER}${TITLE} ${k++}.md` p = app.vault.getAbstractFileByPath(f) } p = await app.vault.create(f, s) app.workspace.activeLeaf.openFile(p) } else { new Notice("Excalidrawデータが見つかりませんでした。") } } else { s = tp.file.content s = s.replace(/\n\n+/g, "</BR>") s = s.replace(/\n/g, "") s = s.replace(/<\/BR>/g, "\n") await navigator.clipboard.writeText(s) s = "obsidian-excalidraw-plugin:excalidraw-autocreate-newtab" app.commands.executeCommandById(s) } %>
TemplaterのHotkeyに登録してお使いください。
使い方
Excalidrawからテキストを抜き出し、y座標順に並べます。 出力先は変数FOLDERでフォルダを指定。 ファイル名は1行目を採用します。
今回思ったのは「excalidrawファイル以外だと何をすればいい?」なので、そりゃあ、コラージュすればいい。ということで:
通常のノートの場合は、テキストをクリップボードに収めExcalidrawを起動。 「貼り付け」を待つ状態にしてみました。
で、試行錯誤してみると行単位で貼りつくのってあまり便利じゃないです。 空行を区切りにしてブロック単位がいいんじゃないか。 ところがExcalidrawは改行を区切りと解釈します。 なので、ブロックの範囲は改行を連結し、段落化するようにしました。
「Open as Markdown」にしてcollage.mdを実行。
するとy座標順にブロックをテキスト化します。
はい、元に戻りました。
並べ方
コラージュの仕方ですが、見出しは左端に並べた方がいいです。 構造が見て取れる。 そこに他のブロックを配置する感じになります。
他のブロックは三列にするのがいいかな。 ちょっと始点のy座標をずらす感じにして横に並べる。 この感じが「構成を考えてる」ってなります。
ブロックが重なっても、内容的には独立しているのでテキストが混ざることはありません。 背景色がついている方がカードぽくなりそうだけど、方法がわからないし、手間になりそうなので今回はパスしました。
以前書いたようにExcalidrawは設定でCompressをオフにしてください。 MarkdownにしたときDecompressにする方でも良いみたいです。 そこはお好みで。
生成AIで作った文章も入っていると、頭と尻尾を切り落としたいし、本体も3枚におろしたい。 そういう用途には向いてます。 使えそうな部分を材料として用いる。
ただiPadの画面では狭いですね。 見渡すには大きなディスプレイが欲しくなります。 テキストは直感的なコラージュに合わないのかもしれない。 骨組みを作るのには良さそうですが。
まとめ
キーワードを箇条書きにしてから、生成AIに簡単な下書きを作ってもらい、それをコラージュするという流れかな。
「人間が一度に把握できるのは20行くらい」という仮説が最近浮かんでいて、それくらいのブロック数だとコラージュで対応できそう。