This library provides two user- or developer-facing functions,
`denote-regexp' and `denote-regexp-rx'.  The function
`denote-regexp' uses `denote-regexp-rx' under the hood, and this
may be helpful to developers primarily.  In either case, they
generate some representation of a regular expression to match
Denote files, based on `denote-file-name-components-order' and
user-provided input.  Each of them take the following arguments:

 - `:identifier' a (partial) identifier string.  If the length of
   the string is less than 15, it will be expanded with the `any'
   character class so that it fits 15 characters.  Additionally, if
   `identifier' is not the first element of
   `denote-file-name-components-order', the "@@" prefix will be
   added.

 - `:signature' a Denote file signature.  This will be sluggified
   using `denote-sluggify', and the "==" prefix will be added.

 - `:title' a note's title.  This should be a string, not a regular
   expression (a future feature).  This will be sluggified (using
   `denote-sluggify'), and prefixed with "--".

 - `:keywords' keywords for a note.  This will be prefixed with
   "__".  The format of this argument is as follows:

    - If it is a string, it well be passed to `denote-sluggify'.

    - If it is a list, starting with `or' or `:or', it will be
      treated as a regular expression disjunction (`rx's `or'), and
      the remainder of the list will be processed recursively.

    - If it is otherwise a list, (optionally starting with `and' or
      `:and'), it will be treated as a regular expression sequence.
      If all remaining elements of the list are strings, it will be
      sorted following `denote-sort-keywords', otherwise, all -
      elements will be processed recursively.

 - `:file-type' will match known file types. This should be a
   symbol or list of symbols representing file types which are part
   of `denote-file-types'.

Finally, a `denote' construct for `rx' is available as well, which
follows the same arguments as above.

** Examples

 - To match a file with the keywords "project" and "inprogress", use:
    (denote-regexp :keywords '("project" "inprogress"))

 - To match a file whose identifier starts with "2024", use:
    (denote-regexp :identifier "2024")

 - To match a file with the (unsluggified) signature
   "soloway85:_from_probl_progr_plans", use:
    (denote-regexp :signature "soloway85:_from_probl_progr_plans")

 - To match a file with either the keyword "agenda" or both
   "project" and "inprogress", use:
    (denote-regexp :keywords '(or "agenda" (and "project" "inprogress")))

 - To match denote-journal-extras files from May of 2023, use:
    (denote-regexp :signature "202305" :keywords denote-journal-extras-keyword)

 - To match in-progress projects as part of a denote-links block:
   #+BEGIN: denote-links :regexp (denote :keywords '("project" "inprogress"))
   #+END:

** Errors and Patches

If you find an error, or have a patch to improve this package,
please send an email to ~swflint/emacs-utilities@lists.sr.ht.