;;; nroam-unlinked.el --- Unlinked references section for nroam.el -*- lexical-binding: t; -*- ;; Copyright (C) 2021 Nicolas Petton ;; Author: Nicolas Petton ;; This program is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;;; Commentary: ;; This library provides an unlinked references nroam section for org-roam ;; buffers. ;;; Code: (require 'org-roam) (require 'nroam-utils) (declare-function nroam-register-section "nroam.el") (declare-function nroam-update "nroam.el") (defvar-local nroam-unlinked-show-references nil "When non-nil, show unlinked references for the current buffer.") (defun nroam-unlinked-register-section () "Register `nroam-unlinked-section' as a section in nroam." (nroam-register-section #'nroam-unlinked-section)) (defun nroam-unlinked-section () "Insert `org-roam' unlinked references for the current buffer." (nroam-unlinked--insert-heading) (if nroam-unlinked-show-references (nroam-unlinked--insert-references) (nroam-unlinked--insert-toggle-button))) (defun nroam-unlinked--insert-heading () "Insert the heading for unlinked references." (nroam--insert-heading 2 "Unlinked references")) (defun nroam-unlinked--insert-references () "Insert unlinked references for the current buffer." (let (content) (save-window-excursion (org-roam-unlinked-references) (let ((buf (current-buffer))) (goto-char (point-min)) (search-forward "* Unlinked References\n" nil t) (setq content (buffer-substring (point) (point-max))) (kill-buffer buf))) (insert content))) (defun nroam-unlinked--insert-toggle-button () "Insert a button to show unlinked references." (let ((beg (point))) (insert "[Show unlinked references]") (make-text-button beg (point) 'action #'nroam-unlinked--show-references))) (defun nroam-unlinked--show-references (&rest _) "Search for and show unlinked references." (let ((inhibit-read-only t) (pos (point-at-bol))) (setq nroam-unlinked-show-references t) (nroam-update) (goto-char pos) (org-back-to-heading))) (provide 'nroam-unlinked) ;;; nroam-unlinked.el ends here