Chapitre 06
Templater et QuickAdd : générer et capturer
Objectifs du chapitre
- Écrire un template Templater qui produit un front-matter valide et daté.
- Configurer le déclenchement automatique — et comprendre pourquoi l'interrupteur seul ne suffit pas.
- Mettre en place une capture en une touche avec QuickAdd.
- Savoir que l'identifiant de commande d'une action QuickAdd n'est pas devinable, et ce que ça implique pour un raccourci.
1. Pourquoi Templater
Le plugin cœur Templates insère du texte avec trois variables. Templater exécute du code au moment de l'insertion : dates calculées, titre du fichier, saisie demandée à l'utilisateur, position du curseur.
La différence se voit sur le cas le plus banal, un front-matter daté. Avec Templates,
{{date}} donne la date du jour au format fixé dans les réglages. Avec Templater,
tu choisis le format à l'endroit où tu écris, et tu peux calculer.
---
type: daily
title: <% tp.date.now("dddd D MMMM YYYY") %>
created: <% tp.date.now("YYYY-MM-DD") %>
updated: <% tp.date.now("YYYY-MM-DD") %>
scope: work
projects: []
tags: []
---
## Fait
## Bloqué
## Prochaines actions
C'est le template de note quotidienne du vault de référence. Les deux dates ISO alimentent le contrat du chapitre 3 ; le titre en toutes lettres est pour l'œil.
2. Les expressions utiles
| Expression | Produit |
|---|---|
tp.date.now("YYYY-MM-DD") | La date du jour, au format demandé |
tp.date.now("YYYY-MM-DD", -1) | Hier — le second argument est un décalage en jours |
tp.file.title | Le nom du fichier, sans extension |
tp.file.cursor() | Où placer le curseur après insertion |
tp.system.prompt("Client ?") | Demande une saisie et insère la réponse |
tp.system.suggester(["a","b"], ["a","b"]) | Propose une liste de choix |
tp.file.include("[[autre]]") | Insère une autre note |
Deux syntaxes de balise : <% … %> insère le résultat,
<%* … *%> exécute du JavaScript sans rien insérer — pour une logique
conditionnelle.
Un template est le meilleur endroit pour faire respecter le contrat de données. Si tous
les projets naissent du même template, ils portent tous type,
status, created et updated, écrits pareil. Le validateur du
chapitre 10 n'a alors plus grand-chose à signaler — il devient un filet, pas un
correcteur permanent.
3. Le déclenchement automatique, et son piège
Insérer un template à la main, c'est une commande de plus à lancer. On veut que la création
d'une note dans 10-journal/ applique le template toute seule.
Templater a un réglage pour ça, « Trigger Templater on new file creation ». On l'active, on
crée une note quotidienne… et le front-matter contient toujours
<% tp.date.now("YYYY-MM-DD") %> en toutes lettres.
L'interrupteur ne suffit pas. Le code du plugin ne réagit que si un mode est choisi :
settings.trigger_on_file_creation && settings.trigger_on_file_creation_mode === "folder"
settings.trigger_on_file_creation && settings.trigger_on_file_creation_mode === "regex"
Les trois valeurs possibles sont none, folder et
regex. Le défaut est none, et dans l'interface le menu du mode
n'apparaît que si l'interrupteur est déjà activé. On active donc
l'interrupteur, on ne voit pas le menu qui vient d'apparaître plus bas, et rien ne se
déclenche — sans le moindre message.
La configuration qui marche, en mode dossier :
trigger_on_file_creation: true
trigger_on_file_creation_mode: folder
folder_templates:
- folder: 10-journal
template: 90-meta/templates/daily.md
Toute note créée sous 10-journal/ reçoit désormais le template, évalué. Le mode
regex fait la même chose sur une expression régulière de chemin, quand la règle ne
se réduit pas à un dossier.
Le template de Daily Notes (chapitre 4) et le template de dossier Templater peuvent coexister : Daily Notes insère le contenu brut, Templater le remplace par la version évaluée. Garder les deux est un filet utile — si Templater ne se déclenche pas, tu obtiens le template brut plutôt qu'une note vide, et le symptôme est visible immédiatement.
4. QuickAdd : capturer sans quitter
Une idée arrive pendant que tu fais autre chose. Si la noter coûte « créer une note, choisir un dossier, remplir cinq champs », tu ne la notes pas. QuickAdd ramène ce coût à une touche.
Le plugin propose quatre types d'action. Une seule est indispensable :
| Type | Effet |
|---|---|
| Capture | Ajoute une ligne à un fichier existant, sans l'ouvrir |
| Template | Crée une note à partir d'un template, avec un nom calculé |
| Macro | Enchaîne plusieurs actions |
| Multi | Un menu qui regroupe plusieurs actions |
La capture d'inbox
Configuration de l'action Capture du vault de référence :
| Réglage | Valeur |
|---|---|
| Capture To | 00-inbox/{{DATE:YYYY-MM}}.md |
| Create file if it doesn't exist | activé |
| Write to bottom of file | activé |
| Capture format | activé, - {{DATE:HH:mm}} : {{VALUE}} |
| Open | désactivé |
Résultat : Ctrl+Maj+I, tu tapes, c'est rangé.
# 00-inbox/2026-08.md
- 09:12 : vérifier la rétraction bras 3 avant le FAT
- 14:47 : demander les captures PROFINET à l'intégrateur
Open désactivé est le réglage qui compte : l'intérêt de la capture est de ne pas quitter ce que tu fais. Une capture qui ouvre un fichier est une interruption.
Le dossier 00-inbox/ est délibérément hors du périmètre de
validation du vault de référence : la capture n'a pas de front-matter, et c'est
voulu. Le contrat de données s'applique au tri, pas à la capture — sinon la capture coûte de
nouveau quelque chose, et l'outil ne sert plus à rien.
L'identifiant de commande
Pour qu'une action QuickAdd reçoive un raccourci, il faut d'abord l'exposer comme commande — l'icône éclair dans la liste des actions. Le raccourci s'assigne ensuite dans Settings → Hotkeys.
QuickAdd enregistre ses commandes sous un identifiant construit avec l'uuid de l'action, pas avec son nom :
"quickadd:choice:61a731e5-7663-49b9-8676-ae7024578ed0": [
{ "modifiers": ["Mod", "Shift"], "key": "I" }
]
Écrire quickadd:capture dans un fichier de configuration, en supposant que
l'identifiant suit le nom, produit une entrée qui ne correspond à aucune commande. Obsidian
la conserve sans broncher et le raccourci ne fonctionne pas. C'est arrivé au vault de
référence, et il a fallu lire hotkeys.json pour s'en apercevoir.
Bonne nouvelle : l'uuid est stable tant que l'action existe, et il vit dans les réglages du plugin. Si ces réglages sont eux-mêmes décrits (partie II), l'identifiant reste valide sur une machine reconstruite.
5. Ce que ces deux plugins décident vraiment
Templater et QuickAdd n'ajoutent aucune fonction visible au vault. Ils déplacent un curseur : le coût d'écrire.
Un vault où créer une fiche demande huit gestes se remplit de notes bâclées et de champs manquants. Le même vault avec un template et une capture se remplit de notes conformes, parce que la voie conforme est devenue la plus rapide.
C'est le principe à retenir de tout le cours : on ne fait pas respecter une convention par de la discipline, on la fait respecter en la rendant moins chère que l'alternative. Le validateur attrape ce qui passe au travers ; le template évite que ça passe.
Récapitulatif
- Templater exécute du code à l'insertion :
tp.date.now(),tp.file.title,tp.system.prompt(). - Le déclenchement automatique exige l'interrupteur et un mode
(
folderouregex) — l'interrupteur seul ne fait rien. - QuickAdd Capture ajoute une ligne à un fichier sans l'ouvrir : c'est la capture à coût zéro.
- L'inbox n'a pas de front-matter, par conception.
- L'identifiant de commande d'une action QuickAdd contient un uuid : il ne se devine pas.
- Un template bien fait remplace la discipline par de la facilité.
Exercices
Exercice 1 — Écrire un template de fiche projet
Écris un template Templater pour une note de type project : le titre vient du
nom du fichier, les dates sont celles du jour, le statut démarre à active, et le
curseur se place sous le titre « Contexte ».
Voir la solution
---
type: project
title: <% tp.file.title %>
created: <% tp.date.now("YYYY-MM-DD") %>
updated: <% tp.date.now("YYYY-MM-DD") %>
scope: work
status: active
repo:
milestones: []
tags: []
---
## Contexte
<% tp.file.cursor() %>
## Jalons
## Décisions
Deux points. repo: est laissé vide plutôt qu'omis : le champ est optionnel,
mais le voir vide rappelle qu'il existe — un champ absent est un champ oublié.
Et status: active en dur plutôt qu'un tp.system.suggester :
une fiche projet qu'on crée est active par définition. Demander à la création coûte un
geste pour une réponse connue d'avance.
Exercice 2 — Diagnostiquer un template inerte
Une note créée dans 10-journal/ contient littéralement
created: <% tp.date.now("YYYY-MM-DD") %>. Liste les causes possibles, de la
plus probable à la moins probable.
Voir la solution
- Le mode de déclenchement est resté à
none. Cause numéro un, parce que le menu du mode n'apparaît qu'après activation de l'interrupteur et qu'on ne le voit pas. Vérifier.obsidian/plugins/templater-obsidian/data.jsonplutôt que l'interface :$ grep trigger .obsidian/plugins/templater-obsidian/data.json "trigger_on_file_creation_mode": "none" - Aucune règle de dossier ne couvre
10-journal. Le mode est bienfolder, maisfolder_templatesest vide ou vise un autre chemin. - C'est Daily Notes qui a inséré le template, et Templater n'est pas intervenu du tout. Symptôme identique, cause différente : le contenu vient bien du bon fichier, mais personne ne l'a évalué.
- Le template a été inséré avant l'activation et la note date d'avant. Vérifier la date de la note avant de chercher plus loin.
Méthode générale : lire le data.json du plugin plutôt que son interface. Le
fichier dit ce qui est enregistré ; l'interface dit ce qu'on croit avoir réglé.
Exercice 3 — Décider du bon outil
Tu veux qu'à chaque compte-rendu de réunion, une note soit créée dans
30-projets/, nommée reunion-AAAA-MM-JJ-<client>, le client
étant demandé à la saisie. Templater, QuickAdd, ou les deux ?
Voir la solution
Les deux, chacun à sa place.
Templater sait demander une saisie et calculer une date, mais il ne crée pas la note ni ne décide de son nom quand on part de zéro : il s'applique à une note existante ou au moment de sa création.
QuickAdd, action de type Template, fait exactement ça : nom de fichier calculé, dossier cible, template appliqué. On lui donne :
- Template Path :
90-meta/templates/reunion.md - File Name Format :
reunion-{{DATE:YYYY-MM-DD}}-{{VALUE}} - Folder :
30-projets
{{VALUE}} déclenche la demande de saisie de QuickAdd — le client. Le
template, lui, reste un template Templater ordinaire et peut réutiliser la valeur.
Le partage des rôles : QuickAdd décide où et sous quel nom, Templater décide de quoi la note est faite.
Réserve, avant de construire tout ça : est-ce que ce compte-rendu mérite un type de note à lui ? Le vault de référence a délibérément trois types seulement, et traite les réunions comme des sections de notes quotidiennes. Un mécanisme de création qu'on utilise deux fois par an coûte plus cher à maintenir qu'il ne rapporte.