branch: externals/denote
commit 58568d3be547cb746018717c6f8dc23dd6661de5
Author: Protesilaos Stavrou <[email protected]>
Commit: Protesilaos Stavrou <[email protected]>
Add SAVE-BUFFER arg to denote-rename-file-using-front-matter and conform
with denote-rename-no-confirm
---
README.org | 21 +++++++++++++++++++--
denote.el | 37 +++++++++++++++++++++++++++++--------
2 files changed, 48 insertions(+), 10 deletions(-)
diff --git a/README.org b/README.org
index 49095dc099..8215e076e5 100644
--- a/README.org
+++ b/README.org
@@ -1287,6 +1287,12 @@ use, but carries out the renaming without asking for
confirmation
:CUSTOM_ID: h:3ab08ff4-81fa-4d24-99cb-79f97c13a373
:END:
+[ Revised as part of {{{development-version}}} to (i) accept an
+ optional double prefix argument to automatically save the buffer and
+ (ii) to not ask for confirmation while renaming and to automatically
+ save the buffer if the user option ~denote-rename-no-confirm~ is
+ non-nil ([[#h:a2ae9090-c49e-4b32-bcf5-eb8944241fd7][The
~denote-rename-no-confirm~ option]]). ]
+
#+findex: denote-rename-file-using-front-matter
In the previous section, we covered the more general mechanism of the
command ~denote-rename-file~
([[#h:7cc9e000-806a-48da-945c-711bbc7426b0][Rename a single file]]). There is
also a
@@ -1329,8 +1335,19 @@ The renaming is subject to a "yes or no" prompt that
shows the old and
new names, just so the user is certain about the change.
If called interactively with a prefix argument (=C-u= by default) or
-from Lisp with a non-nil =AUTO-CONFIRM= argument, this "yes or no"
-prompt is skipped.
+from Lisp with a non-nil =NO-CONFIRM= argument, this "yes or no"
+prompt is skipped and the renaming is done outright.
+
+[ The following are part of {{{development-version}}}. ]
+
+If called interactively with a double prefix argument (=C-u C-u= by
+default) or from Lisp with a non-nil =SAVE-BUFFER= argument, the
+buffer is saved after the front matter is updated and the file is
+renamed.
+
+If the user option ~denote-rename-no-confirm~ is non-nil, it is
+interpreted the same way as a combination of =NO-CONFIRM= and
+=SAVE-BUFFER= ([[#h:a2ae9090-c49e-4b32-bcf5-eb8944241fd7][The
~denote-rename-no-confirm~ option]]).
The identifier of the file, if any, is never modified even if it is
edited in the front matter: Denote considers the file name to be the
diff --git a/denote.el b/denote.el
index 8f38ec571b..74d52127c1 100644
--- a/denote.el
+++ b/denote.el
@@ -2887,14 +2887,14 @@ Run the `denote-after-rename-file-hook' after renaming
is done.
(user-error "No marked files; aborting")))
;;;###autoload
-(defun denote-rename-file-using-front-matter (file &optional auto-confirm)
+(defun denote-rename-file-using-front-matter (file &optional no-confirm
save-buffer)
"Rename FILE using its front matter as input.
When called interactively, FILE is the return value of the
function `buffer-file-name' which is subsequently inspected for
the requisite front matter. It is thus implied that the FILE has
a file type that is supported by Denote, per `denote-file-type'.
-Unless AUTO-CONFIRM is non-nil (such as with a prefix argument),
+Unless NO-CONFIRM is non-nil (such as with a prefix argument),
ask for confirmation, showing the difference between the old and
the new file names.
@@ -2903,11 +2903,29 @@ edited in the front matter. Denote considers the file
name to be
the source of truth in this case to avoid potential breakage with
typos and the like.
-If AUTO-CONFIRM is non-nil, then proceed with the renaming
-operation without prompting for confirmation. This is what the
-command `denote-dired-rename-marked-files-using-front-matter'
-does internally."
- (interactive (list (buffer-file-name) current-prefix-arg))
+If NO-CONFIRM is non-nil (such as with a prefix argument) do not
+prompt for confirmation while renaming the file. Do it outright.
+
+If optional SAVE-BUFFER is non-nil (such as with a double prefix
+argument), save the corresponding buffer.
+
+If the user option `denote-rename-no-confirm' is non-nil,
+interpret it the same way as a combination of NO-CONFIRM and
+SAVE-BUFFER.
+
+The identifier of the file, if any, is never modified even if it
+is edited in the front matter: Denote considers the file name to
+be the source of truth in this case, to avoid potential breakage
+with typos and the like."
+ (interactive
+ (let (no-confirm save-buffer)
+ (cond
+ ((and current-prefix-arg (> (prefix-numeric-value current-prefix-arg) 4))
+ (setq no-confirm t
+ save-buffer t))
+ (current-prefix-arg
+ (setq no-confirm t)))
+ (list buffer-file-name no-confirm save-buffer)))
(unless (denote-file-is-writable-and-supported-p file)
(user-error "The file is not writable or does not have a supported file
extension"))
(if-let ((file-type (denote-filetype-heuristics file))
@@ -2918,10 +2936,13 @@ does internally."
(extension (denote-get-file-extension file))
(dir (file-name-directory file))
(new-name (denote-format-file-name dir id keywords title
extension signature)))
- (when (or auto-confirm
+ (when (or denote-rename-no-confirm
+ no-confirm
(denote-rename-file-prompt file new-name))
(denote-rename-file-and-buffer file new-name)
(denote-update-dired-buffers)
+ (when (or denote-rename-no-confirm save-buffer)
+ (save-buffer))
(run-hooks 'denote-after-rename-file-hook)))
(user-error "No identifier or front matter for title")))