Jazzと読書の日々

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

Obsidian:段落をCanvasのカードに変換する

昔作ったTemplaterスクリプトを見直しました。

Tarot

Markdownファイルをcanvasに変換します。

今回は段落単位でカード化するようにしました。 空行が切れ目になります。 ここのところの「Markdownの本質は段落である」という考察の成果です。

tarot.md

canvasの保存先を変数FOLDERで設定してください。

<%*
FOLDER = "canvas/"

const pos = [0, 1, 0, -1]
const d = tp.file.content.split("\n\n")
p = []
for(i=0; i < d.length; i++){
  if(d[i]){
    a = {}
    a.id = i
    a.x = pos[i%4] * 200
    a.y = pos[(i+1)%4] * 200
    a.width = 300
    a.height = 80
    a.type = "text"
    a.text = d[i]
    p.push(JSON.stringify(a))
  }
}
s = '{"nodes":[' + p.join(",") + ']}'
c = FOLDER + tp.file.title
f = c + ".canvas"
p = app.vault.getAbstractFileByPath(f)
k = 1
while(p){
  f = c + " " + (k++) + ".canvas"
  p = app.vault.getAbstractFileByPath(f)
}
p = await app.vault.create(f, s)
app.workspace.activeLeaf.openFile(p)
%>

使い方

スクリプトを実行すると、 段落がカードとなって4つの山に分配されます。

このカードを移動することで再分配する。

その結果を昨日のCopilotでグループ分けしようという狙いです。

結果

カード化はうまくいくし、グループ分けもいいのですが、 グループ内の並び順ですね。 必ずしも「上から下へ」になっていません。

これはプロンプトで「yの昇順で」とつけた方がいいのだろうか。 そう思って試してみると今度はyの値を並べたリストが返ってきます。

どうもgeminiと心が通わない。

まとめ

カード化はいいアイデアだと思う。 プロンプトが問題だなあ。