Skip to content

Instantly share code, notes, and snippets.

@mimikun
Created June 9, 2023 13:18
Show Gist options
  • Save mimikun/d9cbd65ab19b05f2d7f593b17347952f to your computer and use it in GitHub Desktop.
Save mimikun/d9cbd65ab19b05f2d7f593b17347952f to your computer and use it in GitHub Desktop.
Ctrl+Tでデイリーノートが開かれた後、Silhouette Insertしたい

Ctrl+Tでデイリーノートが開かれた後、Silhouette Insertしたい

使用プラグイン

  • Periodic Notes
  • Templater
  • Silhouette

キーバインド

  • Ctrl+T
    • Periodic Notes : Open daily Note

試したこと

obsidian mobile templater-pluginで、dailynote が、自動作成される時に、silhouette : insert task 等特定のコマンドを実行できるがどうか教えてください。 | Mond - 知の交流コミュニティ

を参考に、 dailyNoteTemplate.md を作成しました。

---
aliases: [{{date:YYYY/MM/DD}},{{date:YYYY年MM月DD日}},{{date:YYYY-MM-DD}},{{date:YYYY年M月D日}},{{date:YYYY-M-D}}]
tags: #{{date:YYYY/MM/DD}} #{{date:YYYY-MM-DD}} #{{date:YYYYMMDD}} #{{date:YYYY年MM月DD日}} #{{date:YYYY年M月D日}} #{{date:YYYY-M-D}} #daily-note
---

# {{date:YYYY年MM月DD日}}

## Daily TODO
<%* 
async function asyncSleep(ms) {
  return new Promise((resolve) => { setTimeout(() => { resolve(); }, ms); });
}

await asyncSleep(50) // waitを入れないとDaily Noteのタイトルから日付を読み込めない
app.commands.executeCommandById("obsidian-silhouette:insert-tasks")
%>

## 日記

この状態でCtrl+T押下にてデイリーノートを生成しました。

結果は以下の通りです。

- [ ] 洗濯物取り込み
- [ ] 洗濯物投入
- [ ] 風呂
- [ ] 洗濯物たたみ
- [ ] 洗濯機フィルタ掃除---
aliases: [2023/06/09,2023年06月09日,2023-06-09,2023年6月9日,2023-6-9]
tags: #2023/06/09 #2023-06-09 #20230609 #2023年06月09日 #2023年6月9日 #2023-6-9 #daily-note
---

# 2023年06月09日

## Daily TODO


## 日記

この通り、おかしな並び順になります。

おそらく以下のように処理されているのかと推測しています。

  1. (Ctrl+T押下により)ファイル名のみ、中身は空のデイリーノートが作成される
  2. Silhouette:Insert が実行される
  3. テンプレートのmarkdown部分が展開される

実現したい構成

以下の通りです。

---
aliases: [2023/06/09,2023年06月09日,2023-06-09,2023年6月9日,2023-6-9]
tags: #2023/06/09 #2023-06-09 #20230609 #2023年06月09日 #2023年6月9日 #2023-6-9 #daily-note
---

# 2023年06月09日

## Daily TODO
- [ ] 洗濯物取り込み
- [ ] 洗濯物投入
- [ ] 風呂
- [ ] 洗濯物たたみ
- [ ] 洗濯機フィルタ掃除

## 日記

Daily Todo 以下に、 Silhouette:Insert の実行結果が入る形となります。

どうすれば実現できるでしょうか?

@tadashi-aikawa
Copy link

tadashi-aikawa commented Jun 9, 2023

@mimikun

結論

dailyNoteTemplate.md を以下のようにして

---
aliases: [{{date:YYYY/MM/DD}},{{date:YYYY年MM月DD日}},{{date:YYYY-MM-DD}},{{date:YYYY年M月D日}},{{date:YYYY-M-D}}]
tags: #{{date:YYYY/MM/DD}} #{{date:YYYY-MM-DD}} #{{date:YYYYMMDD}} #{{date:YYYY年MM月DD日}} #{{date:YYYY年M月D日}} #{{date:YYYY-M-D}} #daily-note
---

# {{date:YYYY年MM月DD日}}

## Daily TODO
<% tp.file.cursor() %>
<%* 
async function asyncSleep(ms) {
  return new Promise((resolve) => { setTimeout(() => { resolve(); }, ms); });
}

await asyncSleep(50) // waitを入れないとDaily Noteのタイトルから日付を読み込めない
app.commands.executeCommandById("obsidian-silhouette:insert-tasks")
%>
## 日記

Templaterの Automatic jump to cursor を有効にすれば期待通りの結果となります。

image

Automatic jump to cursor を有効にしたくない事情がある場合は回避策もありますので言ってください

補足

おそらく以下のように処理されているのかと推測しています。

  1. (Ctrl+T押下により)ファイル名のみ、中身は空のデイリーノートが作成される
  2. Silhouette:Insert が実行される
  3. テンプレートのmarkdown部分が展開される

これは違うと思います。私の見解では以下のように動作していると思います。

  1. (Ctrl+T押下により) dailyNoteTemplate.md のテンプレートに従い、Daily Noteデイリーノートが作成される
    • 中身は空ではなくdailyNoteTemplate.md に日付が埋まった状態
    • カーソルはファイルの最初
  2. <%* %> で囲まれたJavaScriptの処理、つまり 0.05秒後に Silhouette:Insert が実行される (戻り値はファイル本体には挿入されない)
    • ファイルの先頭にタスクが挿入される => (事象通り)

問題はカーソル位置だけなので <% tp.file.cursor() %> でカーソル位置を指定してあげれば、2が実行されるまでの0.05秒間にカーソルが移動し、期待通りの位置にタスクが挿入されます。

Automatic jump to cursor を有効にしたくない場合は app を使った処理で行番号を指定してカーソルを移動することになると思います

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment