branch: externals/denote
commit 46f4799342fd8af5f674d77ec9ef82a1e4fef775
Author: Protesilaos Stavrou <i...@protesilaos.com>
Commit: Protesilaos Stavrou <i...@protesilaos.com>

    Rewrite denote--inferred-keywords as denote-infer-keywords-from-files
---
 README.org |  8 ++++++++
 denote.el  | 25 +++++++++++++++++--------
 2 files changed, 25 insertions(+), 8 deletions(-)

diff --git a/README.org b/README.org
index aa9cafbc4c..a0a358f11f 100644
--- a/README.org
+++ b/README.org
@@ -4822,6 +4822,14 @@ The following sections cover the specifics.
   return something like =.org= even if the actual file extension is
   =.org.gpg=.
 
+#+findex: denote-infer-keywords-from-files
++ Functions ~denote-infer-keywords-from-files~ :: Return list of
+  keywords in ~denote-directory-files~. With optional
+  =FILES-MATCHING-REGEXP=, only extract keywords from the matching
+  files. Otherwise, do it for all files. Keep any duplicates. Users
+  who do not want duplicates should refer to the functions
+  ~denote-keywords~. [ Part of {{{development-version}}}. ]
+
 #+findex: denote-keywords
 + Function ~denote-keywords~ :: Return appropriate list of keyword
   candidates. If ~denote-infer-keywords~ is non-nil, infer keywords
diff --git a/denote.el b/denote.el
index b37110c9e7..46ebc6a8ef 100644
--- a/denote.el
+++ b/denote.el
@@ -1786,17 +1786,26 @@ Also see `denote-retrieve-filename-keywords'."
 (defalias 'denote-retrieve-filename-keywords-as-list 
'denote-extract-keywords-from-path
   "Alias for the function `denote-extract-keywords-from-path'")
 
-(defun denote--inferred-keywords (&optional files-matching-regexp)
-  "Extract keywords from `denote-directory-files'.
+(define-obsolete-function-alias
+  'denote--inferred-keywords
+  'denote-infer-keywords-from-files
+  "4.0.0")
+
+(defun denote-infer-keywords-from-files (&optional files-matching-regexp)
+  "Return list of keywords in `denote-directory-files'.
 With optional FILES-MATCHING-REGEXP, only extract keywords from the
 matching files.  Otherwise, do it for all files.
 
-This function returns duplicates.  The `denote-keywords' is the
-one that doesn't."
-  (let ((kw (mapcan #'denote-extract-keywords-from-path 
(denote-directory-files files-matching-regexp))))
+Keep any duplicates.  Users who do not want duplicates should refer to
+the functions `denote-keywords'."
+  (when-let* ((files (denote-directory-files files-matching-regexp))
+              (keywords (mapcan #'denote-extract-keywords-from-path files)))
     (if-let* ((regexp denote-excluded-keywords-regexp))
-        (seq-remove (apply-partially #'string-match-p regexp) kw)
-      kw)))
+        (seq-remove
+         (lambda (k)
+           (string-match-p regexp k))
+         keywords)
+      keywords)))
 
 (defun denote-keywords (&optional files-matching-regexp)
   "Return appropriate list of keyword candidates.
@@ -1811,7 +1820,7 @@ all files.
 Filter inferred keywords with the user option 
`denote-excluded-keywords-regexp'."
   (delete-dups
    (if denote-infer-keywords
-       (append (denote--inferred-keywords files-matching-regexp) 
denote-known-keywords)
+       (append (denote-infer-keywords-from-files files-matching-regexp) 
denote-known-keywords)
      denote-known-keywords)))
 
 (defvar denote-keyword-history nil

Reply via email to