不具合の修正です。
Playlist
章ごとに文章を書き、後で連結するアクションです。
新規ファイルを書くときですね。 newって名前のファイルを作るものの、タイトルを書き換えるとplaylist自体のリンク先も書き変わってしまいます。 つまり、1回しか効果がなかった。 あまり使わなかったので気づいていませんでした。
今回はその修正になります。
Playlist.md
Templaterに登録してお使いください。
<%* p = tp.file.folder(true) + "/" q = "playlist" const t = tp.file.title if(t == "playlist"){ s = tp.file.content if(/^\- /m.test(s)){ if(/\- \[x\]/.test(s)){ q = "merge" const a = s.split("\n") s = "" for(i=0; i<a.length; i++){ if(/- \[x\] /.test(a[i])){ const m = a[i].split("- [x] ") s+= m[0].replace(/\t/g, " ").replace(/\s{4}/g, "#").replace(/\s+/g, "#") + "## " f = m[1].replace(/.*\[\[(.+?)\]\].*/, "$1") s+= f + "\n\n" f = p + f + ".md" b = app.vault.getAbstractFileByPath(f) if(b){ const c = await app.vault.read(b) s+= c.replace(/([^!])\[\[(.+?)\]\]/mg, "$1$2") + "\n" } } } }else{ s = s.replace(/\t/mg, " ") s = s.replace(/^ {4} +- /mg, "#### ") s = s.replace(/^ +- /mg, "### ") s = s.replace(/^- /mg, "## ") } }else{ s = s.replace(/^#{4} /mg, " - ") s = s.replace(/^#{3} /mg, " - ") s = s.replace(/^#{2} /mg, "- ") s = s.replace(/\n+/g, "\n") s = s.replace(/\n/, "\n\n") } }else{ const d = DataviewAPI.pages("") .filter(x => p == x.file.folder + "/") .filter(x => !x.file.name.includes(q)) .filter(x => !x.file.name.includes("merge")) .sort(x => x.file.name) .map(x => "- [ ] [[" + x.file.name + "]] ") s = "[" + p + "](obsidian://new?file=" + encodeURI(p) + ") \n\n" s+= d.join("\n") } f = p + q + ".md" p = app.vault.getAbstractFileByPath(f) if(p){ if(t != "playlist" && q == "playlist"){ s = await app.vault.read(p) if(t != "merge" && s.indexOf("[[" + t + "]]") < 0) s+= "\n- [ ] [[" + t +"]] " } await app.vault.modify(p, s) }else{ p = await app.vault.create(f, s) } app.workspace.activeLeaf.openFile(p) %>
URLスキームで新規ファイルを作成するようにしました。
使い方
フォルダにファイルを集め、その中のどれかでPlaylistを実行すると、フォルダ内のファイルリストを作ります。
チェックを入れると、そのファイルを順番にマージします。
チェックのない状態だと「アウトライン」で並べ替えできる形式に変換します。 もう一度実行すると元の形式に戻す。
1行目のフォルダ名をタップすると新規ファイルを作成します。 もう一度実行すると、その新しいファイルを追加したリストに変更します。
Markdownリンク
MarkdownにURLスキームを埋め込むことができる。
[新規作成](obsidian://new)
こんな感じですね。 これって普通の文中でも使えるのでスクリプトでなくても構いません。 ほかのアプリを呼び出したりできます。 Obsidianの外と繋がっている。
もう少し面白い活用法はないかな。
まとめ
このアクション、Obsidianの底力を感じます。