Jazzと読書の日々

iPadを筆記具として使う方法を模索します

Obsidian:コラージュから箇条書きに戻す

これができるなら、あれもできるはず。

コラージュ・ライティング

テキストを散りばめて新しい文脈を見つける。

前回はCopilotを使いましたが、仕組みがわかったのでTemplaterスクリプトにしてみます。 その方が時間もパケットもかからないし。

decollage.md

午前に作ったexcalidraw_to_mermaid.mdを見てたら思いついた。

<%*
// excalidraw(非圧縮)を箇条書きに変換します。
const FILE = "Inbox/Decollage"

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)
  return d.join("\n")
}

const excalidrawData = await getExcalidrawData()
if (excalidrawData) {
  s = await Items(excalidrawData)
  f = `${FILE}.md`
  p = app.vault.getAbstractFileByPath(f)
  k = 1
  while(p){
    f = `${FILE} ${k++}.md`
    p = app.vault.getAbstractFileByPath(f)
  }
  p = await app.vault.create(f, s)
  app.workspace.activeLeaf.openFile(p)
} else {
  new Notice("Excalidrawデータが見つかりませんでした。")
}
%>

y座標で並べ替えるアクション。

最初は思ったふうにならなくて Copilot に「y座標順にならないけどなんで?」と尋ねたら「sortは文字列比較なのよ」と教えてくれて開眼。 スクリプト・エラーは生成AIに解読してもらえばいいんだ。 ラッキーなことである。

使い方

Excalidrawを「Open as Markdown」で開いてdecollage.mdを実行。

テキストだけ抜き出し、Decollageというノートに箇条書きで並びます。

並べ替えたくなったら、またExcalidrawに貼り付けるだけ。

まとめ

これでツールは揃いました。

実際に実用的なコラージュとはどういう使い方だろう。 今度はそちらを考えてみる。 テキストをリニアな縛りから解放するためには。