branch: externals/denote commit 75cbaaf3a151a714f4ec06dda5b66f3d812f41a7 Merge: 16e67cba93 fe4bd822fd Author: Protesilaos Stavrou <i...@protesilaos.com> Commit: GitHub <nore...@github.com>
Merge pull request #88 from jeanphilippegg/cleanup Remove some unused variables and functions --- denote.el | 190 ++++++++++++++++++++++++++++++++------------------------------ 1 file changed, 99 insertions(+), 91 deletions(-) diff --git a/denote.el b/denote.el index cb7b27a779..59ed2ad722 100644 --- a/denote.el +++ b/denote.el @@ -562,18 +562,28 @@ output is sorted with `string-lessp'." ;;;; Front matter or content retrieval functions -(defconst denote--retrieve-id-front-matter-key-regexp - "^.?.?\\b\\(?:identifier\\)\\s-*[:=]" - "Regular expression for identifier key.") +(defun denote--title-key-regexp (file-type) + "Return the title key regexp associated to FILE-TYPE." + (cond ((or (eq file-type 'markdown-yaml) (eq file-type 'text)) + "^title\\s-*:") + ((eq file-type 'org) + "^#+title\\s-*:") + ((eq file-type 'markdown-toml) + "^title\\s-*="))) + +(defun denote--keywords-key-regexp (file-type) + "Return the keywords key regexp associated to FILE-TYPE." + (cond ((or (eq file-type 'markdown-yaml) (eq file-type 'text)) + "^tags\\s-*:") + ((eq file-type 'org) + "^#+filetags\\s-*:") + ((eq file-type 'markdown-toml) + "^tags\\s-*="))) (defconst denote--retrieve-title-front-matter-key-regexp "^\\(?:#\\+\\)?\\(?:title\\)\\s-*[:=]" "Regular expression for title key.") -(defconst denote--retrieve-date-front-matter-key-regexp - "^\\(?:#\\+\\)?\\(?:date\\)\\s-*[:=]" - "Regular expression for date key.") - (defconst denote--retrieve-keywords-front-matter-key-regexp "^\\(?:#\\+\\)?\\(?:tags\\|filetags\\)\\s-*[:=]" "Regular expression for keywords key.") @@ -586,9 +596,8 @@ output is sorted with `string-lessp'." (match-string 0 file)) (error "Cannot find `%s' as a file" file))) -(defun denote--retrieve-search (file key-regexp &optional key) - "Return value of KEY-REGEXP key in current buffer from FILE. -If optional KEY is non-nil, return the key instead." +(defun denote--retrieve-search (file key-regexp) + "Return value of KEY-REGEXP key in current buffer from FILE." ;; NOTE 2022-08-11: The `or' is superfluous, but I am keeping it as a ;; reminder. See TODO comment above `denote--only-note-p' (when (or (denote--writable-and-supported-p file) @@ -600,36 +609,24 @@ If optional KEY is non-nil, return the key instead." (widen) (goto-char (point-min)) (when (re-search-forward key-regexp nil t 1) - (if key - (match-string-no-properties 0) - (let ((trims "[ \t\n\r\"']+")) - (string-trim - (buffer-substring-no-properties (point) (point-at-eol)) - trims trims))))))))) - -(defun denote--retrieve-value-title (file &optional key) - "Return title value from FILE. -If optional KEY is non-nil, return the key instead." - (denote--retrieve-search - file - denote--retrieve-title-front-matter-key-regexp - key)) + (let ((trims "[ \t\n\r\"']+")) + (string-trim + (buffer-substring-no-properties (point) (point-at-eol)) + trims trims)))))))) -(defun denote--retrieve-value-date (file &optional key) - "Return date value from FILE. +(defun denote--retrieve-value-title (file file-type) + "Return title value from FILE according to FILE-TYPE. If optional KEY is non-nil, return the key instead." (denote--retrieve-search file - denote--retrieve-date-front-matter-key-regexp - key)) + (denote--title-key-regexp file-type))) -(defun denote--retrieve-value-keywords (file &optional key) - "Return keywords value from FILE. +(defun denote--retrieve-value-keywords (file file-type) + "Return keywords value from FILE according to FILE-TYPE. If optional KEY is non-nil, return the key instead." (denote--retrieve-search file - denote--retrieve-keywords-front-matter-key-regexp - key)) + (denote--keywords-key-regexp file-type))) (defun denote--retrieve-read-file-prompt () "Prompt for regular file in variable `denote-directory'." @@ -703,10 +700,11 @@ Apply `downcase' to KEYWORDS." ((eq type 'org) (format ":%s:" (string-join kw ":")))))) -(defun denote--front-matter-keywords-to-list (file) +(defun denote--front-matter-keywords-to-list (file file-type) "Return keywords from front matter of FILE as list of strings. -This is the reverse operation of `denote--format-front-matter-keywords'." - (when-let ((keywords (denote--retrieve-value-keywords file))) +FILE-TYPE is used to retrieve the keywords. This is the reverse +operation of `denote--format-front-matter-keywords'." + (when-let ((keywords (denote--retrieve-value-keywords file file-type))) (split-string keywords "[:,\s]+" t "[][ \"']+"))) ;; TODO 2022-08-10: These are `defvar' and not `defcustom' because @@ -1109,8 +1107,7 @@ set to \\='(template title keywords)." "Return likely file type of FILE. The return value is for `denote--format-front-matter'." (pcase (file-name-extension file) - ("md" (if-let ((title-key (denote--retrieve-value-title file t)) - ((string-match-p "title\\s-*=" title-key))) + ("md" (if (denote--regexp-in-file-p "^title\\s-*" file) 'markdown-toml 'markdown-yaml)) ("txt" 'text) @@ -1153,32 +1150,33 @@ Update Dired buffers if the file is renamed." (rename-file old-name new-name nil) (denote--rename-buffer old-name new-name))) -(defun denote--add-front-matter (file title keywords id) +(defun denote--add-front-matter (file title keywords id file-type) "Prepend front matter to FILE if `denote--only-note-p'. -The TITLE, KEYWORDS and ID are passed from the renaming -command and are used to construct a new front matter block if -appropriate." +The TITLE, KEYWORDS ID, and FILE-TYPE are passed from the +renaming command and are used to construct a new front matter +block if appropriate." (when-let* (((denote--only-note-p file)) - (filetype (denote--filetype-heuristics file)) - (date (denote--date (date-to-time id) filetype)) - (new-front-matter (denote--format-front-matter title date keywords id filetype))) + (date (denote--date (date-to-time id) file-type)) + (new-front-matter (denote--format-front-matter title date keywords id file-type))) (with-current-buffer (find-file-noselect file) (goto-char (point-min)) (insert new-front-matter)))) (defun denote--regexp-in-file-p (regexp file) "Return t if REGEXP matches in the FILE." - (with-current-buffer (find-file-noselect file) + (with-temp-buffer + (insert-file-contents file) (save-excursion (save-restriction (widen) (goto-char (point-min)) (re-search-forward regexp nil t 1))))) -(defun denote--edit-front-matter-p (file) +(defun denote--edit-front-matter-p (file file-type) "Test if FILE should be subject to front matter rewrite. -This is relevant for operations that insert or rewrite the front -matter in a Denote note. +Use FILE-TYPE to look for the front matter lines. This is +relevant for operations that insert or rewrite the front matter +in a Denote note. For the purposes of this test, FILE is a Denote note when it (i) is a regular file, (ii) is writable, (iii) has a supported file @@ -1188,11 +1186,11 @@ variable `denote-directory'." (not (denote--file-empty-p file)) ;; Heuristic to check if this is one of our notes (string-prefix-p (denote-directory) (expand-file-name file)) ; FIXME 2022-08-11: Why do we need this? - (denote--regexp-in-file-p denote--retrieve-title-front-matter-key-regexp file) - (denote--regexp-in-file-p denote--retrieve-keywords-front-matter-key-regexp file))) + (denote--regexp-in-file-p (denote--title-key-regexp file-type) file) + (denote--regexp-in-file-p (denote--title-key-regexp file-type) file))) -(defun denote--rewrite-keywords (file keywords) - "Rewrite KEYWORDS in FILE outright. +(defun denote--rewrite-keywords (file keywords file-type) + "Rewrite KEYWORDS in FILE outright according to FILE-TYPE. Do the same as `denote--rewrite-front-matter' for keywords, but do not ask for confirmation. @@ -1200,7 +1198,7 @@ but do not ask for confirmation. This is for use in `denote-dired-rename-marked-files' or related. Those commands ask for confirmation once before performing an operation on multiple files." - (when-let ((old-keywords (denote--retrieve-value-keywords file)) + (when-let ((old-keywords (denote--retrieve-value-keywords file file-type)) (new-keywords (denote--format-front-matter-keywords keywords (denote--filetype-heuristics file)))) (with-current-buffer (find-file-noselect file) @@ -1208,20 +1206,20 @@ operation on multiple files." (save-restriction (widen) (goto-char (point-min)) - (re-search-forward denote--retrieve-keywords-front-matter-key-regexp nil t 1) + (re-search-forward (denote--keywords-key-regexp file-type) nil t 1) (search-forward old-keywords nil t 1) (replace-match (concat "\\1" new-keywords) t)))))) ;; FIXME 2022-07-25: We should make the underlying regular expressions ;; that `denote--retrieve-value-title' targets more refined, so that we ;; capture eveyrhing at once. -(defun denote--rewrite-front-matter (file title keywords) +(defun denote--rewrite-front-matter (file title keywords file-type) "Rewrite front matter of note after `denote-dired-rename-file'. -The FILE, TITLE, and KEYWORDS are passed from the renaming -command and are used to construct new front matter values if -appropriate." - (when-let ((old-title (denote--retrieve-value-title file)) - (old-keywords (denote--retrieve-value-keywords file)) +The FILE, TITLE, KEYWORDS, and FILE-TYPE are passed from the +renaming command and are used to construct new front matter +values if appropriate." + (when-let ((old-title (denote--retrieve-value-title file file-type)) + (old-keywords (denote--retrieve-value-keywords file file-type)) (new-title title) (new-keywords (denote--format-front-matter-keywords keywords (denote--filetype-heuristics file)))) @@ -1236,11 +1234,11 @@ appropriate." (save-restriction (widen) (goto-char (point-min)) - (re-search-forward denote--retrieve-title-front-matter-key-regexp nil t 1) + (re-search-forward (denote--title-key-regexp file-type) nil t 1) (search-forward old-title nil t 1) (replace-match (concat "\\1" new-title) t) (goto-char (point-min)) - (re-search-forward denote--retrieve-keywords-front-matter-key-regexp nil t 1) + (re-search-forward (denote--keywords-key-regexp file-type) nil t 1) (search-forward old-keywords nil t 1) (replace-match (concat "\\1" new-keywords) t))))))) @@ -1328,24 +1326,26 @@ since we already have all the requisite mechanisms in place (though Denote does not---and will not---manage such files)." (interactive - (let ((file (denote--rename-dired-file-or-prompt))) + (let* ((file (denote--rename-dired-file-or-prompt)) + (file-type (denote--filetype-heuristics file))) (list file (denote--title-prompt - (or (denote--retrieve-value-title file) (file-name-base file))) + (or (denote--retrieve-value-title file file-type) (file-name-base file))) (denote--keywords-prompt)))) (let* ((dir (file-name-directory file)) (id (denote--file-name-id file)) (extension (file-name-extension file t)) + (file-type (denote--filetype-heuristics file)) (new-name (denote--format-file dir id keywords (denote--sluggify title) extension)) (max-mini-window-height 0.33)) ; allow minibuffer to be resized (when (denote--rename-file-prompt file new-name) (denote--rename-file file new-name) (denote-update-dired-buffers) - (if (denote--edit-front-matter-p new-name) - (denote--rewrite-front-matter new-name title keywords) - (denote--add-front-matter new-name title keywords id))))) + (if (denote--edit-front-matter-p new-name file-type) + (denote--rewrite-front-matter new-name title keywords file-type) + (denote--add-front-matter new-name title keywords id file-type))))) (define-obsolete-function-alias 'denote-dired-rename-file-and-add-front-matter @@ -1398,15 +1398,16 @@ The operation does the following: (dolist (file marks) (let* ((dir (file-name-directory file)) (id (denote--file-name-id file)) - (title (or (denote--retrieve-value-title file) + (file-type (denote--filetype-heuristics file)) + (title (or (denote--retrieve-value-title file file-type) (file-name-base file))) (extension (file-name-extension file t)) (new-name (denote--format-file dir id keywords (denote--sluggify title) extension))) (denote--rename-file file new-name) - (if (denote--edit-front-matter-p new-name) - (denote--rewrite-keywords new-name keywords) - (denote--add-front-matter new-name title keywords id)))) + (if (denote--edit-front-matter-p new-name file-type) + (denote--rewrite-keywords new-name keywords file-type) + (denote--add-front-matter new-name title keywords id file-type)))) (revert-buffer)) (user-error "No marked files; aborting"))) @@ -1434,8 +1435,9 @@ typos and the like." (interactive (list (buffer-file-name))) (when (buffer-modified-p) (user-error "Save buffer before proceeding")) - (if-let* ((title (denote--retrieve-value-title file)) - (keywords (denote--front-matter-keywords-to-list file)) + (if-let* ((file-type (denote--filetype-heuristics file)) + (title (denote--retrieve-value-title file file-type)) + (keywords (denote--front-matter-keywords-to-list file file-type)) (extension (file-name-extension file t)) (id (denote--file-name-id file)) (dir (file-name-directory file)) @@ -1485,8 +1487,9 @@ their respective front matter." (dolist (file marks) (let* ((dir (file-name-directory file)) (id (denote--file-name-id file)) - (title (denote--retrieve-value-title file)) - (keywords (denote--front-matter-keywords-to-list file)) + (file-type (denote--filetype-heuristics file)) + (title (denote--retrieve-value-title file file-type)) + (keywords (denote--front-matter-keywords-to-list file file-type)) (extension (file-name-extension file t)) (new-name (denote--format-file dir id keywords (denote--sluggify title) extension))) @@ -1530,7 +1533,8 @@ relevant front matter." (buffer-file-name) (denote--title-prompt) (denote--keywords-prompt))) - (denote--add-front-matter file title keywords (denote--file-name-id file))) + (denote--add-front-matter file title keywords (denote--file-name-id file) + (denote--filetype-heuristics file))) ;;;; The Denote faces @@ -1765,9 +1769,10 @@ title." (defun denote-link--format-link (file pattern) "Prepare link to FILE using PATTERN." - (let ((file-id (denote--retrieve-filename-identifier file)) - (file-title (unless (string= pattern denote-link--format-id-only) - (denote--retrieve-value-title file)))) + (let* ((file-id (denote--retrieve-filename-identifier file)) + (file-type (denote--filetype-heuristics file)) + (file-title (unless (string= pattern denote-link--format-id-only) + (denote--retrieve-value-title file file-type)))) (format pattern file-id file-title))) ;;;###autoload @@ -1975,7 +1980,8 @@ default, it will show up below the current window." (interactive) (let* ((file (buffer-file-name)) (id (denote--retrieve-filename-identifier file)) - (title (denote--retrieve-value-title file))) + (file-type (denote--filetype-heuristics file)) + (title (denote--retrieve-value-title file file-type))) (if-let ((files (denote--retrieve-process-grep id))) (denote-link--prepare-backlinks id files title) (user-error "No links to the current note")))) @@ -2241,13 +2247,15 @@ Consult the manual for template samples." ;;;; For the migration of old Org filetags -(defun denote--migrate-type-files (type) +(defun denote--migrate-type-files (type file-type) "Return list of TYPE files in variable `denote-directory'. -TYPE is a string which matches the `file-name-extension'." +TYPE is a string which matches the `file-name-extension'. +FILE-TYPE is the symbol file-type." (delq nil (mapcar (lambda (file) - (when-let* ((value (denote--retrieve-value-keywords file)) + (when-let* ((value (denote--retrieve-value-keywords + file file-type)) ((string-match-p "\s\s" value))) file)) (seq-remove @@ -2283,11 +2291,11 @@ shall be deprecated and eventually removed from future versions of Denote. Written on 2022-08-10 for version 0.5.0." (interactive) (when-let (((yes-or-no-p "Rewrite filetags in Org files to use colons (buffers are NOT saved)?")) - (files (denote--migrate-type-files "org"))) + (files (denote--migrate-type-files "org" 'org))) (dolist (file files) - (when-let* ((kw (denote--front-matter-keywords-to-list file)) - ((denote--edit-front-matter-p file))) - (denote--rewrite-keywords file kw))))) + (when-let* ((kw (denote--front-matter-keywords-to-list file 'org)) + ((denote--edit-front-matter-p file 'org))) + (denote--rewrite-keywords file kw 'org))))) ;;;###autoload (defun denote-migrate-old-markdown-yaml-tags () @@ -2314,11 +2322,11 @@ shall be deprecated and eventually removed from future versions of Denote. Written on 2022-08-10 for version 0.5.0." (interactive) (when-let (((yes-or-no-p "Rewrite filetags in Org files to use colons (buffers are NOT saved)?")) - (files (denote--migrate-type-files "md"))) + (files (denote--migrate-type-files "md" 'markdown-yaml))) (dolist (file files) - (when-let* ((kw (denote--front-matter-keywords-to-list file)) - ((denote--edit-front-matter-p file))) - (denote--rewrite-keywords file kw))))) + (when-let* ((kw (denote--front-matter-keywords-to-list file 'markdown-yaml)) + ((denote--edit-front-matter-p file 'markdown-yaml))) + (denote--rewrite-keywords file kw 'markdown-yaml))))) (provide 'denote) ;;; denote.el ends here