[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/denote 7b0181835e 3/4: Merge denote-retrieve.el into de
From: |
ELPA Syncer |
Subject: |
[elpa] externals/denote 7b0181835e 3/4: Merge denote-retrieve.el into denote.el |
Date: |
Sat, 30 Jul 2022 00:57:37 -0400 (EDT) |
branch: externals/denote
commit 7b0181835ef98b56d9d38e44c8aba2ac9f24e383
Author: Protesilaos Stavrou <info@protesilaos.com>
Commit: Protesilaos Stavrou <info@protesilaos.com>
Merge denote-retrieve.el into denote.el
All those are internal changes that should not concern the user. This
is a continuation of the work done in commit b284da5 by Jean-Philippe
Gagné Guay, which was submitted in pull request 66 on the GitHub mirror:
<https://github.com/protesilaos/denote/pull/66>.
---
README.org | 1 -
denote-dired.el | 20 ++++-----
denote-link.el | 16 +++----
denote-retrieve.el | 127 -----------------------------------------------------
denote.el | 106 ++++++++++++++++++++++++++++++++++++++++----
5 files changed, 115 insertions(+), 155 deletions(-)
diff --git a/README.org b/README.org
index f2ac83301f..0a566f4bbd 100644
--- a/README.org
+++ b/README.org
@@ -1461,7 +1461,6 @@ Everything is in place to set up the package.
;; You will not need to `require' all those individually once the
;; package is available.
-(require 'denote-retrieve)
(require 'denote-link)
;; By default, we fontify backlinks in their bespoke buffer.
diff --git a/denote-dired.el b/denote-dired.el
index c77e184b08..aa04c0e651 100644
--- a/denote-dired.el
+++ b/denote-dired.el
@@ -172,7 +172,7 @@
;;; Code:
-(require 'denote-retrieve)
+(require 'denote)
(require 'dired)
(defgroup denote-dired ()
@@ -231,7 +231,7 @@ Return t if the file is renamed, nil otherwise."
response)))
;; FIXME 2022-07-25: We should make the underlying regular expressions
-;; that `denote-retrieve--value-title' targets more refined, so that we
+;; that `denote--retrieve-value-title' targets more refined, so that we
;; capture eveyrhing at once.
(defun denote-dired--rewrite-front-matter (file title keywords)
"Rewrite front matter of note after `denote-dired-rename-file'.
@@ -239,8 +239,8 @@ The FILE, TITLE, and KEYWORDS are passed from the renaming
command and are used to construct new front matter values if
appropriate."
(when-let ((denote--edit-front-matter-p file)
- (old-title (denote-retrieve--value-title file))
- (old-keywords (denote-retrieve--value-keywords file))
+ (old-title (denote--retrieve-value-title file))
+ (old-keywords (denote--retrieve-value-keywords file))
(new-title title)
(new-keywords (denote--file-meta-keywords
keywords (denote--filetype-heuristics file))))
@@ -255,11 +255,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--retrieve-title-front-matter-key-regexp 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--retrieve-keywords-front-matter-key-regexp nil t 1)
(search-forward old-keywords nil t 1)
(replace-match (concat "\\1" new-keywords) t)))))))
@@ -317,7 +317,7 @@ will not---manage such files)."
(list
file
(denote--title-prompt
- (or (denote-retrieve--value-title file)
+ (or (denote--retrieve-value-title file)
(file-name-sans-extension (file-name-nondirectory file))))
(denote--keywords-prompt))))
(let* ((dir (file-name-directory file))
@@ -353,7 +353,7 @@ matter, refer to the variables:
(list
file
(denote--title-prompt
- (or (denote-retrieve--value-title file)
+ (or (denote--retrieve-value-title file)
(file-name-sans-extension (file-name-nondirectory file))))
(denote--keywords-prompt))))
(let* ((dir (file-name-directory file))
@@ -405,7 +405,7 @@ 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)
+ (title (or (denote--retrieve-value-title file)
(file-name-sans-extension
(file-name-nondirectory file))))
(extension (file-name-extension file t))
@@ -440,7 +440,7 @@ doc string)."
(dolist (file marks)
(let* ((dir (file-name-directory file))
(id (denote--file-name-id file))
- (title (or (denote-retrieve--value-title file)
+ (title (or (denote--retrieve-value-title file)
(file-name-sans-extension
(file-name-nondirectory file))))
(extension (file-name-extension file t))
diff --git a/denote-link.el b/denote-link.el
index 6decc5acbb..1305566e2c 100644
--- a/denote-link.el
+++ b/denote-link.el
@@ -148,7 +148,7 @@
;;; Code:
-(require 'denote-retrieve)
+(require 'denote)
(defgroup denote-link ()
"Link facility for Denote."
@@ -230,9 +230,9 @@ title."
(defun denote-link--format-link (file pattern)
"Prepare link to FILE using PATTERN."
- (let ((file-id (denote-retrieve--filename-identifier file))
+ (let ((file-id (denote--retrieve-filename-identifier file))
(file-title (unless (string= pattern denote-link--format-id-only)
- (denote-retrieve--value-title file))))
+ (denote--retrieve-value-title file))))
(format pattern file-id file-title)))
;;;###autoload
@@ -242,7 +242,7 @@ With optional ID-ONLY, such as a universal prefix
argument (\\[universal-argument]), insert links with just the
identifier and no further description. In this case, the link
format is always [[denote:IDENTIFIER]]."
- (interactive (list (denote-retrieve--read-file-prompt) current-prefix-arg))
+ (interactive (list (denote--retrieve-read-file-prompt) current-prefix-arg))
(let ((beg (point)))
(insert
(denote-link--format-link
@@ -423,9 +423,9 @@ default, it will show up below the current window."
(interactive)
(let* ((default-directory (denote-directory))
(file (buffer-file-name))
- (id (denote-retrieve--filename-identifier file))
- (title (denote-retrieve--value-title file)))
- (if-let ((files (denote-retrieve--proces-grep id)))
+ (id (denote--retrieve-filename-identifier file))
+ (title (denote--retrieve-value-title file)))
+ (if-let ((files (denote--retrieve-proces-grep id)))
(denote-link--prepare-backlinks id files title)
(user-error "No links to the current note"))))
@@ -590,7 +590,7 @@ This lets the user complete a link through the
`org-insert-link'
interface by first selecting the `denote:' hyperlink type."
(concat
"denote:"
- (denote-retrieve--filename-identifier (denote-retrieve--read-file-prompt))))
+ (denote--retrieve-filename-identifier (denote--retrieve-read-file-prompt))))
(defun denote-link-ol-export (link description format)
"Export a `denote:' link from Org files.
diff --git a/denote-retrieve.el b/denote-retrieve.el
deleted file mode 100644
index 0ce9bc2ba5..0000000000
--- a/denote-retrieve.el
+++ /dev/null
@@ -1,127 +0,0 @@
-;;; denote-retrieve.el --- Internal search functions for Denote -*-
lexical-binding: t -*-
-
-;; Copyright (C) 2022 Free Software Foundation, Inc.
-
-;; Author: Protesilaos Stavrou <info@protesilaos.com>
-;; Maintainer: Denote Development <~protesilaos/denote@lists.sr.ht>
-;; URL: https://git.sr.ht/~protesilaos/denote
-;; Mailing-List: https://lists.sr.ht/~protesilaos/denote
-;; Version: 0.4.0
-;; Package-Requires: ((emacs "27.2"))
-
-;; This file is NOT part of GNU Emacs.
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-;;
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-;;
-;; Used internally by commands that operate on file contents.
-
-;;; Code:
-
-(require 'denote)
-(require 'xref)
-
-(defconst denote-retrieve--title-front-matter-key-regexp
- "^\\(?:#\\+\\)?\\(?:title\\)\\s-*[:=]"
- "Regular expression for title key.")
-
-(defconst denote-retrieve--id-front-matter-key-regexp
- "^.?.?\\b\\(?:identifier\\)\\s-*[:=]"
- "Regular expression for identifier key.")
-
-(defconst denote-retrieve--date-front-matter-key-regexp
- "^\\(?:#\\+\\)?\\(?:date\\)\\s-*[:=]"
- "Regular expression for date key.")
-
-(defun denote-retrieve--filename-identifier (file)
- "Extract identifier from FILE name."
- (if (file-exists-p file)
- (progn
- (string-match denote--id-regexp file)
- (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."
- (when (denote--only-note-p file)
- (with-temp-buffer
- (insert-file-contents file)
- (save-excursion
- (save-restriction
- (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))
-
-(defun denote-retrieve--value-date (file &optional key)
- "Return date value from FILE.
-If optional KEY is non-nil, return the key instead."
- (denote-retrieve--search file denote-retrieve--date-front-matter-key-regexp
key))
-
-(defun denote-retrieve--value-keywords (file &optional key)
- "Return keywords value from FILE.
-If optional KEY is non-nil, return the key instead."
- (denote-retrieve--search file
denote-retrieve--keywords-front-matter-key-regexp key))
-
-(defun denote-retrieve--read-file-prompt ()
- "Prompt for regular file in variable `denote-directory'."
- (read-file-name "Select note: " (denote-directory) nil nil nil
- (lambda (f) (or (denote--only-note-p f) (file-directory-p
f)))))
-
-(defun denote-retrieve--files-in-output (files)
- "Return list of FILES from `find' output."
- (delq nil (mapcar (lambda (f)
- (when (denote--only-note-p f) f))
- files)))
-
-(defun denote-retrieve--xrefs (identifier)
- "Return xrefs of IDENTIFIER in variable `denote-directory'.
-The xrefs are returned as an alist."
- (xref--alistify
- (xref-matches-in-files identifier (denote--directory-files :absolute))
- (lambda (x)
- (xref-location-group (xref-item-location x)))))
-
-(defun denote-retrieve--files-in-xrefs (xrefs)
- "Return sorted file names sans directory from XREFS.
-Parse `denote-retrieve--xrefs'."
- (sort
- (delete-dups
- (mapcar (lambda (x)
- (denote--file-name-relative-to-denote-directory (car x)))
- xrefs))
- #'string-lessp))
-
-(defun denote-retrieve--proces-grep (identifier)
- "Process lines matching IDENTIFIER and return list of files."
- (let* ((default-directory (denote-directory))
- (file (denote--file-name-relative-to-denote-directory
(buffer-file-name))))
- (denote-retrieve--files-in-output
- (delete file (denote-retrieve--files-in-xrefs
- (denote-retrieve--xrefs identifier))))))
-
-(provide 'denote-retrieve)
-;;; denote-retrieve.el ends here
diff --git a/denote.el b/denote.el
index 238b308a95..f008ed938e 100644
--- a/denote.el
+++ b/denote.el
@@ -96,6 +96,7 @@
;;; Code:
(require 'seq)
+(require 'xref)
(eval-when-compile (require 'subr-x))
(defgroup denote ()
@@ -522,12 +523,102 @@ output is sorted with `string-lessp'."
(add-to-history 'denote--keyword-history kw))
(delete-dups keywords)))
-;;;; Front matter retrieval functions
+;;;; Front matter or content retrieval functions
-(defconst denote-retrieve--keywords-front-matter-key-regexp
+(defconst denote--retrieve-id-front-matter-key-regexp
+ "^.?.?\\b\\(?:identifier\\)\\s-*[:=]"
+ "Regular expression for identifier key.")
+
+(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.")
+(defun denote--retrieve-filename-identifier (file)
+ "Extract identifier from FILE name."
+ (if (file-exists-p file)
+ (progn
+ (string-match denote--id-regexp file)
+ (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."
+ (when (denote--only-note-p file)
+ (with-temp-buffer
+ (insert-file-contents file)
+ (save-excursion
+ (save-restriction
+ (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))
+
+(defun denote--retrieve-value-date (file &optional key)
+ "Return date value from FILE.
+If optional KEY is non-nil, return the key instead."
+ (denote--retrieve-search file denote--retrieve-date-front-matter-key-regexp
key))
+
+(defun denote--retrieve-value-keywords (file &optional key)
+ "Return keywords value from FILE.
+If optional KEY is non-nil, return the key instead."
+ (denote--retrieve-search file
denote--retrieve-keywords-front-matter-key-regexp key))
+
+(defun denote--retrieve-read-file-prompt ()
+ "Prompt for regular file in variable `denote-directory'."
+ (read-file-name "Select note: " (denote-directory) nil nil nil
+ (lambda (f) (or (denote--only-note-p f) (file-directory-p
f)))))
+
+(defun denote--retrieve-files-in-output (files)
+ "Return list of FILES from `find' output."
+ (delq nil (mapcar (lambda (f)
+ (when (denote--only-note-p f) f))
+ files)))
+
+(defun denote--retrieve-xrefs (identifier)
+ "Return xrefs of IDENTIFIER in variable `denote-directory'.
+The xrefs are returned as an alist."
+ (xref--alistify
+ (xref-matches-in-files identifier (denote--directory-files :absolute))
+ (lambda (x)
+ (xref-location-group (xref-item-location x)))))
+
+(defun denote--retrieve-files-in-xrefs (xrefs)
+ "Return sorted file names sans directory from XREFS.
+Parse `denote--retrieve-xrefs'."
+ (sort
+ (delete-dups
+ (mapcar (lambda (x)
+ (denote--file-name-relative-to-denote-directory (car x)))
+ xrefs))
+ #'string-lessp))
+
+(defun denote--retrieve-proces-grep (identifier)
+ "Process lines matching IDENTIFIER and return list of files."
+ (let* ((default-directory (denote-directory))
+ (file (denote--file-name-relative-to-denote-directory
(buffer-file-name))))
+ (denote--retrieve-files-in-output
+ (delete file (denote--retrieve-files-in-xrefs
+ (denote--retrieve-xrefs identifier))))))
+
;;;; New note
;;;;; Common helpers for new notes
@@ -587,7 +678,7 @@ treatment)."
(defun denote--extract-keywords-from-front-matter (file &optional type)
"Extract keywords from front matter of FILE with TYPE.
This is the reverse operation of `denote--file-meta-keywords'."
- (let ((fm-keywords (denote-retrieve--value-keywords file)))
+ (let ((fm-keywords (denote--retrieve-value-keywords file)))
(if (or (eq type 'markdown-toml) (eq type 'markdown-yaml) (eq type 'md))
(split-string
(string-trim-right (string-trim-left fm-keywords "\\[") "\\]")
@@ -969,14 +1060,11 @@ This is equivalent to calling `denote' when
`denote-prompts' is set to
;;;;; Common helpers for note modifications
-(declare-function denote-retrieve--value-title "denote-retrieve" (file
&optional key))
-(declare-function denote-retrieve--value-keywords "denote-retrieve" (file
&optional key))
-
(defun denote--filetype-heuristics (file)
"Return likely file type of FILE.
The return value is for `denote--file-meta-header'."
(pcase (file-name-extension file)
- ("md" (if-let ((title-key (denote-retrieve--value-title file t))
+ ("md" (if-let ((title-key (denote--retrieve-value-title file t))
((string-match-p "title\\s-*=" title-key)))
'markdown-toml
'markdown-yaml))
@@ -1058,7 +1146,7 @@ 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 ((denote--edit-front-matter-p file)
- (old-keywords (denote-retrieve--value-keywords file))
+ (old-keywords (denote--retrieve-value-keywords file))
(new-keywords (denote--file-meta-keywords
keywords (denote--filetype-heuristics file))))
(with-current-buffer (find-file-noselect file)
@@ -1066,7 +1154,7 @@ 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--retrieve-keywords-front-matter-key-regexp
nil t 1)
(search-forward old-keywords nil t 1)
(replace-match (concat "\\1" new-keywords) t))))))