mirror of
https://github.com/protesilaos/denote.git
synced 2026-09-10 07:16:20 -04:00
Update to Denote version 2.2.0
This commit is contained in:
parent
5afc7de949
commit
dec04ce383
368
CHANGELOG.org
368
CHANGELOG.org
|
|
@ -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
|
||||
|
|
|
|||
87
README.org
87
README.org
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
Loading…
Reference in a new issue