mirror of
https://github.com/org-roam/org-roam
synced 2025-08-31 14:43:32 -05:00
62 lines
2.8 KiB
Markdown
62 lines
2.8 KiB
Markdown
While exporting your documents to another format such as HTML -- whether using Org's in-built export or ox-hugo -- you can add a backlinks section which would display the backlinks to the current file. This is done via org-export's preprocessing hooks. See more at [Advanced Export Configuration (The Org Manual)](https://orgmode.org/manual/Advanced-Export-Configuration.html#Advanced-Export-Configuration).
|
|
|
|
Following are two different configs that might be suitable for different use-cases. Add one of these snippets in your Emacs init file.
|
|
|
|
### Only Backlinks
|
|
|
|
This will display only the backlinks and not the contents.
|
|
|
|
```emacs-lisp
|
|
(defun my/org-roam--backlinks-list (file)
|
|
(if (org-roam--org-roam-file-p file)
|
|
(--reduce-from
|
|
(concat acc (format "- [[file:%s][%s]]\n"
|
|
(file-relative-name (car it) org-roam-directory)
|
|
(org-roam--get-title-or-slug (car it))))
|
|
"" (org-roam-db-query [:select [from] :from links :where (= to $s1)] file))
|
|
""))
|
|
|
|
(defun my/org-export-preprocessor (backend)
|
|
(let ((links (my/org-roam--backlinks-list (buffer-file-name))))
|
|
(unless (string= links "")
|
|
(save-excursion
|
|
(goto-char (point-max))
|
|
(insert (concat "\n* Backlinks\n") links)))))
|
|
|
|
(add-hook 'org-export-before-processing-hook 'my/org-export-preprocessor)
|
|
```
|
|
|
|
### Backlinks and Contents
|
|
|
|
This would insert both backlinks and the contents, just like the org-roam buffer. This might be especially useful if you host a web version of your personal knowledgebase and want to browse the files along with the backlinks from mobile devices.
|
|
|
|
```emacs-lisp
|
|
(defun my/org-roam--backlinks-list-with-content (file)
|
|
(with-temp-buffer
|
|
(if-let* ((backlinks (org-roam--get-backlinks file))
|
|
(grouped-backlinks (--group-by (nth 0 it) backlinks)))
|
|
(progn
|
|
(insert (format "\n\n* %d Backlinks\n"
|
|
(length backlinks)))
|
|
(dolist (group grouped-backlinks)
|
|
(let ((file-from (car group))
|
|
(bls (cdr group)))
|
|
(insert (format "** [[file:%s][%s]]\n"
|
|
file-from
|
|
(org-roam--get-title-or-slug file-from)))
|
|
(dolist (backlink bls)
|
|
(pcase-let ((`(,file-from _ ,props) backlink))
|
|
(insert (s-trim (s-replace "\n" " " (plist-get props :content))))
|
|
(insert "\n\n")))))))
|
|
(buffer-string)))
|
|
|
|
(defun my/org-export-preprocessor (backend)
|
|
(let ((links (my/org-roam--backlinks-list-with-content (buffer-file-name))))
|
|
(unless (string= links "")
|
|
(save-excursion
|
|
(goto-char (point-max))
|
|
(insert (concat "\n* Backlinks\n") links)))))
|
|
|
|
(add-hook 'org-export-before-processing-hook 'my/org-export-preprocessor)
|
|
```
|