[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [NonGNU ELPA] New package: Denote-Refs
From: |
Akib Azmain Turja |
Subject: |
Re: [NonGNU ELPA] New package: Denote-Refs |
Date: |
Tue, 20 Dec 2022 00:00:52 +0600 |
Philip Kaludercic <philipk@posteo.net> writes:
> Akib Azmain Turja <akib@disroot.org> writes:
>
>> Denote-Refs shows links and backlinks inline in a Denote note buffer,
>> just below the front matter of the note.
>>
>> Here is the patch:
>>
>> From f4145634df9eb45df7d526871c55326bfafb3785 Mon Sep 17 00:00:00 2001
>> From: Akib Azmain Turja <akib@disroot.org>
>> Date: Mon, 19 Dec 2022 22:22:46 +0600
>> Subject: [PATCH] * elpa-packages (denote-refs): New package.
>>
>> ---
>> elpa-packages | 2 ++
>> 1 file changed, 2 insertions(+)
>>
>> diff --git a/elpa-packages b/elpa-packages
>> index 9dde563..1d26a5a 100644
>> --- a/elpa-packages
>> +++ b/elpa-packages
>> @@ -108,6 +108,8 @@
>> :ignored-files ("LICENSE" "test" "Cask" "Makefile")
>> :news "CHANGELOG.md")
>>
>> + (denote-refs :url "https://codeberg.org/akib/emacs-denote-refs")
>> +
>> (devhelp :url "https://codeberg.org/akib/emacs-devhelp")
>>
>> (diff-ansi :url "https://codeberg.org/ideasman42/emacs-diff-ansi"
>> --
>> 2.37.1
>
> Here are a few comments:
>
> diff -u /tmp/denote-refs.el.1 /tmp/denote-refs.el
> --- /tmp/denote-refs.el.1 2022-12-19 19:38:55.000000000 +0100
> +++ /tmp/denote-refs.el 2022-12-19 17:57:48.712068577 +0100
Wow, nanosecond precision. :O
> @@ -5,8 +5,8 @@
> ;; Author: Akib Azmain Turja <akib@disroot.org>
> ;; Created: 2022-12-18
> ;; Version: 0.1
> -;; Package-Requires: ((emacs "28.1"))
> -;; Keywords: hypermedia outlines files
> +;; Package-Requires: ((emacs "28.1") (denote "1.2.0"))
> +;; Keywords: hypermedia, outlines, files
> ;; URL: https://codeberg.org/akib/emacs-denote-refs
Whoops, I forgot that. :(
Done.
>
> ;; This file is not part of GNU Emacs.
> @@ -36,12 +36,11 @@
> (require 'denote)
> (require 'subr-x)
>
> -(defgroup denote-refs nil
> +(defgroup denote-refs '()
Why?
> "Show links and backlinks in Denote notes."
> :group 'denote
> - :group 'hypermedia
> - :group 'outlines
> - :group 'files
> + ;; You don't need to add multiple groups, we only need it to appear
> + ;; once in the customize hierarchy
> :link '(url-link "https://codeberg.org/akib/emacs-denote-refs")
> :prefix "denote-refs-")
>
Done.
> @@ -62,7 +61,8 @@
>
> Available sections are `links' and `backlinks', which shows the list
> of linked file and the list of backlinks respectively."
> - :type '(set (const :tag "Links" links)
> + :type '(set :greedy t
> + (const :tag "Links" links)
> (const :tag "Backlinks" backlinks)))
What does ':greedy t' mean?
And anyway, I'm going to change that with 'repeat', since
'(links backlinks)', '(backlinks links)' and '(links backlinks links)'
all have meanings now.
New type: '(repeat (choice (const :tag "Links" links)
(const :tag "Backlinks" backlinks)))
Again the space-tab problem. Added .dir-locals.el.
>
> (defvar denote-refs--links 'not-ready
> @@ -83,65 +83,67 @@
> (defun denote-refs--render (section)
> "Render SECTION."
> (let ((refs (pcase section
> - ('links denote-refs--links)
> - ('backlinks denote-refs--backlinks))))
> - (pcase major-mode
> - ;; There's no comment syntax in `text-mode', so just follow
> - ;; `org-mode'.
> - ((or 'org-mode 'text-mode)
> - ;; Insert references count.
> - (insert (if (eq refs 'not-ready)
> - (format "# ... %s\n" (if (eq section 'links)
> - "links"
> - "backlinks"))
> - (format "# %i %s%s\n" (length refs)
> - (if (eq section 'links)
> - "link"
> - "backlink")
> - (pcase (length refs)
> - (0 "")
> - (1 ":")
> - (_ "s:")))))
> - ;; Insert reference list.
> - (when (listp refs)
> - (dolist (ref refs)
> - (insert "# ")
> - (insert-button (car ref)
> - 'help-echo (cdr ref)
> - 'face 'denote-faces-link
> - 'action (lambda (_)
> - (funcall denote-link-button-action
> - (cdr ref))))
> - (insert ?\n))))
> - ('markdown-mode
> - ;; Insert references count.
> - (insert (if (eq refs 'not-ready)
> - (format "<!-- ... %s -->\n" (if (eq section 'links)
> - "links"
> - "backlinks"))
> - (format "<!-- %i %s%s\n" (length refs)
> - (if (eq section 'links)
> - "link"
> - "backlink")
> - (pcase (length refs)
> - (0 " -->")
> - (1 ":")
> - (_ "s:")))))
> - ;; Insert reference list.
> - (when (listp refs)
> - (while refs
> - (let ((ref (pop refs)))
> - (insert " ")
> - (insert-button
> - (car ref)
> - 'help-echo (cdr ref)
> - 'face 'denote-faces-link
> - 'action (lambda (_)
> - (funcall denote-link-button-action
> - (cdr ref))))
> - (unless refs
> - (insert " -->"))
> - (insert ?\n))))))))
> + ('links denote-refs--links)
> + ('backlinks denote-refs--backlinks))))
> + (cond
> + ;; There's no comment syntax in `text-mode', so just follow
> + ;; `org-mode'.
> + ((derived-mode-p 'org-mode 'text-mode)
> + ;; Insert references count.
> + (insert (if (eq refs 'not-ready)
> + (format "# ... %s\n" (if (eq section 'links)
> + "links"
> + "backlinks"))
> + (format "# %i %s%s\n" (length refs)
> + (if (eq section 'links)
> + "link"
> + "backlink")
> + (pcase (length refs)
> + (0 "")
> + (1 ":")
> + (_ "s:")))))
> + ;; Insert reference list.
> + (when (listp refs)
> + (dolist (ref refs)
> + (insert "# ")
> + (insert-button (car ref)
> + 'help-echo (cdr ref)
> + 'face 'denote-faces-link
> + 'action (lambda (_)
> + (funcall denote-link-button-action
> + (cdr ref))))
> + ;; Could (newline) work here?
> + (insert ?\n))))
> + ((derived-mode-p 'markdown-mode)
> + ;; Insert references count.
> + (insert (if (eq refs 'not-ready)
> + (format "<!-- ... %s -->\n" (if (eq section 'links)
> + "links"
> + "backlinks"))
> + (format "<!-- %i %s%s\n" (length refs)
> + (if (eq section 'links)
> + "link"
> + "backlink")
> + (pcase (length refs)
> + (0 " -->")
> + (1 ":")
> + (_ "s:")))))
> + ;; Insert reference list.
> + (when (listp refs)
> + (while refs
> + (let ((ref (pop refs)))
> + (insert " ")
> + (insert-button
> + (car ref)
> + 'help-echo (cdr ref)
> + 'face 'denote-faces-link
> + ;; This way we avoid creating a closure that ignores an
> + ;; argument.
> + 'action #'denote-link-button-action
> + 'button-data (cdr ref))
> + (unless refs
> + (insert " -->"))
> + (insert ?\n))))))))
+1. Done.
>
> (defun denote-refs--goto-end-of-front-matter ()
> "Go to the end of front matter of the note."
> @@ -159,15 +161,14 @@
> (save-excursion
> (denote-refs--goto-end-of-front-matter)
> (when (get-text-property (point) 'denote-refs--sections)
> - (let ((end (or (next-single-property-change
> - (point) 'denote-refs--sections)
> - (point-max))))
> - (when (< end (point-max))
> - (setq end (1+ end)))
> - (let ((mod-flag (buffer-modified-p))
> - (inhibit-read-only t))
> - (delete-region (point) end)
> - (restore-buffer-modified-p mod-flag)))))))
> + (let ((end (or (next-single-property-change
> + (point) 'denote-refs--sections)
> + (point-max)))
> + (inhibit-read-only t))
> + (when (< end (point-max))
> + (setq end (1+ end)))
> + (with-silent-modifications
> + (delete-region (point) end)))))))
>
> (defun denote-refs--show ()
> "Show references."
> @@ -177,19 +178,18 @@
> (denote-refs--remove)
> (save-excursion
> (denote-refs--goto-end-of-front-matter)
> - (let ((begin (point))
> - (mod-flag (buffer-modified-p))
> - (inhibit-read-only t))
> - (dolist (section denote-refs-sections)
> - (pcase-exhaustive section
> - ('links
> - (denote-refs--render 'links))
> - ('backlinks
> - (denote-refs--render 'backlinks))))
> - (put-text-property begin (point) 'read-only t)
> - (put-text-property begin (point) 'denote-refs--sections t)
> - (insert ?\n)
> - (restore-buffer-modified-p mod-flag)))))
> + (with-silent-modifications
> + (let ((begin (point))
> + (inhibit-read-only t))
> + (dolist (section denote-refs-sections)
> + (pcase-exhaustive section
> + ('links
> + (denote-refs--render 'links))
> + ('backlinks
> + (denote-refs--render 'backlinks))))
> + (put-text-property begin (point) 'read-only t)
> + (put-text-property begin (point) 'denote-refs--sections t)
> + (insert ?\n))))))
+1. Done. Also got rid of the undo problem. :)
>
> (defun denote-refs--make-path-relative (path)
> "Return a cons of relative and absolute version of PATH.
> @@ -203,22 +203,22 @@
> (pcase-exhaustive section
> ('links
> (setq denote-refs--links
> - (when (and (buffer-file-name)
> - (file-exists-p (buffer-file-name)))
> - (mapcar #'denote-refs--make-path-relative
> - (denote-link--expand-identifiers
> - (denote--link-in-context-regexp
> - (denote-filetype-heuristics
> - (buffer-file-name))))))))
> + (and (buffer-file-name)
> + (file-exists-p (buffer-file-name))
> + (mapcar #'denote-refs--make-path-relative
> + (denote-link--expand-identifiers
> + (denote--link-in-context-regexp
> + (denote-filetype-heuristics
> + (buffer-file-name))))))))
> ('backlinks
> (setq denote-refs--backlinks
> - (when (and (buffer-file-name)
> - (file-exists-p (buffer-file-name)))
> - (mapcar #'denote-refs--make-path-relative
> - (delete (buffer-file-name)
> - (denote--retrieve-files-in-xrefs
> - (denote-retrieve-filename-identifier
> - (buffer-file-name)))))))))))
> + (and (buffer-file-name)
> + (file-exists-p (buffer-file-name))
> + (mapcar #'denote-refs--make-path-relative
> + (delete (buffer-file-name)
> + (denote--retrieve-files-in-xrefs
> + (denote-retrieve-filename-identifier
> + (buffer-file-name)))))))))))
>
OK. Done.
> (defun denote-refs-update ()
> "Update Denote references shown."
>
> Diff finished. Mon Dec 19 17:57:57 2022
Thanks for the information. I guess you live somewhere at UTC+1, based
on the email timestamp and diff timestamp.
>
FYI, you missed the missing ;;;###autoload. I just added it.
--
Akib Azmain Turja, GPG key: 70018CE5819F17A3BBA666AFE74F0EFA922AE7F5
Fediverse: akib@hostux.social
Codeberg: akib
emailselfdefense.fsf.org | "Nothing can be secure without encryption."
signature.asc
Description: PGP signature
- [NonGNU ELPA] New package: Denote-Refs, Akib Azmain Turja, 2022/12/19
- Re: [NonGNU ELPA] New package: Denote-Refs, Philip Kaludercic, 2022/12/19
- Re: [NonGNU ELPA] New package: Denote-Refs,
Akib Azmain Turja <=
- Re: [NonGNU ELPA] New package: Denote-Refs, Philip Kaludercic, 2022/12/19
- RE: [External] : Re: [NonGNU ELPA] New package: Denote-Refs, Drew Adams, 2022/12/19
- Re: [External] : Re: [NonGNU ELPA] New package: Denote-Refs, Philip Kaludercic, 2022/12/19
- RE: [External] : Re: [NonGNU ELPA] New package: Denote-Refs, Drew Adams, 2022/12/19
- Re: [External] : Re: [NonGNU ELPA] New package: Denote-Refs, Philip Kaludercic, 2022/12/20
- RE: [External] : Re: [NonGNU ELPA] New package: Denote-Refs, Drew Adams, 2022/12/20
- Re: [External] : Re: [NonGNU ELPA] New package: Denote-Refs, Philip Kaludercic, 2022/12/20
- RE: [External] : Re: [NonGNU ELPA] New package: Denote-Refs, Drew Adams, 2022/12/21
- Re: [External] : Re: [NonGNU ELPA] New package: Denote-Refs, Philip Kaludercic, 2022/12/21
- RE: [External] : Re: [NonGNU ELPA] New package: Denote-Refs, Drew Adams, 2022/12/21