[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/denote 9d8748c382 022/355: Add proof-of-concept backlin
From: |
ELPA Syncer |
Subject: |
[elpa] externals/denote 9d8748c382 022/355: Add proof-of-concept backlink (lots of TODO) |
Date: |
Sun, 26 Jun 2022 23:57:56 -0400 (EDT) |
branch: externals/denote
commit 9d8748c3820d53661ac198b37a32e5020da7a97f
Author: Protesilaos Stavrou <info@protesilaos.com>
Commit: Protesilaos Stavrou <info@protesilaos.com>
Add proof-of-concept backlink (lots of TODO)
---
denote.el | 48 ++++++++++++++++++++++++++++++++++++++++--------
1 file changed, 40 insertions(+), 8 deletions(-)
diff --git a/denote.el b/denote.el
index 7bd2367277..1414082ffe 100644
--- a/denote.el
+++ b/denote.el
@@ -92,6 +92,14 @@ define."
:type 'string
:group 'denote)
+(defcustom denote-link-insert-functions
+ (list #'denote-write-backlink)
+ "Functions that run after `denote-link'.
+Each function accepts a TARGET-FILE and an ORIGIN-LINK argument.
+Both are supplied by `denote-link'."
+ :type 'hook
+ :group 'denote)
+
;;; Main variables
;; TODO 2022-06-04: Can we make the entire file name format a defcustom?
@@ -386,6 +394,9 @@ sample template. We will eventually have a manual."
(defvar denote--link-format "[[denote:%s][%s (%s)]]"
"Format of Org link to note.")
+(defvar denote--backlink-format "[[denote:%s][backlink: %s (%s)]]"
+ "Format of Org link to note.")
+
(defun denote--retrieve-value (note regexp)
"Return REGEXP value from NOTE."
(let ((default-directory (denote--directory)))
@@ -399,15 +410,36 @@ sample template. We will eventually have a manual."
nil t nil #'file-regular-p))
;;;###autoload
-(defun denote-link (note)
- "Create Org link to NOTE in `denote-directory'."
+(defun denote-link (target)
+ "Create Org link to TARGET note in `denote-directory'.
+Run `denote-link-insert-functions' afterwards."
(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))))
+ (let* ((target-id (cdr (denote--retrieve-value target
denote--identifier-regexp)))
+ (target-name (string-remove-prefix
+ (denote--directory)
+ (cdr (denote--retrieve-value target
denote--filename-regexp))))
+ (target-title (cdr (denote--retrieve-value target
denote--title-regexp)))
+ (target-link (format denote--link-format target-name target-title
target-id))
+ (origin-note (buffer-file-name))
+ (origin-id (cdr (denote--retrieve-value origin-note
denote--identifier-regexp)))
+ (origin-name (string-remove-prefix
+ (denote--directory)
+ (cdr (denote--retrieve-value origin-note
denote--filename-regexp))))
+ (origin-title (cdr (denote--retrieve-value origin-note
denote--title-regexp)))
+ (origin-link (format denote--backlink-format origin-name origin-title
origin-id)))
+ (insert target-link)
+ (run-hook-with-args 'denote-link-insert-functions target origin-link)))
+
+;; NOTE 2022-06-05: A proof-of-concept. We need to: (i) have a
+;; Backlinks headeding, (ii) delete duplicates, (iii) ensure one
+;; backlink per line, (iv) have a `denote-unlink' command or a
+;; `denote-clean-backlinks' for invalid links.
+(defun denote-write-backlink (target-file origin-link)
+ "Insert ORIGIN-LINK to TARGET-FILE."
+ (let ((default-directory (denote--directory)))
+ (with-current-buffer (find-file-noselect target-file)
+ (goto-char (point-max))
+ (insert origin-link))))
(provide 'denote)
;;; denote.el ends here
- [elpa] externals/denote ddbbe549b6 283/355: Use function to test if file likely is a note, (continued)
- [elpa] externals/denote ddbbe549b6 283/355: Use function to test if file likely is a note, ELPA Syncer, 2022/06/26
- [elpa] externals/denote 62e7adfbdb 269/355: Replace superfluous 'let*' with 'let', ELPA Syncer, 2022/06/26
- [elpa] externals/denote 618eff9807 312/355: Make a couple of minor tweaks to the manual, ELPA Syncer, 2022/06/26
- [elpa] externals/denote a5986742be 315/355: Note the features of filenames for search/filter, ELPA Syncer, 2022/06/26
- [elpa] externals/denote 9888c7087f 348/355: Add check mark to task of using id: links, ELPA Syncer, 2022/06/26
- [elpa] externals/denote d56913b055 349/355: Clarify wording of FAQ entries, ELPA Syncer, 2022/06/26
- [elpa] externals/denote 31e5eb3af8 346/355: Update documentation about links, ELPA Syncer, 2022/06/26
- [elpa] externals/denote 019cccfb1f 015/355: Create denote-directory if absent, ELPA Syncer, 2022/06/26
- [elpa] externals/denote 813004ea53 032/355: Make outline more consistent and informative, ELPA Syncer, 2022/06/26
- [elpa] externals/denote 387ac0c030 033/355: Add denote--file-empty-p, ELPA Syncer, 2022/06/26
- [elpa] externals/denote 9d8748c382 022/355: Add proof-of-concept backlink (lots of TODO),
ELPA Syncer <=
- [elpa] externals/denote 991abe5b65 034/355: Use denote--file-empty-p, ELPA Syncer, 2022/06/26
- [elpa] externals/denote 812da918f7 042/355: Insert comment about not editing backlinks, ELPA Syncer, 2022/06/26
- [elpa] externals/denote 60a91fc6ef 044/355: Use correct notation for private variables, ELPA Syncer, 2022/06/26
- [elpa] externals/denote 0185f38dde 046/355: Add denote-dired.el for useful fontification, ELPA Syncer, 2022/06/26
- [elpa] externals/denote f4f1fa3c48 041/355: Declare variables with defconst, ELPA Syncer, 2022/06/26
- [elpa] externals/denote d0dbbab603 050/355: Update short descriptions, ELPA Syncer, 2022/06/26
- [elpa] externals/denote 4d90cbb5da 054/355: Remove needless to-do, ELPA Syncer, 2022/06/26
- [elpa] externals/denote 610c2f1670 055/355: Comment out inactive link to change log, ELPA Syncer, 2022/06/26
- [elpa] externals/denote 3209bc23ef 059/355: Use "#+filetags" for wider Org compatibility, ELPA Syncer, 2022/06/26
- [elpa] externals/denote 3ef51e9cd7 064/355: Update documentation about denote-dired-mode, ELPA Syncer, 2022/06/26