branch: externals/denote commit e4d070e028c6941809f6a33ee147b130381e2402 Merge: e94cc50fd4 11396de4c9 Author: Protesilaos Stavrou <i...@protesilaos.com> Commit: GitHub <nore...@github.com>
Merge pull request #293 from jeanphilippegg/renaming-commands Renaming commands --- README.org | 6 ---- denote.el | 108 +++++++++++++++++++++++++++++-------------------------------- 2 files changed, 51 insertions(+), 63 deletions(-) diff --git a/README.org b/README.org index 129e995d5f..71ed68a1e0 100644 --- a/README.org +++ b/README.org @@ -1224,12 +1224,6 @@ The command does the same for the =SIGNATURE= prompt, subject to ~denote-prompts~, by prefilling the minibuffer with the current signature of =FILE=, if any. -In interactive use, if =FILE= has a signature, ~denote-rename-file~ -produces a =SIGNATURE= prompt regardless of the value of ~denote-prompts~. -This way, notes created with the ~denote-signature~ command, or -equivalent, as a derogation from the norm imposed by ~denote-prompt~, -do not necessarily lose their signature. - Same principle for the =KEYWORDS= prompt: it converts the keywords in the file name into a comma-separated string and prefills the minibuffer with it (the =KEYWORDS= prompt accepts more than one keywords, each diff --git a/denote.el b/denote.el index 329e288664..c7ddec5df5 100644 --- a/denote.el +++ b/denote.el @@ -155,14 +155,14 @@ saved automatically." :package-version '(denote . "2.3.0") :type 'boolean) -;;;###autoload (put 'denote-known-keywords 'safe-local-variable (lambda (val) (or (listp val) (null val)))) +;;;###autoload (put 'denote-known-keywords 'safe-local-variable #'listp) (defcustom denote-known-keywords '("emacs" "philosophy" "politics" "economics") "List of strings with predefined keywords for `denote'. Also see user options: `denote-infer-keywords', `denote-sort-keywords', `denote-file-name-slug-functions'." :group 'denote - :safe (lambda (val) (or (listp val) (null val))) + :safe #'listp :package-version '(denote . "0.1.0") :type '(repeat string)) @@ -2768,14 +2768,9 @@ minibuffer that consists of the current title of FILE. The current title is either retrieved from the front matter (such as the #+title in Org) or from the file name. -Do the same for the SIGNATURE prompt, subject to `denote-prompts', by -prefilling the minibuffer with the current signature of FILE, if any. - -In interactive use, if FILE has a signature, produce a SIGNATURE prompt -regardless of the value of `denote-prompts'. This way, notes created -with the `denote-signature' command, or equivalent, as a derogation from -the norm imposed by `denote-prompt', do not necessarily lose their -signature. +Do the same for the SIGNATURE prompt, subject to `denote-prompts', +by prefilling the minibuffer with the current signature of FILE, +if any. Same principle for the KEYWORDS prompt: convert the keywords in the file name into a comma-separated string and prefill the @@ -2846,29 +2841,28 @@ one-by-one, use `denote-dired-rename-files'." (let* ((file (denote--rename-dired-file-or-prompt)) (file-type (denote-filetype-heuristics file)) (file-in-prompt (propertize (file-relative-name file) 'face 'denote-faces-prompt-current-name)) - (args (make-vector 4 nil))) + (date nil) + (title (denote-retrieve-title-or-filename file file-type)) + (keywords (denote-convert-file-name-keywords-to-crm (or (denote-retrieve-filename-keywords file) ""))) + (signature (or (denote-retrieve-filename-signature file) ""))) (dolist (prompt denote-prompts) (pcase prompt ('title - (aset args 0 (denote-title-prompt - (denote-retrieve-title-or-filename file file-type) - (format "Rename `%s' with TITLE (empty to remove)" file-in-prompt)))) + (setq title (denote-title-prompt + title + (format "Rename `%s' with TITLE (empty to remove)" file-in-prompt)))) ('keywords - (aset args 1 (denote-keywords-prompt - (format "Rename `%s' with KEYWORDS (empty to remove)" file-in-prompt) - (denote-convert-file-name-keywords-to-crm (or (denote-retrieve-filename-keywords file) ""))))) + (setq keywords (denote-keywords-prompt + (format "Rename `%s' with KEYWORDS (empty to remove)" file-in-prompt) + keywords))) ('signature - (aset args 2 (denote-signature-prompt - (or (denote-retrieve-filename-signature file) "") - (format "Rename `%s' with SIGNATURE (empty to remove)" file-in-prompt)))) + (setq signature (denote-signature-prompt + signature + (format "Rename `%s' with SIGNATURE (empty to remove)" file-in-prompt)))) ('date (unless (denote-file-has-identifier-p file) - (aset args 3 (denote-date-prompt)))))) - (when (denote-file-has-signature-p file) - (aset args 2 (denote-signature-prompt - (or (denote-retrieve-filename-signature file) "") - (format "Rename `%s' with SIGNATURE (empty to remove)" file-in-prompt)))) - (append (vector file) args nil))) + (setq date (denote-date-prompt)))))) + (list file title keywords signature date))) (let* ((dir (file-name-directory file)) (id (or (denote-retrieve-filename-identifier file) (denote-create-unique-file-identifier file (denote--get-all-used-ids) date))) @@ -2901,42 +2895,42 @@ setting `denote-rename-no-confirm' to a non-nil value)." (interactive nil dired-mode) (if-let ((marks (dired-get-marked-files))) (let ((used-ids (unless (seq-every-p #'denote-file-has-identifier-p marks) - (denote--get-all-used-ids))) - (date-p (memq 'date denote-prompts)) - (title-p (memq 'title denote-prompts)) - (keywords-p (memq 'keywords denote-prompts)) - (signature-p (memq 'signature denote-prompts))) + (denote--get-all-used-ids)))) (dolist (file marks) (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 (when date-p - (denote-prompt-for-date-return-id)) - (denote-retrieve-filename-identifier file) + (id (or (denote-retrieve-filename-identifier file) (denote-create-unique-file-identifier file used-ids))) - (title (when title-p - (denote-title-prompt - (denote-retrieve-title-or-filename file file-type) - (format "Rename `%s' with TITLE (empty to remove)" file-in-prompt)))) - (keywords (when keywords-p - (denote-keywords-sort - (denote-keywords-prompt - (format "Rename `%s' with KEYWORDS (empty to remove)" file-in-prompt) - (denote-convert-file-name-keywords-to-crm (or (denote-retrieve-filename-keywords file) "")))))) - (signature (when (or signature-p (denote-file-has-signature-p file)) - (denote-signature-prompt - (or (denote-retrieve-filename-signature file) "") - (format "Rename `%s' with SIGNATURE (empty to remove)" file-in-prompt)))) - (extension (denote-get-file-extension file)) - (new-name (denote-format-file-name dir id keywords title extension signature))) - (denote-rename-file-and-buffer file new-name) - (when (denote-file-is-writable-and-supported-p new-name) - (if (denote--edit-front-matter-p new-name file-type) - (denote-rewrite-front-matter new-name title keywords file-type :no-confirm) - (denote--add-front-matter new-name title keywords id file-type :save-buffer))) - (run-hooks 'denote-after-rename-file-hook) - (when used-ids - (puthash id t used-ids)))) + (title (denote-retrieve-title-or-filename file file-type)) + (keywords (denote-convert-file-name-keywords-to-crm (or (denote-retrieve-filename-keywords file) ""))) + (signature (or (denote-retrieve-filename-signature file) "")) + (extension (denote-get-file-extension file))) + (dolist (prompt denote-prompts) + (pcase prompt + ('title + (setq title (denote-title-prompt + title + (format "Rename `%s' with TITLE (empty to remove)" file-in-prompt)))) + ('keywords + (setq keywords (denote-keywords-prompt + (format "Rename `%s' with KEYWORDS (empty to remove)" file-in-prompt) + keywords))) + ('signature + (setq signature (denote-signature-prompt + signature + (format "Rename `%s' with SIGNATURE (empty to remove)" file-in-prompt)))) + ('date + (setq id (denote-prompt-for-date-return-id))))) + (let ((new-name (denote-format-file-name dir id keywords title extension signature))) + (denote-rename-file-and-buffer file new-name) + (when (denote-file-is-writable-and-supported-p new-name) + (if (denote--edit-front-matter-p new-name file-type) + (denote-rewrite-front-matter new-name title keywords file-type :no-confirm) + (denote--add-front-matter new-name title keywords id file-type :save-buffer))) + (run-hooks 'denote-after-rename-file-hook) + (when used-ids + (puthash id t used-ids))))) (denote-update-dired-buffers)) (user-error "No marked files; aborting")))