branch: externals/denote
commit 8ac9defa14d66943ba732ef1d6d683fed5531a1a
Merge: 3bb05f212c a45d62a64a
Author: Protesilaos Stavrou <i...@protesilaos.com>
Commit: GitHub <nore...@github.com>

    Merge pull request #429 from jeanphilippegg/optional-parameters
    
    Make denote-rename-file parameters non-optional
---
 README.org | 11 ++++++++---
 denote.el  | 23 +++++++++++++++++------
 2 files changed, 25 insertions(+), 9 deletions(-)

diff --git a/README.org b/README.org
index 01d2dcfb43..1bd82c7551 100644
--- a/README.org
+++ b/README.org
@@ -1490,9 +1490,14 @@ separated by a comma, else the ~crm-separator~).
 For all prompts, the ~denote-rename-file~ interprets an empty input as
 an instruction to remove that file name component. For example, if a
 =TITLE= prompt is available and =FILE= is 
=20240211T093531--some-title__keyword1.org=
-then it renames =FILE= to =20240211T093531__keyword1.org=. If a file
-name component is present, but there is no entry for it in
-~denote-prompts~, keep it as-is.
+then it renames =FILE= to =20240211T093531__keyword1.org=.
+
+In interactive use, if there is no entry for a file name
+component in `denote-prompts', keep it as-is.
+
+When called from Lisp, the special symbol `keep-current' can be
+used for the TITLE, KEYWORDS, SIGNATURE and DATE parameters to
+keep them as-is.
 
 [ NOTE: Please check with your minibuffer user interface how to
   provide an empty input. The Emacs default setup accepts the empty
diff --git a/denote.el b/denote.el
index e4cbc25075..8d0310d2ad 100644
--- a/denote.el
+++ b/denote.el
@@ -2980,7 +2980,9 @@ If `denote-rename-confirmations' does not contain
   "Rename FILE according to the other parameters.
 Parameters TITLE, KEYWORDS, SIGNATURE and DATE are as described
 in `denote-rename-file' and are assumed to be valid (TITLE and
-SIGNATURE are strings, KEYWORDS is a list, etc.).
+SIGNATURE are strings, KEYWORDS is a list, etc.).  The special
+symbol `keep-current' can be used for the TITLE, KEYWORDS,
+SIGNATURE and DATE parameters to keep the current value.
 
 This function only does the work necessary to rename a file
 according to its parameters.  In particular, it does not prompt
@@ -2992,9 +2994,14 @@ Respect `denote-rename-confirmations', 
`denote-save-buffers' and
 `denote-kill-buffers'."
   (let* ((initial-state (if (find-buffer-visiting file) 'visited 'not-visited))
          (file-type (denote-filetype-heuristics file))
-         (current-title (or (denote-retrieve-front-matter-title-value file 
file-type) ""))
+         (current-title (or (denote-retrieve-title-or-filename file file-type) 
""))
          (current-keywords (denote-extract-keywords-from-path file))
-         (keywords (denote-keywords-sort keywords))
+         (current-signature (or (denote-retrieve-filename-signature file) ""))
+         (title (if (eq title 'keep-current) current-title title))
+         (keywords (if (eq keywords 'keep-current) current-keywords 
(denote-keywords-sort keywords)))
+         (signature (if (eq signature 'keep-current) current-signature 
signature))
+         ;; 'keep-current is the same as nil because we do not currently allow 
the modification of the identifier
+         (date (if (eq date 'keep-current) nil date))
          (directory (file-name-directory file))
          (extension (file-name-extension file :include-period))
          ;; TODO: For now, we cannot change the identifier. We retrieve
@@ -3061,7 +3068,7 @@ renaming commands."
     (list title keywords signature date)))
 
 ;;;###autoload
-(defun denote-rename-file (file &optional title keywords signature date)
+(defun denote-rename-file (file title keywords signature date)
   "Rename file and update existing front matter if appropriate.
 
 Always rename the file where it is located in the file system:
@@ -3118,8 +3125,12 @@ remove that file name component.  For example, if a 
TITLE prompt
 is available and FILE is 20240211T093531--some-title__keyword1.org
 then rename FILE to 20240211T093531__keyword1.org.
 
-If a file name component is present, but there is no entry for it in
-`denote-prompts', keep it as-is.
+In interactive use, if there is no entry for a file name
+component in `denote-prompts', keep it as-is.
+
+When called from Lisp, the special symbol `keep-current' can be
+used for the TITLE, KEYWORDS, SIGNATURE and DATE parameters to
+keep them as-is.
 
 [ NOTE: Please check with your minibuffer user interface how to
   provide an empty input.  The Emacs default setup accepts the

Reply via email to