[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/denote 6d71d3e1d3 04/20: Refactor denote-retrieve-filen
From: |
ELPA Syncer |
Subject: |
[elpa] externals/denote 6d71d3e1d3 04/20: Refactor denote-retrieve-filename-* functions |
Date: |
Wed, 20 Dec 2023 03:58:00 -0500 (EST) |
branch: externals/denote
commit 6d71d3e1d3ab010ebdd1d8e8f222ce7eb1b1d6fc
Author: Jean-Philippe Gagné Guay <jeanphilippe150@gmail.com>
Commit: Jean-Philippe Gagné Guay <jeanphilippe150@gmail.com>
Refactor denote-retrieve-filename-* functions
---
README.org | 16 ++++-----
denote-rename-buffer.el | 10 +++---
denote.el | 95 ++++++++++++++++++++++---------------------------
3 files changed, 54 insertions(+), 67 deletions(-)
diff --git a/README.org b/README.org
index fc436d87ed..f121c25bf8 100644
--- a/README.org
+++ b/README.org
@@ -3297,10 +3297,10 @@ invoke this command."
(image-dired--with-marked
(when-let* ((file (image-dired-original-file-name))
(dir (file-name-directory file))
- (id (denote-retrieve-filename-identifier file))
+ (id (or (denote-retrieve-filename-identifier file) ""))
(file-type (denote-filetype-heuristics file))
(title (denote--retrieve-title-or-filename file file-type))
- (signature (denote-retrieve-filename-signature file))
+ (signature (or (denote-retrieve-filename-signature file) "")
(extension (file-name-extension file t))
(new-name (denote-format-file-name dir id keywords title
extension signature))
(default-directory dir))
@@ -3923,25 +3923,21 @@ might change them without further notice.
#+findex: denote-retrieve-filename-identifier
+ Function ~denote-retrieve-filename-identifier~ :: Extract identifier
- from =FILE= name. To create a new one, refer to the
+ from =FILE= name, if present, else return nil. To create a new one, refer
to the
~denote-create-unique-file-identifier~ function.
#+findex: denote-retrieve-filename-title
+ Function ~denote-retrieve-filename-title~ :: Extract Denote title
- component from =FILE= name, else return an empty string. With
- optional =FILE-NAME-BASE-FALLBACK= return ~file-name-base~ if no
- Denote title component exists. If the extraction is succcessful
- (when no ~file-name-base~ is involved) run ~denote-desluggify~ on
- the title.
+ component from =FILE= name, if present, else return nil.
#+findex: denote-retrieve-filename-keywords
+ Function ~denote-retrieve-filename-keywords~ :: Extract keywords
- from =FILE= name, if present, else return an empty string. Return
+ from =FILE= name, if present, else return nil. Return
matched keywords as a single string.
#+findex: denote-retrieve-filename-signature
+ Function ~denote-retrieve-filename-signature~ :: Extract signature
- from =FILE= name, if present, else return an empty string.
+ from =FILE= name, if present, else return nil.
#+findex: denote-create-unique-file-identifier
+ Function ~denote-create-unique-file-identifier~ :: Create a new unique
diff --git a/denote-rename-buffer.el b/denote-rename-buffer.el
index ff28b8446e..2d52ac538f 100644
--- a/denote-rename-buffer.el
+++ b/denote-rename-buffer.el
@@ -94,11 +94,11 @@ buffer will be used, if available."
(type (denote-filetype-heuristics file)))
(string-trim
(format-spec denote-rename-buffer-format
- (list (cons ?t (denote-retrieve-title-value file type))
- (cons ?i (denote-retrieve-filename-identifier file))
- (cons ?d (denote-retrieve-filename-identifier file))
- (cons ?s (denote-retrieve-filename-signature file))
- (cons ?k (denote-retrieve-keywords-value-as-string
file type))
+ (list (cons ?t (or (denote-retrieve-title-value file type)
""))
+ (cons ?i (or (denote-retrieve-filename-identifier
file) ""))
+ (cons ?d (or (denote-retrieve-filename-identifier
file) ""))
+ (cons ?s (or (denote-retrieve-filename-signature file)
""))
+ (cons ?k (or (denote-retrieve-keywords-value-as-string
file type) ""))
(cons ?% "%"))
'delete))))
diff --git a/denote.el b/denote.el
index 0e9bb9f057..a529318a49 100644
--- a/denote.el
+++ b/denote.el
@@ -735,7 +735,7 @@ For our purposes, a note must not be a directory, must
satisfy
(defun denote-file-has-identifier-p (file)
"Return non-nil if FILE has a Denote identifier."
- (denote-retrieve-filename-identifier file :no-error))
+ (denote-retrieve-filename-identifier file))
(defun denote-file-has-signature-p (file)
"Return non-nil if FILE has a Denote identifier."
@@ -1373,18 +1373,21 @@ contain the newline."
;;;; Front matter or content retrieval functions
-(defun denote-retrieve-filename-identifier (file &optional no-error)
- "Extract identifier from FILE name.
-If NO-ERROR is nil and an identifier is not found, return an
-error, else return nil.
+(defun denote-retrieve-filename-identifier (file)
+ "Extract identifier from FILE name, if present, else return nil.
To create a new one, refer to the function
`denote-create-unique-file-identifier'."
(let ((file-name (file-name-nondirectory file)))
(if (string-match (concat "\\`" denote-id-regexp) file-name)
- (match-string-no-properties 0 file-name)
- (when (not no-error)
- (error "Cannot find `%s' as a file with a Denote identifier" file)))))
+ (match-string-no-properties 0 file-name))))
+
+;; TODO 2023-12-08: Maybe we can only use
+;; `denote-retrieve-filename-identifier' and remove this function.
+(defun denote-retrieve-filename-identifier-with-error (file)
+ "Extract identifier from FILE name, if present, else signal an error."
+ (or (denote-retrieve-filename-identifier file)
+ (error "Cannot find `%s' as a file with a Denote identifier" file)))
(defun denote-create-unique-file-identifier (file used-ids &optional date)
"Generate a unique identifier for FILE not in USED-IDS hash-table.
@@ -1413,37 +1416,23 @@ To only return an existing identifier, refer to the
function
"2.1.0")
(defun denote-retrieve-filename-keywords (file)
- "Extract keywords from FILE name, if present, else return an empty string.
+ "Extract keywords from FILE name, if present, else return nil.
Return matched keywords as a single string."
(let ((filename (file-name-nondirectory file)))
- (if (string-match denote-keywords-regexp filename)
- (match-string 1 filename)
- "")))
+ (when (string-match denote-keywords-regexp filename)
+ (match-string 1 filename))))
(defun denote-retrieve-filename-signature (file)
- "Extract signature from FILE name, if present, else return an empty string."
+ "Extract signature from FILE name, if present, else return nil."
(let ((filename (file-name-nondirectory file)))
- (if (string-match denote-signature-regexp filename)
- (match-string 1 filename)
- "")))
-
-(defun denote-retrieve-filename-title (file &optional file-name-base-fallback)
- "Extract Denote title component from FILE name, else return an empty string.
-
-With optional FILE-NAME-BASE-FALLBACK return `file-name-base' if
-no Denote title component exists.
+ (when (string-match denote-signature-regexp filename)
+ (match-string 1 filename))))
-If the extraction is succcessful (when no `file-name-base' is
-involved) run `denote-desluggify' on the title"
- (unless (file-exists-p file)
- (error "%s does not exist as a file" file))
- (cond
- ((and (denote-file-has-identifier-p file)
- (string-match denote-title-regexp file))
- (denote-desluggify (match-string 1 file)))
- (file-name-base-fallback
- (file-name-base file))
- (t "")))
+(defun denote-retrieve-filename-title (file)
+ "Extract Denote title component from FILE name, else return an empty string."
+ (let ((filename (file-name-nondirectory file)))
+ (when (string-match denote-title-regexp filename)
+ (match-string 1 filename))))
(defun denote--file-with-temp-buffer-subr (file)
"Return path to FILE or its buffer together with the appropriate function.
@@ -1516,7 +1505,9 @@ that internally)."
(title (denote-retrieve-title-value file type))
((not (string-blank-p title))))
title
- (denote-retrieve-filename-title file :file-name-base-as-fallback)))
+ (if-let ((title (denote-retrieve-filename-title file)))
+ (denote-desluggify title)
+ (file-name-base file))))
(defun denote--retrieve-location-in-xrefs (identifier)
"Return list of xrefs for IDENTIFIER with their respective location.
@@ -1733,7 +1724,7 @@ It checks files in variable `denote-directory' and active
buffer files."
(denote-directory-files)))
(names (append file-names (denote--buffer-file-names))))
(dolist (name names)
- (let ((id (denote-retrieve-filename-identifier name :no-error)))
+ (let ((id (denote-retrieve-filename-identifier name)))
(puthash id t ids)))
ids))
@@ -2503,17 +2494,17 @@ file-naming scheme."
(denote-keywords-prompt
(format "Rename `%s' with keywords (empty to ignore/remove)"
file-in-prompt))
(denote-signature-prompt
- (denote-retrieve-filename-signature file)
+ (or (denote-retrieve-filename-signature file) "")
(format "Rename `%s' with signature (empty to ignore/remove)"
file-in-prompt))
current-prefix-arg)))
(let* ((dir (file-name-directory file))
- (id (or (denote-retrieve-filename-identifier file :no-error)
+ (id (or (denote-retrieve-filename-identifier file)
(denote-create-unique-file-identifier file
(denote--get-all-used-ids) ask-date)))
(extension (denote-get-file-extension file))
(file-type (denote-filetype-heuristics file))
(title (or title (denote--retrieve-title-or-filename file file-type)))
(keywords (or keywords (denote-retrieve-keywords-value file
file-type)))
- (signature (or signature (denote-retrieve-filename-signature file)))
+ (signature (or signature (denote-retrieve-filename-signature file)
""))
(new-name (denote-format-file-name dir id keywords (denote-sluggify
title 'title) extension (denote-sluggify-signature signature)))
(max-mini-window-height denote-rename-max-mini-window-height))
(when (or denote-rename-no-confirm (denote-rename-file-prompt file
new-name))
@@ -2540,7 +2531,7 @@ the changes made to the file: perform them outright."
(let* ((file-type (denote-filetype-heuristics file))
(file-in-prompt (propertize (file-relative-name file) 'face
'denote-faces-prompt-current-name))
(dir (file-name-directory file))
- (id (or (denote-retrieve-filename-identifier file :no-error)
+ (id (or (denote-retrieve-filename-identifier file)
(denote-create-unique-file-identifier file used-ids)))
(title (denote-title-prompt
(denote--retrieve-title-or-filename file file-type)
@@ -2548,7 +2539,7 @@ the changes made to the file: perform them outright."
(keywords (denote-keywords-prompt
(format "Rename `%s' with keywords (empty to
ignore/remove)" file-in-prompt)))
(signature (denote-signature-prompt
- (denote-retrieve-filename-signature file)
+ (or (denote-retrieve-filename-signature file) "")
(format "Rename `%s' with signature (empty to
ignore/remove)" file-in-prompt)))
(extension (denote-get-file-extension file))
(new-name (denote-format-file-name dir id keywords
(denote-sluggify title 'title) extension (denote-sluggify-signature
signature))))
@@ -2605,9 +2596,9 @@ Specifically, do the following:
(denote--get-all-used-ids))))
(dolist (file marks)
(let* ((dir (file-name-directory file))
- (id (or (denote-retrieve-filename-identifier file :no-error)
+ (id (or (denote-retrieve-filename-identifier file)
(denote-create-unique-file-identifier file used-ids)))
- (signature (denote-retrieve-filename-signature file))
+ (signature (or (denote-retrieve-filename-signature file) ""))
(file-type (denote-filetype-heuristics file))
(title (denote--retrieve-title-or-filename file file-type))
(extension (denote-get-file-extension file))
@@ -2648,10 +2639,10 @@ does internally."
(user-error "The file is not writable or does not have a supported file
extension"))
(if-let ((file-type (denote-filetype-heuristics file))
(title (denote-retrieve-title-value file file-type))
- (id (denote-retrieve-filename-identifier file :no-error)))
+ (id (denote-retrieve-filename-identifier file)))
(let* ((sluggified-title (denote-sluggify title 'title))
(keywords (denote-retrieve-keywords-value file file-type))
- (signature (denote-retrieve-filename-signature file))
+ (signature (or (denote-retrieve-filename-signature file) ""))
(extension (denote-get-file-extension file))
(dir (file-name-directory file))
(new-name (denote-format-file-name dir id keywords
sluggified-title extension (when signature (denote-sluggify-signature
signature)))))
@@ -2720,7 +2711,7 @@ relevant front matter."
(denote-title-prompt)
(denote-keywords-prompt)))
(when-let ((denote-file-is-writable-and-supported-p file)
- (id (denote-retrieve-filename-identifier file :no-error))
+ (id (denote-retrieve-filename-identifier file))
(file-type (denote-filetype-heuristics file)))
(denote--add-front-matter file title keywords id file-type)))
@@ -2755,10 +2746,10 @@ of the file. This needs to be done manually."
(denote--valid-file-type (or (denote-file-type-prompt) denote-file-type))))
(let* ((dir (file-name-directory file))
(old-file-type (denote-filetype-heuristics file))
- (id (or (denote-retrieve-filename-identifier file :no-error) ""))
+ (id (or (denote-retrieve-filename-identifier file) ""))
(title (denote--retrieve-title-or-filename file old-file-type))
(keywords (denote-retrieve-keywords-value file old-file-type))
- (signature (denote-retrieve-filename-signature file))
+ (signature (or (denote-retrieve-filename-signature file) ""))
(old-extension (denote-get-file-extension file))
(new-extension (denote--file-extension new-file-type))
(new-name (denote-format-file-name
@@ -3067,7 +3058,7 @@ variable that specifies a string. See the `:link'
property of
DESCRIPTION is the text of the link. If nil, DESCRIPTION is
retrieved from the FILE, unless the FORMAT is
`denote-id-only-link-format'."
- (let* ((file-id (denote-retrieve-filename-identifier file))
+ (let* ((file-id (denote-retrieve-filename-identifier-with-error file))
(file-type (denote-filetype-heuristics file))
(file-title (unless (string= format denote-id-only-link-format)
(or description (denote--retrieve-title-or-filename
file file-type)))))
@@ -3153,7 +3144,7 @@ file's title. Make the signature a prefix. If there is
no title
or text in the active region, return the signature on its own.
Also see `denote--link-get-description'."
- (let* ((signature (denote-retrieve-filename-signature file))
+ (let* ((signature (or (denote-retrieve-filename-signature file) ""))
(text (denote--link-get-description file file-type))
(specifiers (if (and text
(not (string-empty-p text)))
@@ -3243,7 +3234,7 @@ Also see `denote-link-return-backlinks'."
"Return list of backlinks in current or optional FILE.
Also see `denote-link-return-links'."
(when-let ((current-file (or file (buffer-file-name)))
- (id (denote-retrieve-filename-identifier current-file)))
+ (id (denote-retrieve-filename-identifier-with-error
current-file)))
(delete current-file (denote--retrieve-files-in-xrefs id))))
(define-obsolete-function-alias
@@ -3513,7 +3504,7 @@ ALIST is not used in favour of using
(let* ((inhibit-read-only t)
(file (buffer-file-name))
(file-type (denote-filetype-heuristics file))
- (id (denote-retrieve-filename-identifier file))
+ (id (denote-retrieve-filename-identifier-with-error file))
(buf (format "*denote-backlinks to %s*" id))
(xref-alist (xref--analyze (funcall fetcher)))
(dir (denote-directory)))
@@ -3566,7 +3557,7 @@ default, it will show up below the current window."
(interactive)
(let ((file (buffer-file-name)))
(when (denote-file-is-writable-and-supported-p file)
- (let* ((id (denote-retrieve-filename-identifier file))
+ (let* ((id (denote-retrieve-filename-identifier-with-error file))
(xref-show-xrefs-function #'denote-link--prepare-backlinks)
(project-find-functions #'denote-project-find))
(xref--show-xrefs
- [elpa] externals/denote updated (d47ef97062 -> ee58ae014d), ELPA Syncer, 2023/12/20
- [elpa] externals/denote b996b7e6f0 02/20: Refactor denote-add-front-matter, ELPA Syncer, 2023/12/20
- [elpa] externals/denote 4261d19a88 12/20: Put Denote menu bar after "Tools", ELPA Syncer, 2023/12/20
- [elpa] externals/denote aa7bf58234 18/20: Enable Denote menu bar by default, ELPA Syncer, 2023/12/20
- [elpa] externals/denote f770346729 19/20: Merge branch 'main' of git.sr.ht:~protesilaos/denote, ELPA Syncer, 2023/12/20
- [elpa] externals/denote 667c1370ba 15/20: Remove unwind-protect from denote--command-with-default-title, ELPA Syncer, 2023/12/20
- [elpa] externals/denote 6d71d3e1d3 04/20: Refactor denote-retrieve-filename-* functions,
ELPA Syncer <=
- [elpa] externals/denote 7ca08f2a66 07/20: Refactor denote-org-capture and remove denote-org-capture-with-prompts, ELPA Syncer, 2023/12/20
- [elpa] externals/denote f0910d3146 13/20: Add denote-menu-bar-mode, making the Denote menu bar optional, ELPA Syncer, 2023/12/20
- [elpa] externals/denote 6e5ddc2623 01/20: Refactor denote-file-has-identifier-p and use it in various functions, ELPA Syncer, 2023/12/20
- [elpa] externals/denote faaf5f94ab 03/20: Use denote-rename-max-mini-window-height in denote-change-file-type-and-front-matter, ELPA Syncer, 2023/12/20
- [elpa] externals/denote e6b7ba74e6 05/20: Make denote-retrieve-filename-identifier consistent with other functions, ELPA Syncer, 2023/12/20
- [elpa] externals/denote f1730b7798 17/20: Acknowledge Ashton Wiersdorf for commit e2ba6c1, ELPA Syncer, 2023/12/20
- [elpa] externals/denote f26d8d7799 08/20: Handle nil case in denote-sort--define-lessp, ELPA Syncer, 2023/12/20
- [elpa] externals/denote 4899ca5c78 09/20: Remove separator for the last file in denote-org-dblock-add-files, ELPA Syncer, 2023/12/20
- [elpa] externals/denote 6acb25c7ec 10/20: Create aliases for denote-retrieve-front-matter-* functions, ELPA Syncer, 2023/12/20
- [elpa] externals/denote 195f0c3b7f 14/20: Acknowledge Joseph Turner for commits 4261d19, f0910d3, ELPA Syncer, 2023/12/20