diff options
| -rw-r--r-- | bard-elisp/bard-writing.el | 43 | ||||
| -rw-r--r-- | bard-emacs-modules/bard-emacs-writing.el | 2 |
2 files changed, 44 insertions, 1 deletions
diff --git a/bard-elisp/bard-writing.el b/bard-elisp/bard-writing.el index e1e4048..0f18c46 100644 --- a/bard-elisp/bard-writing.el +++ b/bard-elisp/bard-writing.el @@ -1,5 +1,8 @@ (require 'consult) (require 'beframe) +(require 'calendar) +(require 'org-roam-node) +(require 'denote) (defvar bard/consult--source-notes `(:name "Note Buffers" @@ -64,6 +67,46 @@ (expand-file-name file))) (bard/denote-insert-id-at-top)))) +(defun bard/insert-or-create-node () + "Insert an Org-roam link if the note exists; otherwise create via Denote." + (interactive) + ;; Prompt for an existing node, but do not auto-create + (let* ((node (org-roam-node-read)) + (title (org-roam-node-title node))) + (if node + ;; Node exists: insert Org-roam link at point + (let ((id (org-roam-node-id node))) + (if id + (insert (org-link-make-string + (concat "id:" id) + title)) + ;; Node does not exist (no id): create via Denote + (bard/denote-insert-node title)))))) + +(defun bard/denote-insert-node (title) + "Denote analogy for `org-roam-insert-node', takes TITLE as node title." + (interactive) + (let* ((keywords (denote-keywords-prompt)) + (file (denote title keywords nil nil nil nil nil nil))) + + (when-let ((buf (find-buffer-visiting file))) + (with-current-buffer buf + (save-buffer) + (kill-buffer buf))) + + ;; extract uuid from file that is autogenerated by `bard/denote-insert-id-at-top' + (let ((uuid + (with-temp-buffer + (insert-file-contents file) + (goto-char (point-min)) + (when (re-search-forward "^:ID:\\s-+\\([[:alnum:]-]+\\)" nil t) + (match-string 1))))) + (unless uuid + (error "No :ID: found in Denote file %s" file)) + + ;; Insert link at point + (insert (format "[[id:%s][%s]]" uuid title))))) + (defun denote-sequence-region () "Call `denote-sequence' and insert therein the text of the active region. diff --git a/bard-emacs-modules/bard-emacs-writing.el b/bard-emacs-modules/bard-emacs-writing.el index 1461a29..2cb28b8 100644 --- a/bard-emacs-modules/bard-emacs-writing.el +++ b/bard-emacs-modules/bard-emacs-writing.el @@ -107,6 +107,7 @@ ("C-c n d" . denote-sort-dired) ("C-c n r" . denote-rename-file-using-front-matter) ("C-c n k" . denote-rename-file-keywords) + ("C-c n i" . bard/insert-or-create-node) ("C-c n I" . denote-add-links) ("C-c n b" . bard/consult-buffer-notes) ; notes buffer ("C-c n B" . bard/ibuffer-notes) ; notes buffer but more @@ -150,7 +151,6 @@ :custom (org-roam-directory (file-truename "~/Notes/denote")) :bind (("C-c n l" . org-roam-buffer-toggle) - ("C-c n i" . org-roam-node-insert) ("C-c n o" . org-roam-node-find)) :config (org-roam-db-autosync-mode 1)) |
