Jazzと読書の日々

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

Obsidian Roomで内容検索を出すようにした

まだニセモノだけど。

Room

Obsidianのファイル履歴をカード形式で表示します。

Scrapboxのホーム画面をイメージしましたが、ファイル名しか出ないんですよね。 いろいろ試してもdataviewで内容取得はできないようです。 非同期処理になるからみたい。

それで別の方法を考えました。

Room.md

dataviewスクリプト。 リーディングビューで開いてください。

Import Obsidian: Room

>[!example]- Room
>```dataview
>task where !completed group by file.link
>```

```dataviewjs
const FOLDER = "keyword/"

const 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(){
  q = encodeURI(p.value)
  if(q){
    open("obsidian://new?file=" + encodeURI(FOLDER) + q + "&content=%0A```query%0A" + q + "%0A```%0A")
  }else{
    open("obsidian://new?content=")
  }
}

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 class=internal-link style='" + s + "' href='" + x + "'>" + x.split("/").pop().replace(".md","") + "</a>")
  b.innerHTML = d.join("\n")
}
```

内容検索

検索欄にキーワードを入力するとファイル名の絞り込みをします。 該当するカードだけ表示される。 ここまでは従来どおり。

ここで「+」をタップすると、そのキーワードで内容検索した結果をファイルにして開きます。 ファイルは変数FOLDERで指定したフォルダに作成。

タップするとその行のところを開きます。

もしキーワードのない状態で「+」を押した場合は、通常の新規作成になります。 新しいファイルを作るにはこの方法が速い。

Query Control

使っているのはObsidian標準の query 。 これだけだと使いにくいですが、プラグインの Query Control を使うと検索結果を変更できます。 更新日順に並べたりできますよ。

まとめ

このキーワードが2Hop Linksの中継点になったりする。