Jazzと読書の日々

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

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

長編小説も大論文もまず目次から。

Playlist

フォルダ内にあるファイルの目次を作るスクリプトです。

章ごとにファイルを書いて、最後にマージで連結する。 ScrivenerやUlyssesでお馴染みの分割執筆ですが、これがObsidianでもできるようになります。

詳しい使い方は前回の記事を参照してください。

変更点

実際に使ってみると、新規ファイルで困る。 執筆用フォルダがあるのに、Obsidianの新規ファイルはデフォルトに飛ばされます。

今までは、文章を書いてからフォルダの移動をしていました。 労力を使いますよね。 執筆自体には関係ないのに手間がかかる。 こういうのは避けたい。

なのでプレイリストの1行目、フォルダ表示の部分をタップすると新規作成になるように改良しました。

Playlist.md

下記インポートだとTemplateフォルダにスクリプトを保存します。 Templaterで指定したフォルダに移してからお使いください。

Import Obsidian: Playlist

<%*
p = tp.file.folder(true) + "/"
q = "playlist"
t = tp.file.title
if(t == q){
  s = tp.file.content
  q = "merge"
  const a = s.match(/\[x\] \[\[.+?\]\]/mg)
  s = ""
  for(i=0; i<a.length; i++){
    f = p + a[i].replace(/\[x\] \[\[(.+?)\]\]/, "$1.md")
    b = app.vault.getAbstractFileByPath(f)
    s+= await app.vault.read(b) + "\n"
  }
}else{
  const d = DataviewAPI.pages("")
    .filter(x => x.file.path.includes(p))
    .filter(x => !x.file.name.includes(q))
    .filter(x => !x.file.name.includes("merge"))
    .sort(x => x.file.name)
    .map(x => "- [x] [[" + x.file.name + "]] ")
  s = "<a class=internal-link href='" + p + "new'>" + p + "</a>\n\n"
  s+= d.join("\n")
}
f = p + q + ".md"
p = app.vault.getAbstractFileByPath(f)
if(p){
  if(q != "merge"){
    s = await app.vault.read(p)
    if(t!="merge" && s.search("\[\[" + t + "\]\]") < 0) s+= "\n- [x] [[" + t +"]] "
  }
  await app.vault.modify(p, s)
}else{
  p = await app.vault.create(f, s)
}
app.workspace.activeLeaf.openFile(p)
%>

Commanderでタブバーに置くと便利です。

使い方

何かファイルを書いてPlaylistスクリプトを実行。 すると目次ファイル「プレイリスト」を表示します。 小文字始まりの playlist.md になります。

1行目にフォルダ・リンクがあるので、これをタップしてみてください。 newというファイルが作成されます。 ファイル名を書き換えてPlaylistを実行すると、プレイリストに戻ります。 すると新しいファイルも目次に追加され、タップで開くことができます。

プレイリスト上でPlaylistを実行すると、チェックボックスのついたファイルを連結し、mergeというファイルを作成します。 これが完成版となる仕組み。

まとめ

自分でも気に入っています。 目次の管理が全体構成を見やすくする。

8/8

スクリプトを修正しました。