Update to Denote version 2.2.0

This commit is contained in:
Protesilaos Stavrou 2023-12-10 08:52:54 +02:00
parent 5afc7de949
commit dec04ce383
No known key found for this signature in database
GPG key ID: 99BD6459CD5CA3EA
3 changed files with 386 additions and 71 deletions

View file

@ -13,6 +13,374 @@ the manual: <https://protesilaos.com/emacs/denote>.
#+toc: headlines 1 insert TOC here, with one headline level
* Version 2.2.0 on 2023-12-10
:PROPERTIES:
:CUSTOM_ID: h:8efed390-cfa0-420d-b300-0cb76bf2c9f9
:END:
The present version covers four broad themes:
1. Denote rename commands are more user-friendly and featureful.
2. An optional sorting facility makes it possible to produce a
filtered and sorted Dired buffer with Denote files.
3. The optional Denote Org dynamic blocks have received a lot of attention.
4. Bug fixes and internal refinements.
[ Remember that you do not need to be a programmer to contribute to
Denote. Report a bug, make a suggestion, or just describe how you
want to use this package. Every idea counts and we may implement it
if we can. ]
** The rename commands can remove a Denote file name component
:PROPERTIES:
:CUSTOM_ID: h:54d803d8-4863-4160-bb2f-3302fb8bff23
:END:
The commands we provide to rename files using the Denote file-naming
scheme---~denote-rename-file~, ~denote-dired-rename-files~, and
~denote-dired-rename-marked-files-with-keywords~---can now remove
Denote file name components. This is done by providing an empty string
at the relevant prompt.
For example, to remove the =TITLE= component from a file called
=20231209T110322==sig--title__keywords.ext= we provide an empty string
at the title prompt. The end result will look something like this:
=20231209T110322==sig__keywords.ext=.
All prompts now include a hint that leaving them empty will ignore the
given field if it does not exist or remove it if it does exist.
Note that you must *check how to input an empty string* with your
minibuffer user interface of choice. For instance, with the ~vertico~
package you can do that with the =M-RET= key binding or by selecting
the prompt line directly (notice the counter showing something like
=*/5= instead of =1/5=). Please make sure to consult the documentation
of the package you are using as this behaviour is not controlled by
Denote. Vertico, and others like it, selects the first candidate if
you type =RET= without any input, which is not the same as an empty
string---it is the first candidate.
Also read the Denote manual on the matter of [[https://protesilaos.com/emacs/denote#h:532e8e2a-9b7d-41c0-8f4b-3c5cbb7d4dca][Renaming files]]. In short,
we use this facility to name all our files, regardless of file type,
in a consistent way that makes them easier to find (I do this with my
videos, for example, and I do it across my filesystem for all personal
files).
** The file-to-be-renamed is easier to read in the minibuffer
:PROPERTIES:
:CUSTOM_ID: h:69d85d3b-0200-4cc1-baff-9d59aa0ff57b
:END:
The commands ~denote-rename-file~ and ~denote-dired-rename-files~
show the name of the file they are operating on in the minibuffer
prompt. This is now produced relative to the current directory,
meaning that instead of =/some/rather/long/path/to/file-name.txt=
Denote only displays =file-name.txt=.
Our rename commands never move files to another directory, anyway, so
we do not need to remind the user of the entire file system path.
To make things easier for users/themes, file names highlighted in
Denote prompts are fontified with either of following faces,
depending on the specifics of the case:
- ~denote-faces-prompt-old-name~
- ~denote-faces-prompt-new-name~
- ~denote-faces-prompt-current-name~
These faces inherit the attributes of basic faces, so they should look
decent without further tweaks across all themes.
** Prompts for title, keywords, and signature accept an empty string
:PROPERTIES:
:CUSTOM_ID: h:5897bcc1-4637-4268-8518-8404d939b4b9
:END:
The prompts defined by Denote that apply to file name components all
accept an empty string. This has the effect of skipping the given
component. For example, we can create a file without a title and
keywords, with the following sequence of actions (I assume you are
using ~vertico~ for the minibuffer user interface):
- Type =M-x denote=.
- Type =M-RET= at the title prompt to input an empty string.
- Now type =M-RET= at the keywords prompt for another empty string.
The resulting file name is something like =20231209T110950.org=.
** Dired with sorting and filtering
:PROPERTIES:
:CUSTOM_ID: h:05aa437b-2fc8-4e01-ac38-ab77baad83af
:END:
The new optional =denote-sort.el= library provides facilities to sort
Denote files by any of their file name components. Users can benefit
from this facility to produce a filtered and sorted listing of Denote
files with the command ~denote-sort-dired~.
~denote-sort-dired~ produces a fully fledged Dired buffer. It asks for a
regular expression that matches file names in the ~denote-directory~.
It then prompts for a sort key and finally checks with the user
whether to reverse the order or not.
[ Do not be discouraged by the term "regular expression". Ordinary
words work fine. Plus, with Denote's file-naming scheme we have
semantics such as =_keyword=, =-title=, ~=signature~, as explained
in the manual. This is the whole point of using a thoughtful naming
scheme. ]
The resulting Dired listing is flat, meaning that files inside of
subdirectories are bundled together with those present at the root of
the ~denote-directory~. In this case, files inside of a subdirectory
include the directory component as a prefix. So we have something like
this:
#+begin_example
test-subdir/20230320T105950--a-new-note__testing.txt
20231202T095629--rename-works-as-intended__one_test_two.org
#+end_example
I think this is a killer feature, as the fully fledged Dired buffer
allows us to perform all supported operations on our Denote
sorted+filtered files (e.g. change file permissions, move files to
another directory, or open them in an external application).
I recorded a video to show how this works:
<https://protesilaos.com/codelog/2023-12-04-emacs-denote-sort-mechanism/>.
[ Remember that we can rename any file using the Denote file-naming
scheme, meaning that our files can include stuff like PDFs and
videos. Combine this with the concept of "silos", which is covered
in the Denote manual, to organise your long-term storage and
retrieve it efficiently. ]
** Combine contents of files with an Org dynamic block
:PROPERTIES:
:CUSTOM_ID: h:d41009c1-9833-4b28-8240-9666bfd26559
:END:
The new =denote-files= Org dynamic block produces a continuous stream
of file contents. It joins together the contents of files inside the
~denote-directory~ whose name matches the given regular expression.
Optional parameters control whether to include links to those files,
omit their front matter, sort by a given file name component, or tweak
the separator between each file's contents.
I produced a video to demonstrate the functionality:
<https://protesilaos.com/codelog/2023-11-25-emacs-denote-org-dynamic-blocks/>.
Use the command ~denote-org-dblock-insert-files~ to insert such a
block directly at point. Read the Denote manual for the
technicalities: [[https://protesilaos.com/emacs/denote#h:f15fa143-5036-416f-9bff-1bcabbb03456][Org dynamic block to insert file contents]].
[ Videos I do will eventually be out-of-date. The manual is the source
of truth. ]
Bear in mind that this feature is not "transclusion". We are simply
printing a copy of the contents of the files in the current buffer.
Changes made to this copy are not reflected in the original files.
The =denote-files= Org dynamic block is an excellent way to quickly
collect your thoughts on a given topic. Although dynamic blocks are a
feature of Org, the contents of the files do not need to be in Org
syntax (I write most of my notes in plain text (=.txt=)).
Thanks to Claudiu Tănăselia for proposing this idea and discussing it
with me. This was done via a private channel and the information is
shared with permission.
** Sort parameters are used in all Denote Org dynamic blocks
:PROPERTIES:
:CUSTOM_ID: h:7b51fe38-302e-488d-9816-7015a8071ddb
:END:
All Denote Org dynamic blocks make use of =denote-sort.el= (described
further above). It powers the =:sort-by-component= and =:reverse-sort=
parameters.
Thanks to Glenna D. for suggesting this feature and discussing it with
me. This was done via a private channel and the information is shared
with permission. It is what inspired me to start work on
=denote-sort.el=, which I then extended to cover Dired, as noted
above.
** The =:missing-only= parameter is removed from Org dynamic blocks
:PROPERTIES:
:CUSTOM_ID: h:2bd26aef-70ad-4d83-a4ab-c75a893a733a
:END:
I am removing it because the underlying functionality of
~denote-add-missing-links~ was not always reliable.
** Files with signature are linked appropriately in Org dynamic blocks
:PROPERTIES:
:CUSTOM_ID: h:144436eb-e674-4052-ac0a-d582b6aa2f53
:END:
In general, we provide the command ~denote-link-with-signature~ to let
the user pick a file that has a signature and link to it. The
description of such a link contains the signature text as well as the
file title. The ~denote-link-with-signature~ is distinct from the
standard ~denote-link~, as it allows the user to express intent about
the inclusion of the signature.
In Org dynamic blocks for links/backlinks, we make this happen
automatically since there can be no manual intervention to express
intent on a link-by-link basis.
** Fontification in Dired can now extend to subdirectories
:PROPERTIES:
:CUSTOM_ID: h:46e08576-4c17-4b1e-a268-e0223250e7c1
:END:
The user option ~denote-dired-directories~ activates the
~denote-dired-mode~ in the specified list of directories when the user
sets this in their init file:
#+begin_src emacs-lisp
(add-hook 'dired-mode-hook #'denote-dired-mode-in-directories)
#+end_src
The new user option ~denote-dired-directories-include-subdirectories~
extends the reach of this feature to all subdirectories thereof.
Thanks to Henrik Hörmann for discussing this with me and contributing
a patch. This was originally done in pull request 191 on the GitHub
mirror: <https://github.com/protesilaos/denote/pull/191>. Subsequent
refinements by me.
** Signatures are sluggified as intended
:PROPERTIES:
:CUSTOM_ID: h:73e1efaa-2c22-48ee-be46-072b55177c99
:END:
The file name signature component is now sluggified properly. This
means that multiple words are separated by the equals sign, in
accordance with the Denote file-naming scheme where a word separator
is the same as the given field separator (this is the low-tech feature
that makes Denote files so easy to retrieve without fancy extras).
Vedang Manerikar fixed two relevant bugs in the "rename" commands,
while I rewrote internal functions and tests in the interest of consistency. Vedang's patches: <https://lists.sr.ht/~protesilaos/denote/patches/46790>.
[ The "signature" is a free form component of the file name. Users can
add anything they want there, such as to use it as a "category" that
is different from "tags/keywords", or to introduce sequences in
their notes, or to just have an extra marker for files they need to
spot quickly. ]
** For developers
:PROPERTIES:
:CUSTOM_ID: h:79f2fd7e-d5a7-4c78-bce7-f8d21e86e32c
:END:
There is a section in the manual titled "For developers or advanced
users". There we document functions or variables that are
public-facing, meaning that we test and document their behaviour and
encourage others to use them for code they write on top of Denote.
Refer to this section if you are looking to extend Denote. Though you
can also just check the source code, which is designed to be readable
and hackable.
- The ~denote-directory-files~ function gains new functionality that
subsumes that of the now-deprecated functions
~denote-directory-files-matching-regexp~, ~denote-all-files~,
~denote-directory-text-only-files~. Thanks to Jean-Philippe Gagné
Guay for the contribution, which was done in pull request 195 on the
GitHub mirror: <https://github.com/protesilaos/denote/pull/195>.
- The font-lock keywords we define are consolidated into a single
variable: ~denote-faces-file-name-keywords~ instead of being split
into two variables. This means that we cover all our fontification
needs in the backlinks buffer as well as the ~denote-dired-mode~
with this one point of entry. It also works for ~denote-sort-dired~,
which can include files with their subdirectory component in the
same flat listing.
- Use the function ~denote-retrieve-filename-keywords~ to extract
keywords from the file name alone, without going into the file
contents.
- The ~denote-retrieve-filename-title~ function now returns an empty
string if no title is present. Its behaviour is thus consistent with
~denote-retrieve-filename-keywords~ and ~denote-retrieve-filename-signature~.
- The ~denote-retrieve-filename-title~ will now use the
~file-name-base~ function as a fallback subject to a non-nil
optional argument. This case come into effect when the file does not
have a title component. The new optional argument allows the caller
to handle such cases as they see fit.
- The ~denote-signature-prompt~ and ~denote-title-prompt~ functions
accept an optional =DEFAULT-SIGNATURE= or =DEFAULT-TITLE= argument.
Internally, this is used as the =INITIAL-INPUT= of ~completing-read~
instead of the =DEF= argument. This matters because we want the
prompt to return an empty string if there is no input, whereas the
presence of =DEF= means that =DEF= is returned when the prompt is
empty.
- All our functions that interactively match file names with a regular
expression now use the ~denote-files-matching-regexp-prompt~
function. When called from Lisp, it takes a =REGEXP= argument as
well as an optional =PROMPT-TEXT=.
For the purposes of this release cycle, I am not documenting the
points of entry provided by =denote-sort.el=. It is a new feature that
I may eventually incorporate in =denote.el=. If you are interested in
the functionality (e.g. to have more elaborate sorting algorithms),
please take a look at the source code and then let us discuss the
implementation details.
** Miscellaneous
:PROPERTIES:
:CUSTOM_ID: h:ce5c7865-9ec1-49ba-9388-5a251ab56735
:END:
- Rewrote the manual on the topic of Org dynamic blocks. Same idea for
practically the entirety of =denote-org-dblock.el=.
- Marked the interactive specification of a few commands with the
major mode they belong to. This means that =M-X= (note the capital
X), which calls ~execute-extended-command-for-buffer~ by default,
will only show those commands in the relevant context.
- Made internal refinements and simplified the implementation of a few
functions. This is important work to keep the code base clean and
easy to read/maintain. Thanks to Jean-Philippe Gagné Guay for the
contribution. It was done in pull request 193 on the GitHub mirror:
<https://github.com/protesilaos/denote/pull/193>.
- Improved the doc string of the ~denote-format-file-name~ function.
Also introduced a unit test for it to be sure it does what we expect
(I eventually want to have tests for everything we do, but this is a
long-term project).
** Git commits
:PROPERTIES:
:CUSTOM_ID: h:6830d3f3-130c-4346-b3ca-a3d4b0e9f974
:END:
Just an overview of what we did. Thanks again to everyone involved.
#+begin_src sh
~/Git/Projects/denote $ git shortlog 2.1.0..2.2.0 --summary --numbered
125 Protesilaos Stavrou
17 Jean-Philippe Gagné Guay
2 Vedang Manerikar
1 Henrik Hörmann
#+end_src
** Policy for the next development cycle
:PROPERTIES:
:CUSTOM_ID: h:cb0cae4f-c9a1-40b3-98ae-781a57270d4e
:END:
I will give a ~1 week pause on Denote development before making any
feature changes. This is to ensure that we catch possible bugs and
push fixes right away. If there are other changes in place, it is not
possible to make point updates of this sort, as we must first wait for
the new features to be tested in real-world scenaria.
* Version 2.1.0 on 2023-11-12
:PROPERTIES:
:CUSTOM_ID: h:167beb8f-14be-40de-a1f2-d13910924c00

View file

@ -4,9 +4,9 @@
#+language: en
#+options: ':t toc:nil author:t email:t num:t
#+startup: content
#+macro: stable-version 2.1.0
#+macro: release-date 2023-11-12
#+macro: development-version 2.2.0-dev
#+macro: stable-version 2.2.0
#+macro: release-date 2023-12-10
#+macro: development-version 2.3.0-dev
#+export_file_name: denote.texi
#+texinfo_filename: denote.info
#+texinfo_dir_category: Emacs misc features
@ -1047,11 +1047,6 @@ line or switching between then with commands like ~switch-to-buffer~.
:CUSTOM_ID: h:7cc9e000-806a-48da-945c-711bbc7426b0
:END:
[ The ~denote-rename-file~ command is made more intuitive as part of
{{{development-version}}}. All its prompts now include a hint that
leaving them empty will ignore the given field if it does not exist
or remove it if it does exist. ]
#+findex: denote-rename-file
The ~denote-rename-file~ command renames a file and updates existing
front matter if appropriate. It is possible to do the same with
@ -1086,16 +1081,14 @@ Else, use the file name as a default value at the minibuffer prompt.
When called from Lisp, =TITLE= is a string.
If =TITLE= is nil or an empty string, do not add it to a newly renamed
file or remove it from an existing file. [ This feature is part of
{{{development-version}}}. ]
file or remove it from an existing file.
Add =SIGNATURE= to =FILE=. In interactive use, prompt for =SIGNATURE=,
using an existing one as the default value at the minibuffer prompt.
When called from Lisp, =SIGNATURE= is a string.
If =SIGNATURE= is nil or an empty string, do not add it to a newly
renamed file or remove it from an existing file. [ Made consistent as
part of {{{development-version}}}. ]
renamed file or remove it from an existing file.
Add =KEYWORDS= to =FILE=. In interactive use, prompt for =KEYWORDS=.
More than one keyword can be inserted when separated by the
@ -1103,8 +1096,7 @@ More than one keyword can be inserted when separated by the
a list of strings.
If =KEYWORDS= is nil or an empty string, do not add it to a newly
renamed file or remove it from an existing file. [ Part of
{{{development-version}}}. ]
renamed file or remove it from an existing file.
Read the file type extension (like =.txt=) from the underlying file
and preserve it through the renaming process. Files that have no
@ -1326,11 +1318,6 @@ difference between old and new file names.
:CUSTOM_ID: h:ab3f355a-f763-43ae-a4c9-179d2d9265a5
:END:
[ These faces are part of {{{development-version}}}. The styles they
use are the same they had before. The difference now is that themes
can style them as they see fit instead of having to deal with
hardcoded values. ]
These are the faces used by the various Denote rename commands to
style or highlight the old/new/current file shown in the relevant
minibuffer prompts:
@ -2262,8 +2249,7 @@ the function ~denote-dired-mode-in-directories~:
The user option ~denote-dired-directories-include-subdirectories~
specifies whether the ~denote-dired-directories~ also cover their
subdirectories. By default they do not. Set this option to ~t~ to
include subdirectories as well. [ This feature is part of
{{{development-version}}}. ]
include subdirectories as well.
The faces we define for this purpose are:
@ -2381,8 +2367,6 @@ own function and assigning it to the ~denote-rename-buffer-function~.
:CUSTOM_ID: h:8b542c50-dcc9-4bca-8037-a36599b22779
:END:
[ Revised as part of {{{development-version}}}. ]
Denote can optionally integrate with Org mode's "dynamic blocks"
facility. This means that it can use special blocks that are evaluated
with =C-c C-x C-u= (~org-dblock-update~) to generate their contents.
@ -2420,10 +2404,6 @@ Evaluate:
:CUSTOM_ID: h:50160fae-6515-4d7d-9737-995ad925e64b
:END:
[ Refactored as part of {{{development-version}}}. The =denote-links=
parameters =:reverse= and =:missing-only= are no longer supported.
The =denote-backlinks= also no longer accepts =:reverse=. ]
#+findex: denote-org-dblock-insert-links
The =denote-links= block can be inserted at point with the command
~denote-org-dblock-insert-links~ or by manually including the
@ -2456,13 +2436,12 @@ line to update the block.
unquoted symbol among =title=, =keywords=, =signature=, =identifier=.
When using the command ~denote-org-dblock-insert-files~, this
parameter is automatically inserted together with the (=:regexp=
parameter) and the user is prompted for a file name component. [ The
=:sort-by-component= parameter is part of {{{development-version}}}. ]
parameter) and the user is prompted for a file name component.
- The =:reverse-sort= parameter is optional. It reverses the order in
which files appear in. This is meaningful even without the presence
of the parameter =:sort-by-component=, though it also combines with
it. [ The =:reverse-sort= parameter is part of {{{development-version}}}. ]
it.
- The =:id-only= parameter is optional. It accepts a ~t~ value, in
which case links are inserted without a description text but only
@ -2484,9 +2463,6 @@ this in an Org file:
:
: #+END:
[ As with the =denote-links= block, the parameters =:sort-by-component=
and =:reverse-sort= are part of {{{development-version}}}. ]
Remember to type =C-c C-x C-u= (~org-dblock-update~) with point on the
=#+BEGIN= line to update the block.
@ -2495,10 +2471,6 @@ Remember to type =C-c C-x C-u= (~org-dblock-update~) with point on the
:CUSTOM_ID: h:f15fa143-5036-416f-9bff-1bcabbb03456
:END:
[ Part of {{{development-version}}}. As of 2023-11-30 06:54 +0200 and
as part of {{{development-version}}}, this dynamic block also provides
facilities for sorting, courtesy of the new =denote-sort.el= library. ]
Denote can optionally use Org's dynamic blocks facility to produce a
section that lists entire file contents ([[#h:8b542c50-dcc9-4bca-8037-a36599b22779][Use Org dynamic blocks]]).
This works by instructing Org to match a regular expression of Denote
@ -2586,8 +2558,6 @@ parameters, which are described further below:
:CUSTOM_ID: h:9fe01e63-f34f-4479-8713-f162a5ca865e
:END:
[ Part of {{{development-version}}}. ]
The =denote-sort.el= file is an optional extension to the core
functionality of Denote, which empowers users to sort files by the
given file name component ([[#h:4e9c7512-84dc-4dfb-9fa9-e15d51178e5d][The file-naming scheme]]).
@ -2972,11 +2942,6 @@ Restore the buffer with \\<dired-mode-map>`\\[revert-buffer]'."
:CUSTOM_ID: h:d35d8d41-f51b-4139-af8f-9c8cc508e35b
:END:
[ As part of {{{development-version}}}, we provide the
~denote-sort-dired~ command which should cover most of the uses of a
virtual Dired listing. The ~denote-sort-dired~ produces a fully
fledged Dired buffer ([[#h:9fe01e63-f34f-4479-8713-f162a5ca865e][Sort files by component]]). ]
Emacs' Dired is a powerful file manager that builds its functionality
on top of the Unix =ls= command. As noted elsewhere in this manual,
the user can update the =ls= flags that Dired uses to display its
@ -3859,10 +3824,7 @@ might change them without further notice.
regular expression. With optional =OMIT-CURRENT= as a non-nil value,
do not include the current Denote file in the returned list. With
optional =TEXT-ONLY= as a non-nil value, limit the results to text
files that satisfy ~denote-file-is-note-p~. [ As part of
{{{development-version}}}, the ~denote-directory-files~ subsumes the
now-deprecated ~denote-directory-files-matching-regexp~,
~denote-all-files~, ~denote-directory-text-only-files~. ]
files that satisfy ~denote-file-is-note-p~.
#+findex: denote-directory-subdirectories
+ Function ~denote-directory-subdirectories~ :: Return list of
@ -3946,9 +3908,7 @@ might change them without further notice.
=EXTENSION= is a string that contains a dot followed by the file
type extension. It can be an empty string or a nil value, in which
case it is not added to the base file name. [ The doc string and
error testing of ~denote-format-file-name~ are expanded as part of
{{{development-version}}}. ]
case it is not added to the base file name.
#+findex: denote-extract-keywords-from-path
+ Function ~denote-extract-keywords-from-path~ :: Extract keywords
@ -3972,14 +3932,12 @@ might change them without further notice.
optional =FILE-NAME-BASE-FALLBACK= return ~file-name-base~ if no
Denote title component exists. If the extraction is succcessful
(when no ~file-name-base~ is involved) run ~denote-desluggify~ on
the title. [ Revised as part of {{{development-version}}} to return
an empty string if no title is present and to make the use of
~file-name-base~ optional. ]
the title.
#+findex: denote-retrieve-filename-keywords
+ Function ~denote-retrieve-filename-keywords~ :: Extract keywords
from =FILE= name, if present, else return an empty string. Return
matched keywords as a single string. [ Part of {{{development-version}}} . ]
matched keywords as a single string.
#+findex: denote-retrieve-filename-signature
+ Function ~denote-retrieve-filename-signature~ :: Extract signature
@ -4035,12 +3993,7 @@ might change them without further notice.
text. With optional =PROMPT-TEXT= use it in the minibuffer instead
of the default prompt. Previous inputs at this prompt are available
for minibuffer completion. Consider ~savehist-mode~ to persist
minibuffer histories between sessions. [ Revised as part of
{{{development-version}}} to use initial text instead of a default
value. This way, the user can still input an empty string when they
want to. Whereas before the empty string was interpreted as the
default value (this is how Emacs does it but is not what we wanted
in this case). ]
minibuffer histories between sessions.
#+findex: denote-file-prompt
+ Function ~denote-file-prompt~ :: Prompt for file with identifier in
@ -4062,12 +4015,7 @@ might change them without further notice.
optional =PROMPT-TEXT= use it in the minibuffer instead of the
default prompt. Previous inputs at this prompt are available for
minibuffer completion. Consider ~savehist-mode~ to persist
minibuffer histories between sessions. [ Revised as part of
{{{development-version}}} to use initial text instead of a default
value. This way, the user can still input an empty string when they
want to. Whereas before the empty string was interpreted as the
default value (this is how Emacs does it but is not what we wanted
in this case). ]
minibuffer histories between sessions.
#+vindex: denote-title-prompt-current-default
+ Variable ~denote-title-prompt-current-default~ :: Currently bound
@ -4096,7 +4044,7 @@ might change them without further notice.
#+findex: denote-files-matching-regexp-prompt
+ Function ~denote-files-matching-regexp-prompt~ :: Prompt for
=REGEXP= to filter Denote files by. With optional =PROMPT-TEXT= use
it instead of a generic prompt. [ Part of {{{development-version}}}. ]
it instead of a generic prompt.
#+findex: denote-prompt-for-date-return-id
+ Function ~denote-prompt-for-date-return-id~ :: Use
@ -4831,8 +4779,7 @@ dired-sort-toggle-or-edit= (=C-u s= by default) and append
The user option ~dired-listing-switches~ sets your default preference.
For an on-demand sorted and filtered Dired listing of Denote files,
use the command ~denote-sort-dired~ ([[#h:9fe01e63-f34f-4479-8713-f162a5ca865e][Sort files by component]]). [ Part
of {{{development-version}}}. ]
use the command ~denote-sort-dired~ ([[#h:9fe01e63-f34f-4479-8713-f162a5ca865e][Sort files by component]]).
** How do you handle the last modified case?
:PROPERTIES:

View file

@ -6,7 +6,7 @@
;; Maintainer: Denote Development <~protesilaos/denote@lists.sr.ht>
;; URL: https://git.sr.ht/~protesilaos/denote
;; Mailing-List: https://lists.sr.ht/~protesilaos/denote
;; Version: 2.1.1
;; Version: 2.2.0
;; Package-Requires: ((emacs "28.1"))
;; This file is NOT part of GNU Emacs.