[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/denote c12d4fdb21 02/11: Add 'denote--get-all-used-ids'
From: |
ELPA Syncer |
Subject: |
[elpa] externals/denote c12d4fdb21 02/11: Add 'denote--get-all-used-ids' and 'denote--find-first-unused-id' |
Date: |
Sun, 8 Oct 2023 03:57:49 -0400 (EDT) |
branch: externals/denote
commit c12d4fdb21058dc33543c545895d56e50ee4823d
Author: Jean-Philippe Gagné Guay <jeanphilippe150@gmail.com>
Commit: Jean-Philippe Gagné Guay <jeanphilippe150@gmail.com>
Add 'denote--get-all-used-ids' and 'denote--find-first-unused-id'
---
denote.el | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+)
diff --git a/denote.el b/denote.el
index 1d64b128f3..d86ba50b10 100644
--- a/denote.el
+++ b/denote.el
@@ -1662,6 +1662,31 @@ where the former does not read dates without a time
component."
(string-prefix-p identifier (file-name-nondirectory file)))
(append (denote-directory-files) (denote--buffer-file-names))))
+(defun denote--get-all-used-ids ()
+ "Return a hash-table of all used identifiers.
+It checks files in variable `denote-directory' and active buffer files."
+ (let* ((ids (make-hash-table :test 'equal))
+ (file-names (mapcar
+ (lambda (file) (file-name-nondirectory file))
+ (denote-directory-files)))
+ (names (append file-names (denote--buffer-file-names))))
+ (dolist (name names)
+ (let ((id (when (string-match (concat "\\`" denote--id-regexp) name)
+ (match-string-no-properties 0 name))))
+ (puthash id t ids)))
+ ids))
+
+(defun denote--find-first-unused-id (id used-ids)
+ "Return the first unused id starting at ID from USED-IDS.
+USED-IDS is a hash-table of all used IDs. If ID is already used,
+increment it 1 second at a time until an available id is found."
+ (let ((time (date-to-time id)))
+ (while (gethash
+ (format-time-string denote--id-format time)
+ used-ids)
+ (setq time (time-add time 1)))
+ (format-time-string denote--id-format time)))
+
(defun denote--increment-identifier (identifier)
"Increment IDENTIFIER.
Preserve the date component and append to it the current time."
- [elpa] externals/denote updated (b060dc3548 -> 05a18e36fc), ELPA Syncer, 2023/10/08
- [elpa] externals/denote 8c140344e0 03/11: Remove 'denote-barf-duplicate-id' and make 'denote' avoid duplicate ids, ELPA Syncer, 2023/10/08
- [elpa] externals/denote c12d4fdb21 02/11: Add 'denote--get-all-used-ids' and 'denote--find-first-unused-id',
ELPA Syncer <=
- [elpa] externals/denote 89237ceafd 01/11: Remove files parameter, ELPA Syncer, 2023/10/08
- [elpa] externals/denote a090eb007c 04/11: Add optional parameter no-error to denote-retrieve-filename-identifier, ELPA Syncer, 2023/10/08
- [elpa] externals/denote 03b510f640 05/11: Remove function denote-retrieve-or-create-filename-identifier, ELPA Syncer, 2023/10/08
- [elpa] externals/denote 05a18e36fc 11/11: Fix typo in denote-link-return-backlinks, ELPA Syncer, 2023/10/08
- [elpa] externals/denote c9d024ec30 07/11: Update README.org with new functions, ELPA Syncer, 2023/10/08
- [elpa] externals/denote c5e73c2c99 08/11: Use non obsolete variables, ELPA Syncer, 2023/10/08
- [elpa] externals/denote 1d0eebf7d3 10/11: Merge pull request #159 from jeanphilippegg/duplicate-ids, ELPA Syncer, 2023/10/08
- [elpa] externals/denote fe0659b2f0 09/11: Mention 'denote-link-with-signature' in 'denote-prompts' documentation, ELPA Syncer, 2023/10/08
- [elpa] externals/denote fd880f15a5 06/11: Remove denote--increment-identifier and denote--return-new-identifier-if-duplicate, ELPA Syncer, 2023/10/08