現在過去未来〜、 あの人に会ったならぁ〜♪
タスクカウンター
電卓の応用でカウンターが組めることに気づく。
`$= dv.pages().file.tasks.filter(x => !x.completed).length` tasks
未完了のタスクがいくつあるか表示します。CallOutとセットかな。
>[!example]- `$= dv.pages().file.tasks.filter(x => !x.completed).length` tasks >```dataview > task where !completed group by file.link >```
これで開く前にタスクの有無が見て取れます。
Room
Obsidianのファイル履歴を検索。 これにタスクカウンターをトッピング。
```dataviewjs const FOLDER = "keyword/" const s = "background:ivory;width:119px;height:112px;border:1px solid #eee;border-top:8px solid gold;text-decoration:none;padding:3px;border-radius:3px;margin:3px;overflow:hidden;float:left;" dv.span(">[!example]- `$= dv.pages().file.tasks.filter(x => !x.completed).length` tasks\n>```dataview\n> task where !completed group by file.link\n>```\n") const p = dv.el("input") p.placeholder = "..." p.style = "font-size:large;background:whitesmoke;border-radius:3px;" const btn = dv.el("button","▶︎") btn.style = "font-size:small;margin:5px;width:40px;" const h = dv.el("hr", "") h.style = "border:1px solid whitesmoke;margin:10px;" const b = dv.el("div", "") b.style = "font-size:small;font-weight:bold;height:4000px;" disp() p.onkeyup = () => disp() btn.onclick = () => { q = encodeURI(p.value) if(q){ open("obsidian://new?file=" + encodeURI(FOLDER) + q + "&content=%0A```query%0A" + q + "%0A```%0A") }else{ open("obsidian://new") } } function disp(){ r = new RegExp("("+ p.value +")","i") const d = dv.array(Object.entries(dv.app.metadataCache.fileCache)) .filter(([x,y]) => r.test(x)) .sort(([x,y]) => y.mtime, "desc") .limit(210) .map(([x,y]) => "<a class=internal-link style='" + s + "' href='" + x + "'>" + x.split("/").pop().replace(".md","") + "</a>") b.innerHTML = d.join("\n") } ```
使い方
ファイルの履歴がカード形式で並びます。 タップすれば開く。 検索で絞り込み。 検索欄右の「▶︎」で新規ノート作成です。
Obsidianの「現在・過去・未来」が扱える。 「現在」は新規ノートで「過去」はファイル履歴。 そこに「未来」のタスクリストがついている。
タスクリストは未完了タスクをファイルごとにグループ化して表示します。 チェックすればリストから消えます。 つまり、このページだけでタスクが片付くわけです。
実際は、動かないと片付かないけど。
まとめ
インライン・スクリプト、他に用途ないかな。