[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/denote 061c7013eb 2/6: Add denote--title-key-regexp and
From: |
ELPA Syncer |
Subject: |
[elpa] externals/denote 061c7013eb 2/6: Add denote--title-key-regexp and denote--keywords-key-regexp functions and use them |
Date: |
Fri, 12 Aug 2022 23:57:30 -0400 (EDT) |
branch: externals/denote
commit 061c7013eb1a722273faee4276814efc07e79929
Author: Jean-Philippe Gagné Guay <jeanphilippe150@gmail.com>
Commit: Jean-Philippe Gagné Guay <jeanphilippe150@gmail.com>
Add denote--title-key-regexp and denote--keywords-key-regexp functions and
use them
- Use the new functions instead of
denote--retrieve-title-front-matter-key-regexp and
denote--retrieve-keywords-front-matter-key-regexp.
- Add file-type parameters in some functions.
- Refactor denote--filetype-heuristics to not use the retrieval
functions because they depend on the file type and this is what we want
to find in denote--filetype-heuristics.
---
denote.el | 136 +++++++++++++++++++++++++++++++++++++-------------------------
1 file changed, 82 insertions(+), 54 deletions(-)
diff --git a/denote.el b/denote.el
index 9633af30ca..cd82694bfc 100644
--- a/denote.el
+++ b/denote.el
@@ -557,6 +557,24 @@ output is sorted with `string-lessp'."
;;;; Front matter or content retrieval functions
+(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.")
@@ -594,20 +612,20 @@ If optional KEY is non-nil, return the key instead."
(buffer-substring-no-properties (point) (point-at-eol))
trims trims)))))))))
-(defun denote--retrieve-value-title (file &optional key)
- "Return title value from FILE.
+(defun denote--retrieve-value-title (file &optional key 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-title-front-matter-key-regexp
+ (denote--title-key-regexp file-type)
key))
-(defun denote--retrieve-value-keywords (file &optional key)
- "Return keywords value from FILE.
+(defun denote--retrieve-value-keywords (file &optional key 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
+ (denote--keywords-key-regexp file-type)
key))
(defun denote--retrieve-read-file-prompt ()
@@ -682,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 nil file-type)))
(split-string keywords "[:,\s]+" t "[][ \"']+")))
;; TODO 2022-08-10: These are `defvar' and not `defcustom' because
@@ -1088,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)
@@ -1154,10 +1172,11 @@ appropriate."
(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
@@ -1167,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.
@@ -1179,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 nil
file-type))
(new-keywords (denote--format-front-matter-keywords
keywords (denote--filetype-heuristics file))))
(with-current-buffer (find-file-noselect file)
@@ -1187,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 nil file-type))
+ (old-keywords (denote--retrieve-value-keywords file nil
file-type))
(new-title title)
(new-keywords (denote--format-front-matter-keywords
keywords (denote--filetype-heuristics file))))
@@ -1215,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)))))))
@@ -1307,23 +1326,25 @@ 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 nil 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)
+ (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)))))
(define-obsolete-function-alias
@@ -1377,14 +1398,15 @@ 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 nil 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)
+ (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))))
(revert-buffer))
(user-error "No marked files; aborting")))
@@ -1413,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 nil 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))
@@ -1463,8 +1486,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 nil 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)))
@@ -1738,9 +1762,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 nil file-type))))
(format pattern file-id file-title)))
;;;###autoload
@@ -1948,7 +1973,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 nil 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"))))
@@ -2214,13 +2240,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 nil file-type))
((string-match-p "\s\s" value)))
file))
(seq-remove
@@ -2256,11 +2284,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 ()
@@ -2287,11 +2315,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
- [elpa] externals/denote updated (16e67cba93 -> 75cbaaf3a1), ELPA Syncer, 2022/08/12
- [elpa] externals/denote eff882fb09 4/6: Add file-type parameter to denote--add-front-matter, ELPA Syncer, 2022/08/12
- [elpa] externals/denote fe4bd822fd 5/6: Remove the optional key parameter from denote--retrieve-search and related functions, ELPA Syncer, 2022/08/12
- [elpa] externals/denote dbe003bae7 3/6: Use with-temp-buffer instead of with-current-buffer in denote--regexp-in-file-p, ELPA Syncer, 2022/08/12
- [elpa] externals/denote 061c7013eb 2/6: Add denote--title-key-regexp and denote--keywords-key-regexp functions and use them,
ELPA Syncer <=
- [elpa] externals/denote 75cbaaf3a1 6/6: Merge pull request #88 from jeanphilippegg/cleanup, ELPA Syncer, 2022/08/12
- [elpa] externals/denote aeb8905128 1/6: Remove some unused variables and functions, ELPA Syncer, 2022/08/12