Accueil > Informatique > Emacs > org-protocol : partie 2
org-protocol : partie 2
mardi 9 février 2021, par
Cet article est le second d’une série de trois autour d’org-protocol et org-roam
– partie 1 : marque-page et capture
– partie 2 : marque-page et notes roam (V1)
– partie 3 : gestion de documents pdf avec org-roam (V1)
Pré-requis et contexte
- Debian buster sid
- emacs 26+ (testé avec emacs 27 et emacs 28) en mode client/server
- straight pour la gestion de paquets d’emacs
- un bureau compatible avec freedesktop (gnome/xfce/ etc.)
- firefox (ou chromium avec quelques adaptations)
- pandoc pour la conversion html—>org-mode
- wget pour capturer les pages
- sqlite3 pour gérer une base de notes
- graphviz pour générer des graphes de notes
apt-get install pandoc wget sqlite3 graphviz
Description
org-roam est un système de gestion de connaissances personnelles qui repose sur org-mode. Il permet de mettre en œuvre la méthode Zettel-Kasten sans l’imposer. Le nom fait référence à l’outil en ligne de prise de notes roam et bien sûr à org-mode.
Dans la méthode de prise de notes Zettel-Kasten, il y a deux phases :
– prendre des notes rapidement au fil de l’eau avec peu de travail éditorial (une idée, une remarque, un signet, une photo, un docuement, etc.)
– organiser ses notes, les lier entre elles, en supprimer, créer des index pour entrer dans une notion, etc.
org-roam répond parfaitement aux problématiques liées à la première phase et facilite la seconde. Mais ne rêvez pas ! Ce système ne crée pas de la connaissance à partir de notes éparses quand bien même elles seraient reliées par des liens.
Si cette méthode vous intéresse, voici quelques signets qui peuvent vous éclairer :
– Yann Herklotz - Introduction to Luhmann’s Zettelkasten
– Communicating with Slip Boxes by Niklas Luhmann
– Introduction to the Zettelkasten Method
– La prise de note intelligente avec la méthode Zettelkasten
Ce que permet réellement emacs, c’est de créer un système personnalisé de prise de notes qui :
– s’adapte à votre environnement ;
– stocke les données dans un format texte structuré pérenne ;
– s’intègre à l’éco-système worg.
De manière plus précise, chaque note roam est un fichier .org qui contient comme première ligne la balise
#+title: un joli titre
toutes les notes doivent avoir un titre unique.
D’autres balises peuvent-être ajoutées :
– #+roam_tags : pour des mots clefs qui servent à accélérer la recherche d’une note
– #+roam_keys: : pour des références, bibliographique par exemple.
voir la documentation pour plus de détails.
Objectifs de cet article
Il s’agit de poursuivre la capture de signet commencée dans la partie 1 en créant une note roam à chaque capture de signet. Pour ne pas avoir de double saisie, les notes sur le signet seront incluses dans la note roam grâce à l’extension org-transclusion.
Mise en œuvre
Commençons par créer un répertoire pour les notes
mkdir -p ~/Documents/Memo/roam
Installation et configuration de org-roam
(use-package org-roam
:straight t
:after org
:hook
(
(org-mode . org-roam-mode)
;(after-init . org-roam--build-cache-async) ;; optional!
)
:custom
(org-roam-directory "~/Documents/Memo/roam/")
(org-roam-capture-ref-templates '(("d" "default" plain #'org-roam-capture--get-point "%?" :file-name "%<%Y%m%d%H%M%S>-${slug}" :head "#+title: ${title}
#+ROAM_tags: ${tags}
" :unnarrowed t)))
:bind
(("C-c r l" . org-roam)
("C-c r t" . org-roam-today)
("C-c r f" . org-roam-find-file)
("C-c r i" . org-roam-insert)
("C-c r g" . org-roam-show-graph))
:config
(defun makeroamnote()
"création d'une note roam à l'aide de CUSTOM_ID"
(if (cdr (assoc "CAPTURE" (org-entry-properties nil "CAPTURE")))
(let* (
(myhead (nth 4 (org-heading-components)) )
(mytitle (replace-regexp-in-string "\\(\\[\\[.*\\]\\[\\)\\(.*\\)\\]\\]" "\\2" myhead ))
(myid (car (last (org-property-values "CUSTOM_ID"))))
(mytag (concat "#+roam_tags:" (replace-regexp-in-string ":" " "(nth 5 (org-heading-components)) )))
(myurl (car (last (org-property-values "URL"))))
)
(message (concat "création d'une note roam pour " mytitle))
(with-temp-file (concat "./roam/" myid ".org")
(insert
(concat "#+title: "
mytitle
"\n#+include: \"../note.org::#" myid "\"\n"
mytag
"\n#+roam_key: " myurl "\n\n* "
myhead
"\n#+transclude: t\n[[../note.org::#" myid "][Contenu capturé]]"
))
)
(org-roam-db-build-cache) ;; mise à jour du cache
)
(message "création d'un signet sans note roam ")
))
:init
(require 'org-roam-protocol)
(add-hook 'org-capture-prepare-finalize-hook 'makeroamnote)
)Installation et configuration de deft un paquetage pour parcourir facilement les notes.
(use-package deft
:straight t
:after org
:bind
( ("C-c r d" . deft)
("C-c r r" . deft-refresh))
:custom
(deft-recursive t)
(deft-use-filter-string-for-filename t)
(deft-default-extension "org")
(deft-directory "~/Documents/Memo/roam/" )
)Installation et configuration de org-transclusion.
(use-package org-transclusion
:straight (org-transclusion :type git :host github :repo "nobiot/org-transclusion" :fetcher github)
:after (org)
:config
(define-key global-map (kbd "<f12>") #'org-transclusion-mode)
)Utilisation
L’ensemble fonctionne comme expliqué dans le précédent article à la différence qu’à chaque capture d’un signet, une note roam est créée dans le répertoire ~/Documents/Memo/roam.
Voici quelques raccourcis clavier
– C-c r d : liste les notes avec deft ;
– C-u o : ouvre une note en scindant la fenêtre en deux ;
– C-c r f : ouvre une note (les mots clefs (roam_tags) servent de filtre) ;
– C-c r i : insère un lien vers une note dans la note courante ;
– F12 : transclusion mode affiche le contenu d’une note liée dans une note ;
– C-c r g : crée un graphe avec les notes.
et quelques illustrations :
capture
transclusion
liens et retro-liens
Conclusion
C’est encore un peu expérimental, ces paquetages (merci à leurs auteurs) pour emacs sont encore jeunes et peuvent évoluer rapidement (modifications à prévoir :( ). Après, à chacun de trouver ses outils et son mode de fonctionnement.
Le paquetage org-roam permet de réaliser un graphe des connaissances en svg. Mieux, le paquetage org-roam-server permet de rendre le graphe plus coloré et plus dynamique.
Le fichier init.el
Voir en ligne : org-roam
Heptagone