branch: externals/denote commit ba081010fa499b53e32e47092d29e4fde85f8b2a Author: Protesilaos Stavrou <i...@protesilaos.com> Commit: Protesilaos Stavrou <i...@protesilaos.com>
Define commands to create direct links to files whose contents match a query --- denote.el | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/denote.el b/denote.el index 9cf3dedc1d..ec2d08519c 100644 --- a/denote.el +++ b/denote.el @@ -5552,6 +5552,42 @@ inserts links with just the identifier." (defalias 'denote-link-insert-links-matching-regexp 'denote-add-links "Alias for `denote-add-links' command.") +;;;;; Link to file with matching contents + +;;;###autoload +(defun denote-link-to-file-with-contents (query &optional id-only) + "Link to a file whose contents match QUERY. +This is similar to `denote-link', except that the file prompt is limited +to files matching QUERY. Optional ID-ONLY has the same meaning as in +`denote-link'." + (interactive + (list (denote-query-link-prompt nil "Files whose contents include QUERY"))) + (if-let* ((files (denote-retrieve-files-xref-query query)) + ;; NOTE 2025-03-29: Maybe we should have a named prompt + ;; for this case, but I think we do not need it right now. + (file (completing-read + (format "Select FILE with contents `%s': " + (propertize query 'face 'denote-faces-prompt-current-name)) + (denote--completion-table 'file files) + nil t nil 'denote-file-history))) + (denote-link file + (denote-filetype-heuristics buffer-file-name) + (denote-get-link-description file) + id-only) + (user-error "No files include the query `%s' in their contents" query))) + +;;;###autoload +(defun denote-link-to-all-files-with-contents (query &optional id-only) + "Link to all files whose contents match QUERY. +This is similar to `denote-add-links', except it searches inside file +contents, not file names. Optional ID-ONLY has the same meaning as in +`denote-link' and `denote-add-links'." + (interactive + (list (denote-query-link-prompt nil "Files whose contents include QUERY"))) + (if-let* ((files (denote-retrieve-files-xref-query query))) + (denote-link--insert-links files (denote-filetype-heuristics buffer-file-name) id-only) + (user-error "No files include the query `%s' in their contents" query))) + ;;;;; Links from Dired marks ;; NOTE 2022-07-21: I don't think we need a history for this one.