PlaylistとSetlistの統合版。
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 + "](" + p + "new) \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) %>
使い方
Playlistスクリプトを実行すると、同じフォルダ内にあるファイルの目次を作成します。 チェックボックス付きのファイル一覧です。 これを「プレイリスト」と呼びます。
今回、初期状態ではチェックボックスを空ボックスにしました。 考えてみると、まだ何も書いていない。 未完了。 書き上げてからチェックするのがわかりやすい。
それと下位フォルダのファイルは表示しないようにしました。 書き換えたとき、古いほうをアーカイヴしておくとか、下位フォルダを使うことがあるので。
コンパイル
チェックボックスをチェックし、プレイリストでPlaylistスクリプトを実行すると、チェックされたファイルの中身を並んでいる順に連結します。 これを「コンパイル」と言います。 merge.mdというファイルが生成します。
新規作成
プレイリストの1行目にあるフォルダ名をタップすると、新しいファイルを作成します。
ファイルを書き換えてからPlaylistスクリプトを実行すると、そのファイルへのリンクをプレイリストに追加します。 これでどんどん書き進めていきます。
セットリスト
今回の大きな変更点は「セットリスト」です。 チェックがまだない状態でPlaylistを実行すると、プレイリストが「セットリスト」になります。
セットリストは見出し形式のリストで、右サイドパネルの「アウトライン」が使えます。 ドラッグで並べ替えできる。 段差も見出しのレベルを変えて対応。 折りたためる。
そのあと再びPlaylistを実行するとプレイリスト形式に変換します。
注意
Templaterからdataviewを呼び出す実験の副産物です。 プラグインの柔軟性に驚きますね。 何もなければ、自力で組み上げることは無理だったと思います。
なのでdataviewをインストールしてお使いください。
CheckOut.md
一気にチェックするスクリプトは下記になります。
<%* s = tp.file.content if(/- \[x\]/.test(s)){ s = s.replace(/- \[x\]/mg, "- [ ]") }else{ s = s.replace(/- \[ \]/mg, "- [x]") } e = app.workspace.activeLeaf.view.editor e.setValue(s) %>
一つでもチェックがあると全部のチェックをリセットします。 トグルで。
まとめ
トンテンカン。 分割執筆は大工さん気分。
追記 9/9 21:00
エディタの設定で「タブの使用」がONになっていると段差の判定ができなくなることがわかりました。 それで、タブに対応したスクリプトに差し替えました。 申し訳ない。