🧠 Obsidian · & le vault autoportant

Chapitre 06
Templater et QuickAdd : générer et capturer

Objectifs du chapitre

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

ExpressionProduit
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.titleLe 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 :

TypeEffet
CaptureAjoute une ligne à un fichier existant, sans l'ouvrir
TemplateCrée une note à partir d'un template, avec un nom calculé
MacroEnchaîne plusieurs actions
MultiUn menu qui regroupe plusieurs actions

La capture d'inbox

Configuration de l'action Capture du vault de référence :

RéglageValeur
Capture To00-inbox/{{DATE:YYYY-MM}}.md
Create file if it doesn't existactivé
Write to bottom of fileactivé
Capture formatactivé, - {{DATE:HH:mm}} : {{VALUE}}
Opendé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

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
  1. 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.json plutôt que l'interface :
    $ grep trigger .obsidian/plugins/templater-obsidian/data.json
    "trigger_on_file_creation_mode": "none"
  2. Aucune règle de dossier ne couvre 10-journal. Le mode est bien folder, mais folder_templates est vide ou vise un autre chemin.
  3. 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é.
  4. 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.