Moldable Emacs: the old Org-Roam buffer as a mold (with transclusion)!
Too long; didn't read
Use Backlinks as Org
mold to get all the backlinks of an org-roam as
a single buffer. You can easily export to some other format with ox
if you set (setq org-id-extra-files (org-roam-list-files))
.
The problem
It's 2022 and I am feeling reminiscing... about the old v1 Org Roam buffer XD
Jethro did a great job at compacting org-roam to its essence. I enjoy
use org-ids more for links. I had to restore the graphviz org-graph
export to svg my way to fit my needs, but overall it felt an
improvement.
There was a thing I wanted still to customize though. The org-roam
buffer! The current one looks trendy because it uses the magit
UX
style. Still I like the Org Mode format more. And this sounds a view
of some data. Mmm... moldable... Emacs...
What would it take to make my own org-roam buffer as a mold???
And there is a solution
Not much really. We just need a note at point, get the contents of its backlinks and write them in a Org buffer. The added benefit is that we can get the full contents in our Org Mode buffer! I suffer a bit that the org-roam buffer removes the notes contents: that forces me to open the note manually.
This is how it looks.
Anyway, these are the main ingredients of our mold:
(org-roam-node-at-point)
: get the note at point as an Elisp data structure(org-roam-backlinks-get (org-roam-node-at-point))
: get the backlinks of the note at point(org-roam-node-file (org-roam-backlink-source-node <backlink>))
get the file name of the backlink
With those we can mold!
(me-register-mold :key "Backlinks as Org" :given (:fn (and (me-require 'org-roam) (org-roam-node-p (org-roam-node-at-point)))) :then (:fn (let* ((backlinks (org-roam-backlinks-get (org-roam-node-at-point)))) (with-current-buffer buffername (org-mode) (erase-buffer) (--each backlinks (insert-file-contents-literally (org-roam-node-file (org-roam-backlink-source-node it)))) (setq-local self backlinks)))) :docs "You can check backlinks for current org-roam node." :examples nil)
In this buffer we can use all Org Mode functionality. The one I use
most is org-export! I needed the following setting to export notes
without a problem: (setq org-id-extra-files (org-roam-list-files))
.
That is for org-roam v2 since it uses org ids for links: without that
org-export would fail to find the backlink references.
There is a better solution too!
There is a boring drawback with the above mold: it is difficult to jump to the original note. While using my mold I discovered that often I want to edit some typos or add some link. At the same time I saw that org-transclusion got published on Elpa.
After giving it a little try, this is how the mold looks.
As you can see you can edit the contents in place (e
keybinding) or
you can jump to the original note (O
keybinding). And we can still export!
Conclusion
Mold out the functionality you need! I could recover the old org-roam
buffer in a few lines of Elisp. If you like it, you can just get
moldable-emacs, run me-mold
on a note and select "Backlinks as Org".
Happy note-exporting!