notebook

都内でWEB系エンジニアやってます。

ObsidianでTemplaterから他のプラグインのAPIを呼び出す

TemplaterからDataview pluginのAPIを呼び出したいというパターンがあったのでDiscord探してみたらすぐ見つかった

Discord

結論

const dv = this.app.plugins.plugins["dataview"].api;

これでOKっぽい

すごい、Dataviewはやっと慣れてきたのでデータの取り回しとかはある程度把握できてきたと感じているので結構幅が広がる

事例

具体的な事例としては、Podcastで聞いたものリストをDailyNoteに記録していて、Dataviewでサマリー表示している

サマリー表示する際に、[name:: hogefm] [num:: 1]のようにラベルを付与してこのタスクはどのPodcastでエピソード何なのかという情報を付与している

で、毎度携帯画面を見ながら入力するのがだるくなってきた+表記揺れが発生したのでTemplaterのSuggesterを使ってすでにある場合はそこから選択できるようにした

  • templates/podcast.md
<%*
  const dv = this.app.plugins.plugins["dataview"].api;
  const tasks = dv.pages("#daily").file.tasks.where(t => t.completed && t.section.subpath === "Podcast");
  const podcasts = tasks.map(t => t.name).distinct();
  const selectedName = (await tp.system.suggester((name) => name, podcasts));
%><% selectedName %><% tp.file.cursor() %>

入力後は行末にカーソルが移るようにtp.file.cursor()も記述している

これをTemplaterのHotKeyの部分に登録して、実際にHotKeyを設定しなくても編集中に/でコマンド自体は呼び出せるのでそれを使っている

  • HotKeyへ追加

  • 使用イメージ

おわり

Discordのdataviewチャンネルとtemplaterチャンネルがサンプルコードの宝庫っぽい感じがしている

全然追えてないがGitHubとかよりサンプルありそうな気がしている

タグとかは補完精度がそれなりによいので気にしていなかったが特定文脈でこういうのが欲しいっていうのはあって、そういうケースをさくっと解決できてしまう仕組みがあるのはよいなーと感じた