Jazzと読書の日々

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

Obsidian Playlist で分割執筆を加速する

不具合の修正です。

Playlist

章ごとに文章を書き、後で連結するアクションです。

新規ファイルを書くときですね。 newって名前のファイルを作るものの、タイトルを書き換えるとplaylist自体のリンク先も書き変わってしまいます。 つまり、1回しか効果がなかった。 あまり使わなかったので気づいていませんでした。

今回はその修正になります。

Playlist.md

Templaterに登録してお使いください。

Import Obsidian: Playlist

<%*
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の底力を感じます。