Accueil > Informatique > Emacs > org-protocol : partie 2

org-protocol : partie 2

mardi 9 février 2021, par Vincent

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

Capture
Capture d’un signet

transclusion

Transclusion
Illustration de la transclusion

liens et retro-liens

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

init.el
Le fichier init.el pour les parties 1 et 2

Voir en ligne : org-roam