Obsidianを起動して最初に開くページ。 それを「ホームページ」と呼びます。 要するに「開きっぱなしにするページ」です。 何をするにもまずここから。
Room
個人的にはObsidianを「ローカルのインターネット・ブラウザ」と見ているので、履歴が視覚化されるとわかりやすい。 ブラウザのメタファーでテキストを扱える。
Roomはそれを補助するためのdataviewスクリプトです。
Room.md
「+」の位置がちょっと変わっています。 あとデザインも細かく変更しました。 ファイルが多くなると表示が重くなるので、200項目までのリミッターもつけました。
>[!example]- Room
>```dataview
>task where !completed group by file.link
>```
```dataviewjs
s = "background:ivory;width:120px;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;"
const p = dv.el("input")
p.placeholder = "..."
p.style = "font-size:18px;background:whitesmoke;border-radius:3px;"
const btn = dv.el("button","+")
btn.style = "font-size:12px;margin:5px;width:40px;"
dv.paragraph("---")
const b = dv.el("div","")
b.style = "font-size:small;font-weight:bold;height:5000px;"
disp()
p.onkeyup = function(){
disp()
}
btn.onclick = function(){
open("obsidian://new?file=" + encodeURI(p.value))
}
function disp(){
r = new RegExp("("+ p.value +")","i")
d = dv.array(Object.entries(dv.app.metadataCache.fileCache))
.filter(([x,y]) => r.test(x))
.sort(([x,y]) => y.mtime, "desc")
.limit(200)
.map(([x,y]) => "<a style='" + s + "' href=obsidian://open?file=" + encodeURI(x) + ">" + x.split("/").pop().replace(".md","") + "</a>")
b.innerHTML = d.join("\n")
}
```
スマホ対策
dataviewjsの1行目にある変数sでスタイルをカスタマイズできます。
カードの色はivoryよりwhitesmokeがいい、とか自由に書き換えてお使いください。 物事見た目が大事。
iPadでデザインしているので、スマホだと右余白が大きく空いてしまいます。 これも変数sの「width:120px;」を変更してみてください。 「width:110px;」でうまくいくかもしれないし「width:100px;」がいい感じかもしれない。
テーマによっても最適値は異なるようです。
Homepage
Homepageというプラグインがあって、これを使うと起動後最初に開くページとしてRoomを指定できます。
まとめ
「これからすること」「いまできること」「これまでしたこと」。 この三つが画面に収まっている。 Roomは「時間」を扱うツールなんだなと思う。
追記
フォルダを絞り込みたい場合はフィルタで対処します。
.filter(([x,y]) => r.test(x))
という行の前に、
.filter(([x,y]) => x.includes("Inbox/"))
といった一行を追加してください。
対象のフォルダを増やすときは||
で繋いでください。
.filter(([x,y]) => x.includes("Inbox/") || x.includes("Archive/"))