はじめに

QuickAddを使いたくなってきた。特にCapture機能。
しかし、Templater信者なのでまずはTemplaterで試してみる。
QuickAddでできてTemplaterにできないことはない(盲信)。

一例目:デイリーノートにタスクを追加する

全体のコード

const task = await tp.system.prompt("タスクを入力してください", null, true, false);
if (!task || task.trim() === "") { return; }
const today = moment().format("YYYY-MM-DD");
let file = tp.file.find_tfile(today);
if (!file) {
	tp.file.create_new(`- [ ] ${task}`, today, false, "DailyNotes");
} else{
	const content = await app.vault.read(file);
	await app.vault.modify(file, `- [ ] ${task}\n${content}`);
}

デイリーノートの最上段にタスクを追加する。
各行解説する。

入力部分

const task = await tp.system.prompt("タスクを入力してください", null, true, false);
if (!task || task.trim() === "") { return; }

tp.system.promptは4変数で

  1. メッセージ
  2. デフォルト値
  3. 入力しなかったときにキャンセルするか
  4. 入力ボックスをマルチラインにするか

2行目でnullやスペースが返ったときに中断

Tfileをみつける

const today = moment().format("YYYY-MM-DD");
let file = tp.file.find_tfile(today);

一行目で今日のデイリーノート名を取得する。
tp.file.find_tfileはファイル名からTfileを探してきてくれる。
Tfileを取得できるとファイルの直接編集ができる。

デイリーノートがなければ新規作成

if (!file) {
	tp.file.create_new(`- [ ] ${task}`, today, false, "DailyNotes");
} 

tp.file.create_newは4変数で

  1. 本文の内容 or テンプレートになるTfile
  2. ファイル名
  3. 作ったあとに開くかどうか
  4. どのフォルダに作るか

デイリーノートがあれば編集

else{
	const content = await app.vault.read(file);
	await app.vault.modify(file, `- [ ] ${task}\n${content}`);
}

app.vault.readはTfileの本文を取得する。取得だけならcachを取得するコマンドのほうが軽いが、編集する場合はこっちじゃないとだめとDeveloperページに書いてある。

app.vault.modifyで内容を編集して、入力したタスクを冒頭に追加する。

二例目:特定のノートの特定の部分に追加

ToDoという名称のファイルにタスクを羅列しているという仮定とする。

  • Inbox
    • タスク1
    • タスク2

全体のコード

const task = await tp.system.prompt("タスクを入力してください", null, true, false);
if (!task || task.trim() === "") { return; }
 
let file = tp.file.find_tfile("ToDo");
if ( !file ) { return; }
 
const content = await app.vault.read(file);
if (!content.includes("- Inbox")) { return; }
 
const updatedContent = content.replace("- Inbox", `- Inbox\n\t- ${task}`); 
await app.vault.modify(file, updatedContent);

最後の所以外はほぼ流用できている。
ノートの内容をincludeでチェックし、replaceで置換しているだけ。

まとめ

  1. tp.file.find_tfileでTfileを取得
  2. app.vault.readで本文を取得→好きなだけ編集する
  3. app.vault.modifyで編集した本文を返す

おわりに

QuickAddでいいじゃんと思うかもしれないが、\tとか特殊文字は対応してないし、今後の拡張性を考慮するとやはりTemplaterがベターに思える。