|
|
- ;;; nroam-unlinked.el --- Unlinked references section for nroam.el -*- lexical-binding: t; -*-
-
- ;; Copyright (C) 2021 Nicolas Petton
-
- ;; Author: Nicolas Petton <nico@petton.fr>
-
- ;; 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 <https://www.gnu.org/licenses/>.
-
- ;;; 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
|