emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/denote 153827f6c8 021/355: Add denote-link


From: ELPA Syncer
Subject: [elpa] externals/denote 153827f6c8 021/355: Add denote-link
Date: Sun, 26 Jun 2022 23:57:56 -0400 (EDT)

branch: externals/denote
commit 153827f6c8009f5426a135c782097bae1463e754
Author: Protesilaos Stavrou <info@protesilaos.com>
Commit: Protesilaos Stavrou <info@protesilaos.com>

    Add denote-link
---
 denote.el | 45 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 45 insertions(+)

diff --git a/denote.el b/denote.el
index 0795c14efa..7bd2367277 100644
--- a/denote.el
+++ b/denote.el
@@ -364,5 +364,50 @@ sample template.  We will eventually have a manual."
 
 ;; TODO 2022-06-04: `denote-rename-file'
 
+;;;; Link to note
+
+(defun denote--find-key-value-pair (regexp)
+  "Produce a cons cell from REGEXP by searching the file."
+  (goto-char (point-min))
+  (re-search-forward regexp)
+  (cons (match-string-no-properties 1)
+        (match-string-no-properties 2)))
+
+(defvar denote--title-regexp "^\\(#\\+title:\\)[\s\t]+\\(.*\\)"
+  "Regular expression for title key and value.")
+
+(defvar denote--filename-regexp "^\\(#\\+filename:\\)[\s\t]+\\(.*\\)"
+  "Regular expression for filename key and value.")
+
+(defvar denote--identifier-regexp "^\\(#\\+identifier:\\)[\s\t]+\\(.*\\)"
+  "Regular expression for filename key and value.")
+
+;; TODO 2022-06-05: Maybe this should be a defcustom?
+(defvar denote--link-format "[[denote:%s][%s (%s)]]"
+  "Format of Org link to note.")
+
+(defun denote--retrieve-value (note regexp)
+  "Return REGEXP value from NOTE."
+  (let ((default-directory (denote--directory)))
+    (with-temp-buffer
+      (insert-file-contents-literally note)
+      (denote--find-key-value-pair regexp))))
+
+(defun denote--read-file-prompt ()
+  "Prompt for regular file in `denote-directory'."
+  (read-file-name "Select note: " (denote--directory)
+                  nil t nil #'file-regular-p))
+
+;;;###autoload
+(defun denote-link (note)
+  "Create Org link to NOTE in `denote-directory'."
+  (interactive (list (denote--read-file-prompt)))
+  (let ((identifier (cdr (denote--retrieve-value note 
denote--identifier-regexp)))
+        (filename (string-remove-prefix
+                   (denote--directory)
+                   (cdr (denote--retrieve-value note 
denote--filename-regexp))))
+        (title (cdr (denote--retrieve-value note denote--title-regexp))))
+    (insert (format denote--link-format filename title identifier))))
+
 (provide 'denote)
 ;;; denote.el ends here



reply via email to

[Prev in Thread] Current Thread [Next in Thread]