branch: externals/denote
commit d4ba0eb290bd7afe54300718f16f23919390ce9b
Author: Protesilaos Stavrou <[email protected]>
Commit: Protesilaos Stavrou <[email protected]>

    Update to Denote version 4.1.0
---
 CHANGELOG.org | 473 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 README.org    |  58 ++-----
 denote.el     |   2 +-
 3 files changed, 490 insertions(+), 43 deletions(-)

diff --git a/CHANGELOG.org b/CHANGELOG.org
index 4f545859df..a9effe0a5b 100644
--- a/CHANGELOG.org
+++ b/CHANGELOG.org
@@ -13,6 +13,479 @@ the manual: <https://protesilaos.com/emacs/denote>.
 
 #+toc: headlines 1 insert TOC here, with one headline level
 
+* Version 4.1.0 on 2025-10-17
+:PROPERTIES:
+:CUSTOM_ID: h:385847d5-4990-4c1f-9869-82113fe1b47f
+:END:
+
+The overarching theme of version =4.1.0= is that of continuing to
+deliver on the highly hackable/flexible/powerful potential of Denote.
+All the core functionality is the same as before and you still only
+need a tiny configuration to use Denote productively. We are adding
+more refinements and subtle improvements under the hood, while making
+it even easier for advanced users/developers to piece together a
+workflow that matches their particular needs.
+
+Since version =4.0.0=, we have moved the "Denote extras" files into
+their own packages. I cover their changes further down after I
+elaborate on all the changes to the core Denote package:
+
+- [[#h:ce5befb1-0401-4b06-ad4f-64c567b15b91][~denote-journal~ version 0.2.0]]
+- [[#h:d2e18b7d-dc8d-48ad-a0d7-71f291d5aa7c][~denote-sequence~ version 0.2.0]]
+- [[#h:d2e18b7d-dc8d-48ad-a0d7-71f291d5aa7c][~denote-sequence~ version 0.2.0]]
+
+Note that I write all the release notes by hand. The reason is that I
+consider this process an essential part of my role as a maintainer.
+Taking the time to review and document everything ensures that (i) I am
+well informed about the state of the package, (ii) I did not forget
+anything about this development cycle, and (iii) I take another look
+at the changes we made to ensure everything is in order.
+
+** Overview of the new features for core Denote
+:PROPERTIES:
+:CUSTOM_ID: h:47ec2fca-8fd4-4f96-af89-454e0a001e46
+:END:
+
+- The user option ~denote-directory~ can be assigned to a list of
+  directories. The original string value is also acceptable and
+  remains the default.
+
+- Advanced users can define a completely custom scheme for
+  identifiers. This can be as simple as automatically assigned ordinal
+  numbers to increasingly complex patterns that may also involve user
+  input.
+
+- The command ~denote-find-backlink-with-location~ is like
+  ~denote-find-backlink~ except it also moves to the exact location of
+  the link in the corresponding file.
+
+- All Denote buffer names share a common prefix, which is subject to
+  the user option ~denote-buffer-name-prefix~. This makes it easier to
+  spot them in the buffer list.
+
+- The command ~denote-dired~ (alias ~denote-sort-dired~) can sort
+  files by =random= and =last-modified= in addition to the methods
+  that involve Denote file name components.
+
+- The user option ~denote-query-sorting~ controls how files in all
+  query buffers are sorted by default. This covers backlinks, query
+  links for file contents, and any buffer produced by the
+  ~denote-grep~ command. It benefits from the internal "Denote sort"
+  mechanism, which is also used by ~denote-dired~ and the Org dynamic
+  blocks of the ~denote-org~ package.
+
+Remember that the release notes are true only at the time of
+publication. The single source of truth always is the official manual.
+
+** Set ~denote-directory~ to a list of directories
+:PROPERTIES:
+:CUSTOM_ID: h:60ed9223-a092-4d2a-a6b6-3ba72150648b
+:END:
+
+The user option ~denote-directory~ can optionally be bound to a list
+of file system paths, each of which represents a directory root, such
+as ='("/home/prot/Documents/work/" "=/home/prot/Git/hut/")= (Denote
+has always supported subdirectories, even for a singular ~denote-directory~).
+
+When creating new files, such as with the ~denote~ command, the first
+directory on the list will be selected. This can be changed by
+modifying the ~denote-prompts~ user option so that it asks for a
+directory or subdirectory thereof. Or by writing small wrapper
+commands that put files in a predefined directory, like this:
+
+#+begin_src emacs-lisp
+(defun my-denote-for-work ()
+  "Like `denote' but always use the ~/Documents/work/ directory."
+  (interactive)
+  (let ((denote-use-directory "~/Documents/work/"))
+    (call-interactively 'denote)))
+#+end_src
+
+Why have many directories as part of the ~denote-directory~? Some
+users want to maintain separate directories with Denote files, while
+retaining the option of establishing links between (unlike the concept
+of "silos" we support, where the directories are self-contained).
+Those two directories can be their own Git repositories, for example,
+and have different syncing policies for access across multiple
+devices.
+
+Thanks to Jean-Philippe Gagné Guay for providing the core
+functionality in pull request 609: 
<https://github.com/protesilaos/denote/pull/609>.
+
+Jean-Philippe is a long-time contributor who has assigned copyright to
+the Free Software Foundation. I made several changes on top, such as
+to allow ~denote-dired~ (alias ~denote-sort-dired~) to work with many
+directories, by finding their common root (which would ultimately be
+=/=).
+
+** Define completely custom Denote identifiers
+:PROPERTIES:
+:CUSTOM_ID: h:e15ef74b-d86e-4c36-812b-2ebd0f4b7dcf
+:END:
+
+The default Denote identifier should work for most people in most
+cases. I have considered the Denote file-naming scheme carefully and
+know it is reliable. Advanced users who have a clear use-case of
+something out-of-the-ordinary can now get "Denoted" file names with
+arbitrary identifiers. Since this is an advanced feature, I will not
+elaborate here on the technicalities. Though I have taken the time to
+write at length in the manual about it, with concrete examples ranging
+from simple to more complex scenaria. Start with this introduction:
+<https://protesilaos.com/emacs/denote#h:3048f558-7d84-45d6-9ef2-53055483e801>.
+
+This feature has been discussed and requested for a long time, across
+several related issues:
+
+- <https://github.com/protesilaos/denote/issues/278>.
+- <https://github.com/protesilaos/denote/issues/474>.
+- <https://github.com/protesilaos/denote/issues/581>.
+
+Thanks, in no particular order, to mentalisttraceur, juh2, Christian
+Tietze, and Jean-Philippe Gagné Guay for sharing their thoughts. Also
+thanks to Jean-Philippe Gagné Guay for contributing the patches that
+made this possible, the last of which is in pull request 586:
+<https://github.com/protesilaos/denote/issues/586>.
+
+** Find a backlink at its exact location in the file
+:PROPERTIES:
+:CUSTOM_ID: h:f0388079-05f6-417b-b232-42aee3447909
+:END:
+
+Denote has two ways of working with backlinks: (i) to display them in
+a dedicated buffer and (ii) to use a minibuffer prompt that supports
+completion in order to pick one file out of the list. The new command
+~denote-find-backlink-with-location~ is of the latter kind. Like its
+more generic ~denote-find-backlink~ counterpart, it uses the
+minibuffer to pick a file that links to the current one. Then, it also
+moves the cursor to where the link is.
+
+I did this is in response to issue 471 as reported by johkneisl:
+<https://github.com/protesilaos/denote/issues/471>.
+
+** Denote buffer names use the ~denote-buffer-name-prefix~
+:PROPERTIES:
+:CUSTOM_ID: h:9057709b-8e5f-4628-9463-8bd938a8e92e
+:END:
+
+This is a new user option that takes an arbitrary string. Its value is
+="[D]"= by default. It consolidates how we name all of our buffers.
+Out-of-the-box, this applies to special buffers, like those produced
+by the commands ~denote-backlinks~ and ~denote-dired~. When the
+optional minor mode ~denote-rename-buffer-mode~ is enabled, all
+buffers whose file naming scheme is that of Denote will get the
+~denote-buffer-name-prefix~ in addition to their own 
~denote-rename-buffer-format~.
+
+This is related to pull request 597 by James Kalyan:
+<https://github.com/protesilaos/denote/pull/597>. James has assigned
+copyright to the Free Software Foundation.
+
+** The Denote sort mechanism can sort by =random= and =last-modified=
+:PROPERTIES:
+:CUSTOM_ID: h:f6ea4714-1ed4-4db7-ad4b-c040b6c60c6d
+:END:
+
+In core Denote, this is used internally by the ~denote-dired~ command
+(alias ~denote-sort-dired~) and the query buffers (more in the next
+section). By default, ~denote-dired~ prompts for the sort method and
+whether to reverse the order. Though there are user options to tweak
+its behaviour (consult the manual). The Org dynamic blocks of the
+~denote-org~ package also rely on this mechanism 
([[#h:1403c3b9-280d-4033-a930-5364bf7b5e90][~denote-org~ version 0.2.0]]).
+
+** Control the default sort of files in query buffers
+:PROPERTIES:
+:CUSTOM_ID: h:42bd3513-98fa-4653-9e4b-b0918938ae3b
+:END:
+
+Query buffers are those of ~denote-backlinks~, ~denote-grep~, and
+~denote-query-contents-link~ (in the latter case, the query buffer is
+produced when you click on the link). Users can now modify how they
+sort matching files via the option ~denote-query-sorting~. The sorting
+methods are by any of the Denote file names components (per
+~denote-sort-components~), random order, last modified, or an
+arbitrary function.
+
+Thanks to Lucas Quintana for the contribution in pull request 594:
+<https://github.com/protesilaos/denote/pull/594>. Lucas has assigned
+copyright to the Free Software Foundation.
+
+** Miscellaneous for core Denote
+:PROPERTIES:
+:CUSTOM_ID: h:889e72d5-3532-431d-a691-2e2ca7237d58
+:END:
+
+- The ~denote-dired~ command (alias ~denote-sort-dired~) sets up its
+  ~revert-buffer-function~ in a more robust way, such that it does not
+  affect the window layout under certain conditions.
+
+- Fixed a bug with the menu entry of Denote that broke
+  ~context-menu-mode~. It addresses issue 592, as reported by artelse:
+  <https://github.com/protesilaos/denote/issues/592>. Thanks to Lucas
+  Quintana for the patch. Lucas has assigned copyright to the Free
+  Software Foundation.
+
+- Thanks to ryota for refining the documentation of the variable
+  ~denote-use-template~ and its potential interference with
+  ~denote-org-capture-identifiers~ in custom user code. We discussed
+  this in issue 545 and the patch was sent as pull request 598:
+  - <https://github.com/protesilaos/denote/issues/545>.
+  - <https://github.com/protesilaos/denote/pull/598>. The change is
+    small, meaning that ryota does not need to assign copyright to
+    the Free Software Foundation.
+
+- An internal check to determine if a file has backlinks is now faster
+  than before: it exits with a non-~nil~ value as soon as it finds one
+  match, instead of trying to collect all the backlinks. Thanks to
+  Yann Dutrieux for addressing an omission of mine in the original
+  implementation and then for discussing with me some further
+  refinements. Yann's contribution was sent as pull request 637:
+  <https://github.com/protesilaos/denote/pull/637>.
+
+- Thanks to Alan Schmitt and Ashish Panigrahi for fixing a couple of
+  typos, in pull requests 623 and 626, respectively:
+  - <https://github.com/protesilaos/denote/pull/623>.
+  - <https://github.com/protesilaos/denote/pull/626>.
+
+** Git commits for core Denote
+:PROPERTIES:
+:CUSTOM_ID: h:ef286c08-8e04-4d33-b72c-696c026c8183
+:END:
+
+#+begin_src sh
+~/Git/Projects/denote $ git shortlog 4.0.0..4.1.0  --summary --numbered
+   156 Protesilaos Stavrou
+    29 Jean-Philippe Gagné Guay
+     4 Lucas Quintana
+     2 James Kalyan
+     1 Alan Schmitt
+     1 Ashish Panigrahi
+     1 Hanwen Guo
+     1 Ryota
+     1 Yann Dutrieux
+#+end_src
+
+** Changes to the extensions of Denote I maintain
+:PROPERTIES:
+:CUSTOM_ID: h:dec0751e-6757-46e8-9982-718cc454b1ed
+:END:
+
+This concerns all the former "Denote extras" that were shipped with
+core Denote as well as ~consult-denote~.
+
+*** ~consult-denote~ version 0.4.0
+:PROPERTIES:
+:CUSTOM_ID: h:52525fbf-6801-4676-91da-095a7439e582
+:END:
+
+- The commands ~consult-denote-grep~ and ~consult-denote-find~ also
+  work when ~denote-directory~ is set to a list value, as explained
+  further above ([[#h:60ed9223-a092-4d2a-a6b6-3ba72150648b][Set 
~denote-directory~ to a list of directories]]).
+
+- There is a Consult-powered counterpart to the
+  ~denote-sequence-file-prompt~. It is for users of the
+  ~denote-sequence~ package and comes into effect when the
+  ~consult-denote-mode~ is enabled (that mode "Consults" all relevant
+  minibuffer prompts Denote uses so they get the familiar preview
+  functionality). The ~denote-sequence-file-prompt~ is used by
+  commands such as ~denote-sequence~, ~denote-sequence-find~, and
+  ~denote-sequence-link~, among others 
([[#h:d2e18b7d-dc8d-48ad-a0d7-71f291d5aa7c][~denote-sequence~ version 0.2.0]]).
+
+- The command ~consult-denote-find~ sorts its files by default. We
+  discussed this with Gianluca Della Vedova and Gianluca implemented
+  the tweak in pull request 18:
+  <https://github.com/protesilaos/consult-denote/pull/18>. The change
+  is small, meaning that Gianluca does not need to assign copyright to
+  the Free Software Foundation.
+
+*** ~denote-journal~ version 0.2.0
+:PROPERTIES:
+:CUSTOM_ID: h:ce5befb1-0401-4b06-ad4f-64c567b15b91
+:END:
+
+- It is now possible to specify the desired interval used by the
+  command ~denote-journal-new-or-existing-entry~ to determine what
+  "new" and "existing" mean. Users may want to, for example, maintain
+  one file per month, with daily entries as headings or as free-form
+  text. The user option ~denote-journal-interval~ specifies the
+  interval as a symbol among =daily=, =weekly=, =monthly=, and
+  =yearly=. Thanks to Ning Xu for floating the idea of non-daily
+  journaling in issue 18: 
<https://github.com/protesilaos/denote-journal/issues/18>.
+  - Thanks to Alan Schmitt for catching a couple of errors in my
+    original implementation and for suggesting fixes in pull requests
+    20 and 21. Also thanks to Abdelhak Bougouffa for addressing
+    another problem in pull request 23. Further changes by me.
+    - <https://github.com/protesilaos/denote-journal/pull/20>.
+    - <https://github.com/protesilaos/denote-journal/pull/21>.
+    - <https://github.com/protesilaos/denote-journal/pull/23>.
+
+- The new user option ~denote-journal-signature~ specifies a signature
+  that will be applied to all new journal entries. It is the
+  counterpart of ~denote-journal-keyword~. Possible values are ~nil~,
+  for no predefined signature, a string for a constant signature, and a
+  function that returns a string which is then used as-is. Thanks to
+  Halogen3576 for suggesting an option for a signature in issue 13:
+  <https://github.com/protesilaos/denote-journal/issues/13>.
+
+  In the case of a function value, users may wish to integrate the
+  ~denote-journal~ package with the ~denote-sequence~ package
+  ([[#h:d2e18b7d-dc8d-48ad-a0d7-71f291d5aa7c][~denote-sequence~ version 
0.2.0]]). For example, each new journal
+  entry should be defined as a new parent sequence. Thus:
+
+  #+begin_src emacs-lisp
+  (setq denote-journal-signature
+        (lambda ()
+          (denote-sequence-get-new 'parent)))
+  #+end_src
+
+- The user option ~denote-journal-keyword~ is extended to support a
+  function value which should return a string or list of strings.
+
+- The integration with =M-x calendar= (when the minor mode
+  ~denote-journal-calendar-mode~ is enabled) is more robust when
+  highlighting dates that have a Denote journal entry. Thanks to Alan
+  Schmitt for the patch that improves the check for visible dates
+  only. This was done in pull request 12: 
<https://github.com/protesilaos/denote-journal/pull/12>.
+
+- The ~denote-journal-calendar~ face is extended to also work when
+  Emacs is ran in a TTY. Thanks to Ettore Berardi for the original
+  contribution and for discussing this with me. It was done in pull
+  request 14: <https://github.com/protesilaos/denote-journal/pull/14>.
+  The contribution is less than 15 lines of code, meaning that Ettore
+  does not need to assign copyright to the Free Software Foundation.
+
+- The function ~denote-journal-path-to-new-or-existing-entry~ is
+  tweaked to not kill the buffer of the new file it might generate.
+  Thanks to jbwfu for the change in pull request 17:
+  <https://github.com/protesilaos/denote-journal/pull/17>. The change
+  is small, meaning that the author does not need to assign copyright
+  to the Free Software Foundation.
+
+- Dates with a single digit in the title of a new journal entry no
+  longer have a space where the second digit normally is. So something
+  like =October 1= instead of =October  1=. Thanks to Josh Kingsley for
+  the patch. The change is small, meaning that Josh does not need to
+  assign copyright to the Free Software Foundation. It was done in
+  pull request 24: <https://github.com/protesilaos/denote-journal/pull/24>.
+
+- Thanks to gk2803 for renaming a couple of old symbols to their
+  current names in the commentary of the package. This was done in
+  pull request 10: <https://github.com/protesilaos/denote-journal/pull/10>.
+
+#+begin_src sh
+~/Git/Projects/denote-journal $ git shortlog 0.1.0..0.2.0  --summary --numbered
+    35 Protesilaos Stavrou
+     3 Alan Schmitt
+     2 Ettore Berardi
+     1 Abdelhak Bougouffa
+     1 Josh Kingsley
+     1 gk2803
+     1 jbwfu
+#+end_src
+
+*** ~denote-org~ version 0.2.0
+:PROPERTIES:
+:CUSTOM_ID: h:1403c3b9-280d-4033-a930-5364bf7b5e90
+:END:
+
+- A new Org dynamic block integrates with the ~denote-sequence~
+  package ([[#h:d2e18b7d-dc8d-48ad-a0d7-71f291d5aa7c][~denote-sequence~ 
version 0.2.0]]). The block is called
+  ~denote-sequence~ and can be inserted at point with the command
+  ~denote-org-dblock-insert-sequence~. What this block does is list
+  the descendants of a given sequence up to a maximum depth. The
+  presentation is a typographic list of lists to visualise the
+  hierarchy of the complete sequence, with each set of children nested
+  under its parent. Thanks to Peter Prevos for the original
+  implementation in pull request 9 and for subsequent tweaks in pull
+  request 13. Other changes by me are done to ensure tighter
+  integration with the ~denote-sequence~ package.
+
+  - <https://github.com/protesilaos/denote-org/pull/9>.
+  - <https://github.com/protesilaos/denote-org/pull/13>.
+
+- All Org dynamic blocks that have a =:sort-by-component= parameter
+  can now sort by =random= and =last-modified=. This is made possible
+  by the aforementioned improvements to the core Denote sort mechanism
+  ([[#h:f6ea4714-1ed4-4db7-ad4b-c040b6c60c6d][The Denote sort mechanism can 
sort by =random= and =last-modified=]]).
+
+- The ~denote-missing-links~ Org dynamic block, which can be inserted
+  at point with the command ~denote-org-dblock-insert-missing-links~
+  takes an optional =:not-regexp= parameter. This is a regular
+  expression of files to omit from the results. Same for the
+  ~denote-backlinks~ block, which can be inserted at point with the
+  command ~denote-org-dblock-insert-backlinks~.
+
+- The ~denote-files-as-headings~ Org dynamic block, which can be
+  inserted at point with the command 
~denote-org-dblock-insert-files-as-headings~
+  now also accepts an optional =:exclude-tags= parameter. It is either
+  ~nil~ or non-~nil~ and determines whether the heading will have the
+  file's =#+filetags= as its own tags. Thanks to Matt Nolan for
+  suggesting this idea in issue 14: 
<https://github.com/protesilaos/denote-org/issues/14>.
+
+#+begin_src sh
+~/Git/Projects/denote-org $ git shortlog 0.1.0..0.2.0  --summary --numbered
+    42 Protesilaos Stavrou
+     8 Peter Prevos
+#+end_src
+
+*** ~denote-sequence~ version 0.2.0
+:PROPERTIES:
+:CUSTOM_ID: h:d2e18b7d-dc8d-48ad-a0d7-71f291d5aa7c
+:END:
+
+- The new commands ~denote-sequence-find-next-sibling~ and
+  ~denote-sequence-find-previous-sibling~ move to the next or previous
+  sibling in the given sequence. When called interactively, they work
+  relative to the current file. When called from Lisp, they expect a
+  =SEQUENCE= argument and its corresponding =RELATIVES=.
+
+- The ~denote-sequence-dired~ command is updated to (i) work with a
+  list value for ~denote-directory~ 
([[#h:60ed9223-a092-4d2a-a6b6-3ba72150648b][Set ~denote-directory~ to a list of 
directories]]),
+  as noted further above and (ii) benefit from the refinements done to
+  ~denote-dired~ with regard to its ~revert-buffer-function~.
+
+- The new command ~denote-sequence-rename-as-parent~ makes it easier
+  to apply the Denote file-naming scheme to an existing file and make
+  it a new parent sequence. Thanks to Alex Carney for requesting
+  something along those lines in issue 4:
+  <https://github.com/protesilaos/denote-sequence/issues/4>.
+
+  [ Remember that Denote is highly adaptable/hackable, meaning that
+    many of these convenience commands build on top of the core with small
+    extensions to it. The body of ~denote-sequence-rename-as-parent~ is
+    only 4 lines long, two of which are for an error check. This is
+    typical of much of what we provide and is how users can always
+    extend Denote to do something slightly different than what we
+    support out-of-the-box. ]
+
+- Made several other refinements under the hood, including the
+  addition of more tests. In this regard, thanks to Rory Molinari,
+  Peter Prevos, and Ashton Wiersdorf for fixing three bugs in pull
+  requests 5, 8, and 11, respectively:
+  - <https://github.com/protesilaos/denote-sequence/pull/5>.
+  - <https://github.com/protesilaos/denote-sequence/pull/8>.
+  - <https://github.com/protesilaos/denote-sequence/pull/11>.
+
+#+begin_src sh
+~/Git/Projects/denote-sequence $ git shortlog 0.1.0..0.2.0  --summary 
--numbered
+    61 Protesilaos Stavrou
+     1 Ashton Wiersdorf
+     1 Peter Prevos
+     1 Rory Molinari
+#+end_src
+
+*** Changes to ~denote-markdown~
+:PROPERTIES:
+:CUSTOM_ID: h:6c5aa212-226f-4f14-a4e9-2d1eb00d7707
+:END:
+
+Nothing of substance.
+
+*** Changes to ~denote-silo~
+:PROPERTIES:
+:CUSTOM_ID: h:f5f6675e-fbbe-45c8-9a05-dbcc611c6dab
+:END:
+
+Nothing of substance.
+
 * Version 4.0.0 on 2025-04-15
 :PROPERTIES:
 :CUSTOM_ID: h:8a134846-72cc-4fbf-830d-6ca9fd0f9ec8
diff --git a/README.org b/README.org
index 1ac467059f..6cd3424441 100644
--- a/README.org
+++ b/README.org
@@ -4,9 +4,9 @@
 #+language: en
 #+options: ':t toc:nil author:t email:t num:t
 #+startup: content
-#+macro: stable-version 4.0.0
-#+macro: release-date 2025-04-15
-#+macro: development-version 4.1.0-dev
+#+macro: stable-version 4.1.0
+#+macro: release-date 2025-10-17
+#+macro: development-version 4.2.0-dev
 #+export_file_name: denote.texi
 #+texinfo_filename: denote.info
 #+texinfo_dir_category: Emacs misc features
@@ -427,10 +427,6 @@ alias ~denote-create-note~.
 :CUSTOM_ID: h:e2809afb-5c6c-4a20-9881-00c987bb5345
 :END:
 
-[ Updated as part of {{{development-version}}} to support a list of
-  directories. The old design only accepted a single string,
-  representing a file system path. ]
-
 #+vindex: denote-directory
 The user option ~denote-directory~ specifies the file system path
 where new notes are created. The value is a string. New notes are
@@ -2104,7 +2100,7 @@ presentation is compact: =20220531T091625=. When it has 
this format
 (the default), the delimiter (=@@=) is optional. The =ID= serves as
 the unique identifier of each note and, as such, is also known as the
 file's ID or identifier. The =ID= can be any string: it does not need
-to be associated with a date 
([[#h:3048f558-7d84-45d6-9ef2-53055483e801][Define a completely custom 
identifier scheme]]). [ Custom identifiers are part of 
{{{development-version}}}. ]
+to be associated with a date 
([[#h:3048f558-7d84-45d6-9ef2-53055483e801][Define a completely custom 
identifier scheme]]).
 
 File names can include an arbitrary string of alphanumeric characters
 in the =SIGNATURE= field. Signatures have no clearly defined purpose
@@ -2510,8 +2506,6 @@ words at the relevant prompts.
 :CUSTOM_ID: h:3048f558-7d84-45d6-9ef2-53055483e801
 :END:
 
-[ The following is possible as part of {{{development-version}}}. ]
-
 [ DEVELOPER NOTE: This is for advanced users. If you really need
   custom identifiers but are not sure how to proceed, please ask and I
   will help you. ]
@@ -2804,7 +2798,7 @@ Good luck!
 ;;             (puthash "2000E1AprotFbookPmaxT20250919" t 
denote-used-identifiers)
 ;;             (puthash "2000E1AprotFbookPmaxT20250920" t 
denote-used-identifiers))))
 ;;   (my-denote-get-identifier "2000E1AprotFbookPmaxT20250918" nil))
-;; 
+;;
 ;; (let* ((denote-used-identifiers (make-hash-table :test #'equal))
 ;;        (_ (progn
 ;;             (puthash "2000E1AprotFbookPmaxT20250918" t 
denote-used-identifiers)
@@ -3513,7 +3507,7 @@ the current window.
 Backlinks to the current file can also be visited by using the
 minibuffer completion interface with the ~denote-find-backlink~
 command or the more powerful ~denote-find-backlink-with-location~
-([[#h:1bc2adad-dca3-4878-b9f0-b105d5dec6f4][Visiting linked files via the 
minibuffer]]). [ The command ~denote-find-backlink-with-location~ is part of 
{{{development-version}}}. ]
+([[#h:1bc2adad-dca3-4878-b9f0-b105d5dec6f4][Visiting linked files via the 
minibuffer]]).
 
 ** Writing metanotes
 :PROPERTIES:
@@ -3586,7 +3580,7 @@ Think of the ~denote-find-backlink-with-location~ as the
 minibuffer-centric variant of the backlinks buffer: the backlinks
 buffer sticks around, whereas this one is only available for the
 duration of the command. Depending on the scenario, one is more
-appropriate than the other. [ The command ~denote-find-backlink-with-location~ 
is part of {{{development-version}}}. ]
+appropriate than the other.
 
 ** Fontify links in non-Org buffers
 :PROPERTIES:
@@ -3785,8 +3779,6 @@ its standand attachments' facility).
 :CUSTOM_ID: h:a3a1a2af-a0b8-420c-acb1-855a7d113e69
 :END:
 
-[ This is part of {{{development-version}}}. ]
-
 #+vindex: denote-buffer-name-prefix
 The user option ~denote-buffer-name-prefix~ specifies the text used as
 a prefix of all buffer names generated by Denote. This applies to the
@@ -3828,8 +3820,6 @@ set in the user option ~denote-rename-buffer-format~, 
combined with
 the ~denote-buffer-name-prefix~ 
([[#h:a3a1a2af-a0b8-420c-acb1-855a7d113e69][Set the prefix of all Denote 
buffers]]).
 Other fields are explained elsewhere in this manual 
([[#h:35507c18-35b1-41b9-9d80-52f54fcef3cb][The denote-rename-buffer-format]]).
 
-[ The ~denote-buffer-name-prefix~ is part of {{{development-version}}}. ]
-
 Note that renaming a buffer is not the same as renaming a file
 ([[#h:532e8e2a-9b7d-41c0-8f4b-3c5cbb7d4dca][Renaming files]]). The former is 
just for convenience inside of Emacs.
 Whereas the latter is for writing changes to disk, making them
@@ -3850,8 +3840,6 @@ The value of this user option is a string that gets 
combined with the
 The following specifiers are placeholders for Denote file name
 components ([[#h:4e9c7512-84dc-4dfb-9fa9-e15d51178e5d][The file-naming 
scheme]]):
 
-[ The ~denote-buffer-name-prefix~ is part of {{{development-version}}}. ]
-
 #+vindex: denote-rename-buffer-backlinks-indicator
 - The =%t= is the Denote =TITLE= in the front matter or the file name.
 - The =%T= is the Denote =TITLE= in the file name.
@@ -4009,8 +3997,6 @@ Here are some examples:
 :CUSTOM_ID: h:c958e087-1d23-4a25-afdd-db7bf5606b4c
 :END:
 
-[ The =random= and =last-modified= sort are part of {{{development-version}}}. 
]
-
 When sorting by =title=, =keywords=, =signature=, =identifier=,
 =random=, or =last-modified= with the ~denote-dired~ command (alias 
~denote-sort-dired~),
 Denote will internally apply a sorting function that is specific to
@@ -4179,9 +4165,6 @@ of files that were returned by whichever command produced 
the buffer
   the last search. The user option ~denote-query-sorting~ controlls
   the default sort ([[#h:ec3d009a-518b-439f-a3e5-38342b1c13fe][Control the 
default sort of a query buffer]]).
 
-  [ Both the command ~denote-query-sort-last-search~ and the user option
-    ~denote-query-sorting~ are part of {{{development-version}}}. ]
-
 Remember that these are easy to use even without knowledge of regular
 expressions, thanks to the efficiency of the Denote file-naming scheme
 ([[#h:1a953736-86c2-420b-b566-fb22c97df197][Features of the file-naming scheme 
for searching or filtering]]). For
@@ -4201,8 +4184,6 @@ they can perform.
 :CUSTOM_ID: h:ec3d009a-518b-439f-a3e5-38342b1c13fe
 :END:
 
-[ Part of {{{development-version}}}. ]
-
 #+vindex: denote-query-sorting
 The user option ~denote-query-sorting~ controls the order of matching
 files in a query buffer (buffers that use the ~denote-query-mode~. The
@@ -4592,8 +4573,6 @@ commands:
 - ~my-denote-sort-dired-all-empty-files~
 - ~my-denote-sort-dired-without-all-empty-files~
 
-[ The code in this section depends on functions that are available as part of 
{{{development-version}}}. ]
-
 #+begin_src emacs-lisp
 (defun my-denote--note-has-no-contents-p (file)
   "Return non-nil if FILE is an empty note.
@@ -5502,23 +5481,22 @@ The following sections cover the specifics.
 
 #+findex: denote-directories
 + Function ~denote-directories~ :: Return list of paths to the
-  variable ~denote-directory~. [ Part of {{{development-version}}}. ]
+  variable ~denote-directory~.
 
 #+findex: denote-directories-get-common-root
 + Function ~denote-directories-get-common-root~ :: Return the closest
-  common root of the ~denote-directories~. [ Part of 
{{{development-version}}}. ]
+  common root of the ~denote-directories~.
 
 #+findex: denote-directory-get-files
 + Function ~denote-directory-get-files~ :: Return list with full path
   of valid files in variable ~denote-directory~. Consider files that
-  satisfy ~denote-file-has-identifier-p~ and are not backups. [ Part
-  of {{{development-version}}}. ]
+  satisfy ~denote-file-has-identifier-p~ and are not backups.
 
 #+vindex: denote-directory-get-files-function
 + Variable ~denote-directory-get-files-function~ :: Function to return
   list of Denote files. Each file is a string representing an absolute
   file system path. This is intended for use in the function
-  ~denote-directory-files~. [ Part of {{{development-version}}}. ]
+  ~denote-directory-files~.
 
 #+findex: denote-directory-files
 + Function ~denote-directory-files~ :: Return list of absolute file
@@ -5545,7 +5523,7 @@ The following sections cover the specifics.
 
 #+findex: denote-id-to-date
 + Function ~denote-id-to-date~ :: Convert =IDENTIFIER= to a date
-  string of the form =YYYY-MM-DD=. [ Made public as part of 
{{{development-version}}}. ]
+  string of the form =YYYY-MM-DD=.
 
 ** Predefined note values for developers or advanced users
 :PROPERTIES:
@@ -5632,9 +5610,6 @@ there will be no corresponding prompt.
   according to =COMPONENT=. If =COMPONENT= is ~keyword~, remove
   underscores from =STR= as they are used as the keywords separator in
   file names. Also enforce the rules of the file-naming scheme.
-  [ As part of {{{development-version}}} the
-  ~denote-sluggify-and-apply-rules~ is the new name of
-  ~denote-sluggify~ to better communicate its application. ]
 
 #+findex: denote-sluggify-keyword
 + Function ~denote-sluggify-keyword~ :: Sluggify =STR= while joining
@@ -5693,7 +5668,7 @@ there will be no corresponding prompt.
   ~denote-used-identifiers~. If the initial identifier is nil or an
   identifier cannot be derived from it, then the date can be used
   instead. The date has the same format as ~current-time~. When it is
-  nil, the ~current-time~ is used. [ Part of {{{development-version}}}. ]
+  nil, the ~current-time~ is used.
 
 #+findex: denote-get-path-by-id
 + Function ~denote-get-path-by-id~ :: Return absolute path of =ID=
@@ -5718,7 +5693,7 @@ there will be no corresponding prompt.
 + Function ~denote-retrieve-filename-identifier~ :: Extract identifier
   from =FILE= name, if present, else return nil. To create a new one
   from a date, refer to the ~denote-identifier-generation-function~
-  variable. [ The ~denote-identifier-generation-function~ is part of 
{{{development-version}}}. ]
+  variable.
 
 #+findex: denote-retrieve-filename-title
 + Function ~denote-retrieve-filename-title~ ::  Extract Denote title
@@ -6053,8 +6028,7 @@ there will be no corresponding prompt.
 + Function ~denote-get-links~ :: Return list of links in current or
   optional =FILE=. With optional =FILES= consider only those,
   otherwise use the return value of ~denote-directory-files~. Also see
-  ~denote-get-backlinks~. [ Optional =FILES= is part of
-  {{{development-version}}}. ]
+  ~denote-get-backlinks~.
 
 #+findex: denote-get-backlinks
 + Function ~denote-get-backlinks~ :: Return list of backlinks in
@@ -6108,7 +6082,7 @@ there will be no corresponding prompt.
   rewrite the front matter if appropriate. The purpose of this
   variable is to be ~let~ bound to nil by a caller of the command
   ~denote-rename-file~ or related. This will have the effect of not
-  rewriting the file's front matter [ Part of {{{development-version}}}. ]
+  rewriting the file's front matter.
 
 #+findex: denote-rename-file-prompt
 - Function ~denote-rename-file-prompt~ :: Prompt to rename file named
diff --git a/denote.el b/denote.el
index 2a16a40c0c..f6d14df4c7 100644
--- a/denote.el
+++ b/denote.el
@@ -5,7 +5,7 @@
 ;; Author: Protesilaos Stavrou <[email protected]>
 ;; Maintainer: Protesilaos Stavrou <[email protected]>
 ;; URL: https://github.com/protesilaos/denote
-;; Version: 4.0.0
+;; Version: 4.1.0
 ;; Package-Requires: ((emacs "28.1"))
 
 ;; This file is NOT part of GNU Emacs.

Reply via email to