mirror of
https://github.com/protesilaos/denote.git
synced 2026-09-10 07:16:20 -04:00
Update to Denote version 2.3.0
This commit is contained in:
parent
5f90cc9617
commit
93887bea48
733
CHANGELOG.org
733
CHANGELOG.org
|
|
@ -13,6 +13,739 @@ the manual: <https://protesilaos.com/emacs/denote>.
|
|||
|
||||
#+toc: headlines 1 insert TOC here, with one headline level
|
||||
|
||||
* Version 2.3.0 on 2024-03-24
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:e9d3ebdb-8a69-47a9-a5a2-619abc44b7d2
|
||||
:END:
|
||||
|
||||
This release brings a host of user-facing refinements to an already
|
||||
stable base, as well as some impressive new features. There is a lot
|
||||
to cover, so take your time reading these notes.
|
||||
|
||||
Special thanks to Jean-Philippe Gagné Guay for the numerous
|
||||
refinements to parts of the code base. Some of these are not directly
|
||||
visible to users, but are critical regardless. In the interest of
|
||||
brevity, I will not be covering the most technical parts here. I
|
||||
mention Jean-Philippe's contributions at the outset for this reason.
|
||||
Though the Git commit log is there for interested parties to study
|
||||
things further.
|
||||
|
||||
** Check out the ~denote-explore~ package by Peter Prevos
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:3e49dd9d-59db-40e5-9116-ce678231b08d
|
||||
:END:
|
||||
|
||||
This package provides several neat extensions that help you make
|
||||
better sense of your knowledge base, while keeping it in good order.
|
||||
The ~denote-explore~ package has commands to summarise the usage of
|
||||
keywords, visualise connections between notes, spot infrequently used
|
||||
keywords, and jump to previous historical entries.
|
||||
|
||||
- Git repository: <https://github.com/pprevos/denote-explore>.
|
||||
- Documentation: <https://lucidmanager.org/productivity/denote-explore>.
|
||||
|
||||
Now on to Denote version =2.3.0=!
|
||||
|
||||
** Link to a heading inside a Denote Org file
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:ca7baf4f-04af-4467-a1e6-20403357280f
|
||||
:END:
|
||||
|
||||
Denote creates links to files by using their unique identifier. As Org
|
||||
provides the =CUSTOM_ID= property for per-heading identifiers, we now
|
||||
leverage this infrastructure to compose links that point to a file and
|
||||
then to a heading therein. This only works for Org, as no other plain
|
||||
text major mode has a concept of heading identifiers (and it is not
|
||||
Denote's job to create such a feature).
|
||||
|
||||
I demonstrated the functionality in a video:
|
||||
<https://protesilaos.com/codelog/2024-01-20-emacs-denote-link-org-headings/>
|
||||
|
||||
Technically, the =denote:= link type has the same implementation
|
||||
details as Org's standard =file:= and has always had this potential to
|
||||
jump to a section inside the given file.
|
||||
|
||||
*** The ~denote-org-store-link-to-heading~ user option
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:a7864660-5b4c-4467-a252-9140baedeb1a
|
||||
:END:
|
||||
|
||||
The user option ~denote-org-store-link-to-heading~ determines whether
|
||||
~org-store-link~ links to the current Org heading (such links are
|
||||
merely "stored" and need to be inserted afterwards with the command
|
||||
~org-insert-link~). Note that the ~org-capture~ command uses the
|
||||
~org-link~ internally if it has to store a link.
|
||||
|
||||
When its value is non-nil, ~org-store-link~ stores a link to the
|
||||
current Org heading inside the Denote Org file. If the heading does
|
||||
not have a =CUSTOM_ID=, it creates it and includes it in the heading's
|
||||
=PROPERTIES= drawer. If a =CUSTOM_ID= exists, ~org-store-link~ use it
|
||||
as-is.
|
||||
|
||||
This makes the resulting link a combination of the =denote:= link type,
|
||||
pointing to the identifier of the current file, plus the value of the
|
||||
heading's =CUSTOM_ID=, such as:
|
||||
|
||||
- =[[denote:20240118T060608][Some test]]=
|
||||
- =[[denote:20240118T060608::#h:eed0fb8e-4cc7-478f-acb6-f0aa1a8bffcd][Some test::Heading text]]=
|
||||
|
||||
Both lead to the same Denote file, but the latter jumps to the heading
|
||||
with the given =CUSTOM_ID=. Notice that the link to the heading also
|
||||
has a different description, which includes the heading text.
|
||||
|
||||
The value of the =CUSTOM_ID= is determined by the Org user option
|
||||
~org-id-method~. The sample shown above uses the default UUID
|
||||
infrastructure.
|
||||
|
||||
If ~denote-org-store-link-to-heading~ is set to a nil value, the
|
||||
command ~org-store-link~ only stores links to the Denote file (using
|
||||
its identifier), but not to the given heading. This is what Denote was
|
||||
doing in all versions prior to =2.3.0=.
|
||||
|
||||
Thanks to Kristoffer Balintona for discussing with me how
|
||||
~org-capture~ interfaces with ~org-store-link~. I updated the
|
||||
documentation accordingly. This was done in issue 267:
|
||||
<https://github.com/protesilaos/denote/issues/267>.
|
||||
|
||||
*** Insert link to an Org file with a further pointer to a heading
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:dd054536-8d20-4251-b23d-77fec7d7d036
|
||||
:END:
|
||||
|
||||
As part of the optional =denote-org-extras.el= extension that comes
|
||||
with the ~denote~ package, the command ~denote-org-extras-link-to-heading~
|
||||
prompts for a link to an Org file and then asks for a heading therein,
|
||||
using minibuffer completion. Once the user provides input at the two
|
||||
prompts, the command inserts a link at point which has the following
|
||||
pattern: =[[denote:IDENTIFIER::#ORG-HEADING-CUSTOM-ID]][Description::Heading text]]=.
|
||||
|
||||
Because only Org files can have links to individual headings, the
|
||||
command ~denote-org-extras-link-to-heading~ prompts only for Org files
|
||||
(i.e. files which include the =.org= extension). Remember that Denote
|
||||
works with many file types.
|
||||
|
||||
This feature is similar to the concept of the aforementioned user
|
||||
option ~denote-org-store-link-to-heading~. It is, however, interactive
|
||||
and differs in the directionality of the action. With that user
|
||||
option, the command ~org-store-link~ will generate a =CUSTOM_ID= for
|
||||
the current heading (or capture the value of one as-is), giving the
|
||||
user the option to then call ~org-insert-link~ wherever they see fit.
|
||||
By contrast, the command ~denote-org-extras-link-to-heading~ prompts
|
||||
for a file, then a heading, and inserts the link at point.
|
||||
|
||||
** Refinements galore to minibuffer prompts
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:e509402b-a58f-4a10-b364-b158b31d1ee5
|
||||
:END:
|
||||
|
||||
*** All commands that affect file names conform with ~denote-prompts~
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:11f0fc1e-552b-4a02-bf01-9d8508ce68c8
|
||||
:END:
|
||||
|
||||
The scope of the ~denote-prompts~ user option is broadened to make it
|
||||
more useful. In the past, this variable would only affect the
|
||||
behaviour of the ~denote~ command. For example, the user would make
|
||||
the command prompt for a subdirectory, then keywords, then a title.
|
||||
But all other commands were not following this setting, as they were
|
||||
hardcoding the prompts for title and keywords.
|
||||
|
||||
Take the ~denote-subdirectory~ command as an example. It would first
|
||||
prompt for a subdirectory to place the new note in, then for a title,
|
||||
and then for keywords. Whereas now, it prepends the =subdirectory=
|
||||
prompt to the list of ~denote-prompts~. So if the user has configured
|
||||
their ~denote-prompts~ to, for example, ask for a signature and a file
|
||||
type, the ~denote-subdirectory~ will do just that with the addition of
|
||||
the =subdirectory= prompt.
|
||||
|
||||
Same idea for all commands that either create or modify file names,
|
||||
wherever conformity with ~denote-prompts~ makes sense. For example,
|
||||
the ~denote-rename-file~ will never ask for a =subdirectory= because
|
||||
our renaming policy is to always rename in place (to avoid
|
||||
mistakes---you can always move the file afterwards).
|
||||
|
||||
This also means that the ~denote-rename-file~ and its multi-file
|
||||
counterpart, ~denote-dired-rename-files~, will only prompt for a
|
||||
signature if it is part of the ~denote-prompts~. Whereas in the
|
||||
previous version this was unconditional, thus burdening users who do
|
||||
not need the =SIGNATURE= file name component (more about renaming
|
||||
further into the release notes).
|
||||
|
||||
Lots of Git commits went into this redesign, per my initiave in issue
|
||||
247: <https://github.com/protesilaos/denote/issues/247>. Thanks to
|
||||
Vedang Manerikar for the changes to the convenience wrappers of the
|
||||
~denote~ command (like ~denote-subdirectory~), which were done in pull
|
||||
request 248: <https://github.com/protesilaos/denote/pull/248>.
|
||||
|
||||
Vedang has assigned copyright to the Free Software Foundation.
|
||||
|
||||
Also thanks to Max Brieiev for joining the technical discussion
|
||||
therein.
|
||||
|
||||
The renaming commands are more intuitive now, which addresses a
|
||||
discussion point raised by user babusri in issue 204:
|
||||
<https://github.com/protesilaos/denote/issues/204>.
|
||||
|
||||
*** A simple tweak for more informative minibuffer prompts
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:a502217d-8eff-4a6f-b66a-33e5e7ecda9d
|
||||
:END:
|
||||
|
||||
The text of each prompt now has all capital letters for the word
|
||||
referencing its scope of its application, like =TITLE=, =KEYWORDS=,
|
||||
=SIGNATURE=. The idea is to make it easier to quickly scan the text,
|
||||
especially while working through multiple prompts. For example, the
|
||||
prompt for a title now reads:
|
||||
|
||||
: New file TITLE:
|
||||
|
||||
This paradigm is followed by all prompts. It is a small yet effective
|
||||
tweak to get a better sense of context.
|
||||
|
||||
*** The file prompt uses relative names once again
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:8f182ad3-c97f-45dc-a451-c552f2a7957c
|
||||
:END:
|
||||
|
||||
In previous versions of Denote, the minibuffer prompt to pick a file
|
||||
(such as a file to link to) would show relative file names: the name
|
||||
without the full file system path. The functionality depended on the
|
||||
built-in =project.el= library, which did not allow us to do everything
|
||||
we wanted with our prompts, such as to have a dedicated minibuffer
|
||||
history or to easily enable the workflow of commands like
|
||||
~denote-open-or-create~.
|
||||
|
||||
In the previous version, I made the decision to remove the
|
||||
=project.el= dependency and the concomitant presentation of relative
|
||||
names in order to add the functionality we want. I did it with the
|
||||
intention to find a better solution down the line. Et voilá! Relative
|
||||
file names are back. We now have all the functionality we need. Sorry
|
||||
if in the meantime you had to deal with those longer names! It was a
|
||||
necessary intermediate arrangement for the greater good.
|
||||
|
||||
For the technicalities, refer to the source code of the function
|
||||
~denote-title-prompt~.
|
||||
|
||||
*** Completion using previous inputs is now optional
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:bcf382e4-bd00-49f3-859a-3f86e9770b77
|
||||
:END:
|
||||
|
||||
All our minibuffer prompts have their dedicated history (you can
|
||||
persist histories with the built-in ~savehist-mode~). They store
|
||||
previous values, giving the user easy access to their past input
|
||||
values. Some of our commands not only record a history, but also
|
||||
leverage it to provide completion. These commands are named in the
|
||||
variable ~denote-prompts-with-history-as-completion~. As of this
|
||||
writing, they are:
|
||||
|
||||
- ~denote-title-prompt~
|
||||
- ~denote-signature-prompt~
|
||||
- ~denote-files-matching-regexp-prompt~
|
||||
|
||||
Users who do not want to use completion for those can set the new user
|
||||
option ~denote-history-completion-in-prompts~ to a nil value.
|
||||
|
||||
** Renaming files got better all-round
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:747e126a-b966-4ac8-a8ec-cf900012e37e
|
||||
:END:
|
||||
|
||||
One of the pillars of the ~denote~ package is its ability to rename
|
||||
any file to use the efficient Denote file-naming scheme (makes file
|
||||
names predictable and easy to retrieve even with rudimentary tools).
|
||||
To this end, we provide several commands that affect file names,
|
||||
beside the commands that create new files.
|
||||
|
||||
As noted above, the commands which rename files to follow the Denote
|
||||
file-naming scheme now conform with the user option ~denote-prompts~,
|
||||
but there is more!
|
||||
|
||||
*** A broadened scope for the ~denote-rename-no-confirm~ option
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:f93b8075-de2d-416e-9275-7225d03678ad
|
||||
:END:
|
||||
|
||||
The implementation of this user option is redone (i) to save the
|
||||
underlying buffer outright if the user does not want to provide their
|
||||
confirmation for a rename each time and (ii) to cover all relevant
|
||||
commands that perform a rename operation. The assumption is that the
|
||||
user who opts in to this feature is familiar with the Denote renaming
|
||||
modalities and knows they are reliable.
|
||||
|
||||
The default is still the same: Denote always asks for confirmation
|
||||
before renaming a file, showing the difference between the old and new
|
||||
names, as well as any changes to the file's contents. In this light,
|
||||
buffers are not saved to give the user the chance to further inspect
|
||||
the changes (such as by running ~diff-buffer-with-file~).
|
||||
|
||||
Commands that will now skip all confirmation prompts to rename the file
|
||||
and, where relevant, save the corresponding buffer outright:
|
||||
|
||||
- ~denote-rename-file~
|
||||
- ~denote-dired-rename-files~
|
||||
- ~denote-dired-rename-marked-files-with-keywords~
|
||||
- ~denote-rename-file-using-front-matter~
|
||||
- ~denote-rename-add-keywords~
|
||||
- ~denote-rename-remove-keywords~
|
||||
- ~denote-rename-add-signature~ (new, more below)
|
||||
- ~denote-rename-remove-signature~ (new, more below)
|
||||
|
||||
*** Rename a file by adding or removing a =SIGNATURE= component
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:01ab0277-b4d4-433e-bd25-b9a0357412f6
|
||||
:END:
|
||||
|
||||
The =SIGNATURE= is an optional free-form field that is part of a
|
||||
Denote file name. A common use-case is to write sequence notes with
|
||||
it, though Denote does not enforce any particular convention (you may
|
||||
prefer to have it as a special kind of keyword for certain files that
|
||||
simply stands out more due to its placement).
|
||||
|
||||
[ Besides, the ~denote-sort-dired~ command lets you filter and sort
|
||||
files while putting them in a fully fledged Dired buffer, so
|
||||
manually sequencing notes via their signature may not be needed. ]
|
||||
|
||||
We now provide two commands to add or remove a signature from file
|
||||
names:
|
||||
|
||||
- The ~denote-rename-add-signature~ prompts for a file and a
|
||||
signature. The default value for the file prompt is the file of the
|
||||
currently open buffer or the file-at-point in a Dired buffer. The
|
||||
signature is an ordinary string, defaulting to the selected file's
|
||||
signature, if any.
|
||||
|
||||
- The ~denote-rename-remove-signature~ uses the same file prompt as
|
||||
above. It performs its action only if the selected file has a
|
||||
signature. Otherwise, it does nothing.
|
||||
|
||||
Files that do not have a Denote file name are renamed accordingly.
|
||||
Though for such cases it is better to use ~denote-rename-file~ or
|
||||
~denote-dired-rename-files~ as they are more general.
|
||||
|
||||
*** Use the ~denote-after-rename-file-hook~ for optional post-rename operations
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:57f4f60c-7873-4542-a7a5-5c997cdbd137
|
||||
:END:
|
||||
|
||||
All renaming commands run the ~denote-after-rename-file-hook~ after a
|
||||
successful operation. This is meant for users who want to do something
|
||||
specific after the renaming is done.
|
||||
|
||||
** More optional features of the =denote-org-extras.el=
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:a0a2753e-5be9-4776-9f3f-e3b7556c13c1
|
||||
:END:
|
||||
|
||||
I already covered the ~denote-org-extras-link-to-heading~, though the
|
||||
file =denote-org-extras.el= has some more optional goodies for those
|
||||
who work with Org files.
|
||||
|
||||
*** Create a note from the current Org subtree
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:fbf1e574-e9aa-4c67-8034-27341d7a5536
|
||||
:END:
|
||||
|
||||
In Org parlance, an entry with all its subheadings and other contents
|
||||
is a "subtree". Denote can operate on the subtree to extract it from
|
||||
the current file and create a new file out of it. One such workflow is
|
||||
to collect thoughts in a single document and produce longer standalone
|
||||
notes out of them upon review.
|
||||
|
||||
The command ~denote-org-extras-extract-org-subtree~ (part of the
|
||||
optional =denote-org-extras.el= extension) is used for this purpose.
|
||||
It creates a new Denote note using the current Org subtree. In doing
|
||||
so, it removes the subtree from its current file and moves its
|
||||
contents into a new file.
|
||||
|
||||
The text of the subtree's heading becomes the =#+title= of the new
|
||||
note. Everything else is inserted as-is.
|
||||
|
||||
Read the documentation string of ~denote-org-extras-extract-org-subtree~
|
||||
or consult the manual for further details.
|
||||
|
||||
*** Convert =denote:= links to =file:= links
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:042e26e8-e3e0-4c57-9855-6b363671ae9a
|
||||
:END:
|
||||
|
||||
Sometimes the user needs to translate all =denote:= link types to
|
||||
their =file:= equivalent. This may be because some other tool does not
|
||||
recognise =denote:= links (or other custom links types---which are a
|
||||
standard feature of Org, by the way). The user thus needs to (i)
|
||||
either make a copy of their Denote note or edit the existing one, and
|
||||
(ii) convert all links to the generic =file:= link type that
|
||||
external/other programs understand.
|
||||
|
||||
The optional extension =denote-org-extras.el= contains two commands
|
||||
that are relevant for this use-case:
|
||||
|
||||
+ Convert =denote:= links to =file:= links :: The command
|
||||
~denote-org-extras-convert-links-to-file-type~ goes through the
|
||||
buffer to find all =denote:= links. It gets the identifier of the
|
||||
link and resolves it to the actual file system path. It then
|
||||
replaces the match so that the link is written with the =file:= type
|
||||
and then the file system path. The optional search terms and/or link
|
||||
description are preserved.
|
||||
|
||||
+ Convert =file:= links to =denote:= links :: The command
|
||||
~denote-org-extras-convert-links-to-denote-type~ behaves like the
|
||||
one above. The difference is that it finds the file system path and
|
||||
converts it into its identifier.
|
||||
|
||||
*** The Denote Org dynamic blocks are now in =denote-org-extras.el=
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:51d72c47-d434-4954-98d6-2db7a7ea6812
|
||||
:END:
|
||||
|
||||
As part of this version, all our dynamic blocks are defined in the
|
||||
file =denote-org-extras.el=. The file which once contained these block
|
||||
definitions, =denote-org-dblock.el=, now only has aliases for the new
|
||||
function names and dipslays a warning about its deprecation.
|
||||
|
||||
There is no need to ~require~ the ~denote-org-extras~ feature because
|
||||
all of Denote's Org dynamic blocks are autoloaded (meaning that they
|
||||
work as soon as they are used). For backward compatibility, all
|
||||
dynamic blocks retain their original names as an alias for the newer
|
||||
one.
|
||||
|
||||
We will not remove =denote-org-dblock.el= anytime soon to avoid any
|
||||
potential breakage with people's existing notes. Though if you are new
|
||||
to this functionality, you better avoid the deprecated symbols.
|
||||
|
||||
*** Org dynamic block to only insert missing links
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:45176e63-c609-40f6-a11d-1cc0c28460dd
|
||||
:END:
|
||||
|
||||
The =denote-missing-links= block is available with the command
|
||||
~denote-org-extras-dblock-insert-missing-links~. It is like the
|
||||
=denote-links= block (documented at length in the manual), except it
|
||||
only lists links to files that are not present in the current buffer.
|
||||
The parameters are otherwise the same:
|
||||
|
||||
: #+BEGIN: denote-missing-links :regexp "YOUR REGEXP HERE" :sort-by-component nil :reverse-sort nil :id-only nil
|
||||
:
|
||||
: #+END:
|
||||
|
||||
Remember to type =C-c C-x C-u= (~org-dblock-update~) with point on the
|
||||
=#+BEGIN= line to update the block.
|
||||
|
||||
This brings back a feature that was deprecated in version 2.2.0, but
|
||||
makes changes to it so that (i) it is more limited in scope and (ii)
|
||||
available as a standalone Org dynamic block.
|
||||
|
||||
Thanks to Stephen R. Kifer, Peter Prevos, and Elias Storms for the
|
||||
discussion which made it clear to me that users do have a need for
|
||||
such functionality. This was done in the now-defunct mailing list:
|
||||
<https://lists.sr.ht/~protesilaos/denote/%3C1db2104e-70bd-47f9-a7ed-b8d4bb370a7f%40app.fastmail.com%3E>.
|
||||
|
||||
Also thanks to Vedang Manerikar for fixing an edge case bug. This was
|
||||
done in pull request 260: <https://github.com/protesilaos/denote/pull/260>.
|
||||
|
||||
Org dynamic blocks are a powerful feature which also showcases how far
|
||||
we can go with Denote's efficient file-naming scheme.
|
||||
|
||||
** Quality-of-life improvements
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:08f27f36-0ed2-4a5e-b02b-f0075c6e904f
|
||||
:END:
|
||||
|
||||
Here I include other changes we made to existing functionality.
|
||||
|
||||
*** BREAKING User-defined sluggification of file name components
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:240b80e7-242c-46fb-83d2-1ba36bdcaf66
|
||||
:END:
|
||||
|
||||
In the previous version, we introduced the user option
|
||||
~denote-file-name-letter-casing~. This was used to control the letter
|
||||
casing of file name components, but was ultimately not flexible enough
|
||||
for our purposes. We are thus retiring it and replacing it with the
|
||||
more powerful, but also more advanced, user option
|
||||
~denote-file-name-slug-functions~.
|
||||
|
||||
For existing users of the deprecated functionality, you can still
|
||||
preserve the input of a prompt verbatim with something like this:
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(setq denote-file-name-slug-functions
|
||||
'((title . denote-sluggify-title)
|
||||
(keyword . identity)
|
||||
(signature . denote-sluggify-signature)))
|
||||
#+end_src
|
||||
|
||||
The manual explains the details and shows ready-to-use code samples.
|
||||
|
||||
Remember that deviating from the default file-naming scheme of Denote
|
||||
will make things harder to use in the future, as files will have
|
||||
permutations that create uncertainty. The sluggification scheme and
|
||||
concomitant restrictions we impose by default are there for a very
|
||||
good reason: they are the distillation of years of experience. Here we
|
||||
give you what you wish, but bear in mind it may not be what you need.
|
||||
You have been warned.
|
||||
|
||||
Thanks to Jean-Philippe Gagné Guay for introducing this variable,
|
||||
among other tweaks, in pull request 217: <https://github.com/protesilaos/denote/pull/217>.
|
||||
Jean-Philippe has assigned copyright to the Free Software Foundation.
|
||||
|
||||
*** Option to automatically save the buffer of a new note
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:3e1249f1-ac26-4187-9ddd-7391b4e5131f
|
||||
:END:
|
||||
|
||||
The user option ~denote-save-buffer-after-creation~ controls whether
|
||||
commands that create new notes save their buffer right away.
|
||||
|
||||
The default behaviour of commands such as ~denote~ (or related) is to
|
||||
not save the buffer they create. This gives the user the chance to
|
||||
review the text before writing it to a file. The user may choose to
|
||||
delete the unsaved buffer, thus not creating a new file on disk.
|
||||
|
||||
If ~denote-save-buffer-after-creation~ is set to a non-nil value, such
|
||||
buffers are saved automatically and so the file is written to disk.
|
||||
|
||||
*** The ~denote-menu-bar-mode~ and the placement of the Denote submenu
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:c8336927-cf6b-4770-b041-123bf9186e57
|
||||
:END:
|
||||
|
||||
The command ~denote-menu-bar-mode~ toggles the inclusion of the
|
||||
submenu with the Denote entries in the Emacs menu bar (which is on
|
||||
display when ~menu-bar-mode~ is enabled).
|
||||
|
||||
This submenu is now shown after the =Tools= entry.
|
||||
|
||||
Thanks to Joseph Turner for sending me the relevant patches. Joseph
|
||||
has assigned copyright to the Free Software Foundation.
|
||||
|
||||
*** The =C-c C-o= works in ~markdown-mode~ for Denote links
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:1c884b19-7ab7-4eb5-a332-815d25f7373c
|
||||
:END:
|
||||
|
||||
In files whose major mode is ~markdown-mode~, the default key binding
|
||||
=C-c C-o= (which calls the command ~markdown-follow-thing-at-point~)
|
||||
correctly resolves =denote:= links. This method works in addition to
|
||||
the =RET= key, which is made available by the buttonization that we
|
||||
also provide. Interested users can refer to the function
|
||||
~denote-link-markdown-follow~ for the implementation details.
|
||||
|
||||
Thanks to user pmenair for noting a case where this was breaking
|
||||
general Markdown linking functionality. This was done in issue 290:
|
||||
<https://github.com/protesilaos/denote/issues/290>.
|
||||
|
||||
*** More fine-grained control of Denote faces for dates/identifiers
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:c6f739ef-ea26-41b8-84e6-c87c4622cdba
|
||||
:END:
|
||||
|
||||
We now define more faces for fine-grained control of the identifier in
|
||||
Dired. Thanks to mentalisttraceur for suggesting the idea in issue
|
||||
276: <https://github.com/protesilaos/denote/issues/276>.
|
||||
|
||||
Before you ask, no, none of my themes will cover those faces because
|
||||
extra colouration is something only the user can decide if they want
|
||||
or not. In the above link I provide a sample with a screenshot (apart
|
||||
from the ~modus-themes~, my ~ef-themes~ and ~standard-themes~ have
|
||||
similar functionality):
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(defun my-modus-themes-denote-faces (&rest _)
|
||||
(modus-themes-with-colors
|
||||
(custom-set-faces
|
||||
`(denote-faces-year ((,c :foreground ,cyan)))
|
||||
`(denote-faces-month ((,c :foreground ,magenta-warmer)))
|
||||
`(denote-faces-day ((,c :foreground ,cyan)))
|
||||
`(denote-faces-time-delimiter ((,c :foreground ,fg-main)))
|
||||
`(denote-faces-hour ((,c :foreground ,magenta-warmer)))
|
||||
`(denote-faces-minute ((,c :foreground ,cyan)))
|
||||
`(denote-faces-second ((,c :foreground ,magenta-warmer))))))
|
||||
|
||||
(add-hook 'modus-themes-post-load-hook #'my-modus-themes-denote-faces)
|
||||
#+end_src
|
||||
|
||||
*** New convenience command for users of the optional =denote-journal-extras.el=
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:9e7bff88-a6ad-45e7-b802-0493153e0e20
|
||||
:END:
|
||||
|
||||
The command ~denote-journal-extras-link-or-create-entry~ links to the
|
||||
journal entry for today or creates it in the background, if missing,
|
||||
and then links to it from the current file. If there are multiple
|
||||
journal entries for the same day, it prompts to select one among them
|
||||
and then links to it. When called with an optional prefix argument
|
||||
(such as =C-u= with default key bindings), the command prompts for a
|
||||
date and then performs the aforementioned. With a double prefix
|
||||
argument (=C-u C-u=), it also produces a link whose description
|
||||
includes just the file's identifier.
|
||||
|
||||
Thanks to Alan Schmitt for contributing this command, based on
|
||||
previous discussions. It was done in pull request 243:
|
||||
<https://github.com/protesilaos/denote/pull/243>.
|
||||
|
||||
** For developers or advanced users
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:03778c8c-60aa-449c-96df-7e41916668a6
|
||||
:END:
|
||||
|
||||
These has new parameters or are new symbols altogether. Please read
|
||||
their respective doc string for the details.
|
||||
|
||||
+ Function ~denote-convert-file-name-keywords-to-crm~.
|
||||
+ Function ~denote-valid-date-p~.
|
||||
+ Function ~denote-parse-date~.
|
||||
+ Function ~denote-retrieve-title-or-filename~.
|
||||
+ Function ~denote-get-identifier~.
|
||||
+ Function ~denote-signature-prompt~.
|
||||
+ Function ~denote-file-prompt~.
|
||||
+ Function ~denote-keywords-prompt~.
|
||||
+ Function ~denote-title-prompt~.
|
||||
+ Function ~denote-rewrite-front-matter~.
|
||||
+ Function ~denote-rewrite-keywords~.
|
||||
+ Function ~denote-update-dired-buffers~.
|
||||
+ Function ~denote-format-string-for-org-front-matter~.
|
||||
+ Function ~denote-format-string-for-md-front-matter~.
|
||||
+ Variable ~denote-link-signature-format~.
|
||||
+ Function ~denote-link-description-with-signature-and-title~.
|
||||
+ Variable ~denote-link-description-function~.
|
||||
|
||||
** Miscellaneous
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:040f2678-674d-4e99-b428-659cd3a3b7c3
|
||||
:END:
|
||||
|
||||
- The ~denote-sort-dired~ function no longer errors out when there is
|
||||
no match for the given search terms. Thanks to Vedang Manerikar for
|
||||
the initial patch! This was done in the now-defunct mailing list:
|
||||
<https://lists.sr.ht/~protesilaos/denote/patches/47625>. Further
|
||||
changes by me.
|
||||
|
||||
- The ~denote-keywords-sort~ function no longer tries to sort keywords
|
||||
that are not a list. Thanks to Ashton Wiersdorf for the patch. The
|
||||
change is small. As such, Ashton does not need to assign copyright
|
||||
to the Free Software Foundation.
|
||||
|
||||
- Documented in the manual that custom convenience commands can be
|
||||
accessed by the ~denote-command-prompt~. Thanks to Glenna D. for
|
||||
clarifying the language.
|
||||
|
||||
- The ~denote-user-enforced-denote-directory~ is obsolete. Those who
|
||||
used it in their custom code can simply ~let~ bind the value of the
|
||||
variable ~denote-directory~. Thanks to Jean-Philippe Gagné Guay for
|
||||
making the relevant changes (the Git history is not direct here and
|
||||
I cannot quickly find the pull request---the commit is =a48a1da=).
|
||||
|
||||
- The ~denote-link-return-links~ no longer keeps buffers around.
|
||||
Thanks to Matteo Cavada for the patch. This was done in pull request
|
||||
252: <https://github.com/protesilaos/denote/pull/252>. The change is
|
||||
small and so Matteo does not need to assign copyright to the Free
|
||||
Software Foundation.
|
||||
|
||||
- Thanks to user jarofromel (recorded in Git as "random" author) for
|
||||
fixing a mismatched parenthesis in ~denote-parse-date~. This was
|
||||
done in pull request 258: <https://github.com/protesilaos/denote/pull/258>.
|
||||
|
||||
- The ~denote-rename-buffer-mode~ now works as expected with
|
||||
non-editable files, like PDFs. Thanks to Alan Schmitt for bringing
|
||||
this matter to my attention and then refining the implementation
|
||||
details in pull request 268: <https://github.com/protesilaos/denote/pull/268>.
|
||||
|
||||
- All the Denote linking functions can be used from any file outside
|
||||
the ~denote-directory~ (links are still resolved to files inside the
|
||||
~denote-directory~). Thanks to Jean-Philippe Gagné Guay for the
|
||||
contribution in pull request 236: <https://github.com/protesilaos/denote/pull/236>.
|
||||
|
||||
- We removed all glue code that integrated Denote with the built-in
|
||||
~ffap~, ~xref~, and ~project~ libraries. We may reconsider how best
|
||||
to organise such features in the future. Thanks to Noboru Ota
|
||||
(nobiot), who originally contributed those extensions, for
|
||||
suggesting their removal from our code base. We did this by
|
||||
evaluating all use-cases. The discussion with Noboru happened in
|
||||
issue 264: <https://github.com/protesilaos/denote/issues/264>. Also
|
||||
thanks to Jean-Philippe Gagné Guay and Alan Schnmitt for checking
|
||||
the impact of this on how we generate backlinks. The latest
|
||||
iteration of this was done in pull request 294, by Jean-Philippe:
|
||||
<https://github.com/protesilaos/denote/pull/294>.
|
||||
|
||||
- While renaming files, signatures no longer lose consecutive spaces.
|
||||
Thanks to Wesley Harvey for the contribution in pull request 207:
|
||||
<https://github.com/protesilaos/denote/pull/207>. The change is
|
||||
within the ~15 line limit and so Wesley does not need to assign
|
||||
copyright to the Free Software Foundation.
|
||||
|
||||
- All of the above and lots more are documented at length in the
|
||||
manual. This is a big task in its own right (as are release notes,
|
||||
by the way), though it ensures we keep a high standard for the
|
||||
entire package and can communicate all our knowledge to the user.
|
||||
|
||||
** No more SourceHut
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:9a0d6afc-95e0-490e-a573-5a50fe7bdf28
|
||||
:END:
|
||||
|
||||
Development continues on GitHub with GitLab as a mirror. I explained
|
||||
my reasons here: <https://protesilaos.com/codelog/2024-01-27-sourcehut-no-more/>.
|
||||
|
||||
This is a change that affects all my Emacs packages.
|
||||
|
||||
** Forward guidance for Denote version 3.0.0
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:61fb340e-5c7c-4a4b-927c-63faf4759a09
|
||||
:END:
|
||||
|
||||
We will not any new features until mid-April or a bit later if
|
||||
necessary. This gives users enough time to report any potential issues
|
||||
with version =2.3.0=. If there are any bugs, they will be fixed right
|
||||
away and new minor releases will be introduced (though without release
|
||||
notes).
|
||||
|
||||
Once we are done with this release cycle, we want to prepare for the
|
||||
next major version of Denote. The plan is to make the placement of
|
||||
file name components entirely customisable, among many other power
|
||||
user features. Though the defaults will remain intact.
|
||||
|
||||
For the immediate future, please prioritise bug reports/fixes. Then
|
||||
see you around for another round of hacking. The Denote code base is a
|
||||
pleasure to work with due to how composable everything is. I happy to
|
||||
make it even better for developers and users alike.
|
||||
|
||||
** Git commits
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:a6fd8e16-ded9-49cf-afbb-6e1373c3c43d
|
||||
:END:
|
||||
|
||||
Just an overview of what we did. Thanks again to everyone involved.
|
||||
|
||||
#+begin_src sh
|
||||
~/Git/Projects/denote $ git shortlog 2.2.0..2.3.0 --summary --numbered
|
||||
246 Protesilaos Stavrou
|
||||
46 Jean-Philippe Gagné Guay
|
||||
6 Vedang Manerikar
|
||||
3 Joseph Turner
|
||||
2 Alan Schmitt
|
||||
2 Max
|
||||
2 Peter Prevos
|
||||
1 Ashton Wiersdorf
|
||||
1 Glenna D.
|
||||
1 Matteo Cavada
|
||||
1 mattyonweb
|
||||
1 random
|
||||
1 wlharvey4
|
||||
#+end_src
|
||||
|
||||
** All contributions are valuable
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:967372fa-933b-40d2-b1a8-546d1a50d35d
|
||||
:END:
|
||||
|
||||
I encourage you to provide feedback on any of the functionality of the
|
||||
Denote package. You do not need to be a developer or indeed an expert
|
||||
in Emacs. When you have an idea in mind on how you use Denote, or you
|
||||
think something could be done differently, please speak your mind. I
|
||||
do listen to feedback and am interested in further improving this
|
||||
package. Everybody is welcome!
|
||||
|
||||
* Version 2.2.0 on 2023-12-10
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:8efed390-cfa0-420d-b300-0cb76bf2c9f9
|
||||
|
|
|
|||
177
README.org
177
README.org
|
|
@ -4,9 +4,9 @@
|
|||
#+language: en
|
||||
#+options: ':t toc:nil author:t email:t num:t
|
||||
#+startup: content
|
||||
#+macro: stable-version 2.2.0
|
||||
#+macro: release-date 2023-12-10
|
||||
#+macro: development-version 2.3.0-dev
|
||||
#+macro: stable-version 2.3.0
|
||||
#+macro: release-date 2024-03-24
|
||||
#+macro: development-version 3.0.0-dev
|
||||
#+export_file_name: denote.texi
|
||||
#+texinfo_filename: denote.info
|
||||
#+texinfo_dir_category: Emacs misc features
|
||||
|
|
@ -51,7 +51,7 @@ the GNU ELPA machinery automatically generates an Info manual out of it.
|
|||
:CUSTOM_ID: h:40b18bb2-4dc1-4202-bd0b-6fab535b2a0f
|
||||
:END:
|
||||
|
||||
Copyright (C) 2022-2023 Free Software Foundation, Inc.
|
||||
Copyright (C) 2022-2024 Free Software Foundation, Inc.
|
||||
|
||||
#+begin_quote
|
||||
Permission is granted to copy, distribute and/or modify this document
|
||||
|
|
@ -208,11 +208,6 @@ alias ~denote-create-note~.
|
|||
:CUSTOM_ID: h:f9204f1f-fcee-49b1-8081-16a08a338099
|
||||
:END:
|
||||
|
||||
[ As part of {{{development-version}}}, all commands that produce or
|
||||
modify a Denote file name are revised to do their work while
|
||||
conforming with the value of ~denote-prompts~, where that is
|
||||
reasonable to do. ]
|
||||
|
||||
#+vindex: denote-prompts
|
||||
The user option ~denote-prompts~ determines how the ~denote~ command
|
||||
will behave interactively ([[#h:6a92a8b5-d766-42cc-8e5b-8dc255466a23][Standard note creation]]).
|
||||
|
|
@ -301,8 +296,6 @@ specifies, based on the supplied arguments.
|
|||
:CUSTOM_ID: h:403422a7-7578-494b-8f33-813874c12da3
|
||||
:END:
|
||||
|
||||
[ Part of {{{development-version}}}. ]
|
||||
|
||||
#+vindex: denote-history-completion-in-prompts
|
||||
The user option ~denote-history-completion-in-prompts~ toggles history
|
||||
completion in all ~denote-prompts-with-history-as-completion~.
|
||||
|
|
@ -410,8 +403,7 @@ option, there are cases where an ad-hoc method is the appropriate one
|
|||
|
||||
To this end, Denote provides the following interactive convenience
|
||||
commands for note creation. They all work by appending a new prompt to
|
||||
the existing ~denote-prompts~. [ Appending to the existing
|
||||
~denote-prompts~ is defined in {{{development-version}}}. ]
|
||||
the existing ~denote-prompts~.
|
||||
|
||||
+ Create note by specifying file type :: The ~denote-type~ command
|
||||
creates a note while prompting for a file type.
|
||||
|
|
@ -550,8 +542,6 @@ to the list of commands available at the ~denote-command-prompt~
|
|||
:CUSTOM_ID: h:bf80f4cd-6f56-4f7c-a991-8573161e4511
|
||||
:END:
|
||||
|
||||
[ Part of {{{development-version}}}. ]
|
||||
|
||||
#+vindex: denote-save-buffer-after-creation
|
||||
The user option ~denote-save-buffer-after-creation~ controls whether
|
||||
commands that creeate new notes save their buffer outright.
|
||||
|
|
@ -584,8 +574,6 @@ that is common in interactions with Org mode, can set the user option
|
|||
:CUSTOM_ID: h:d0c7cb79-21e5-4176-a6af-f4f68578c8dd
|
||||
:END:
|
||||
|
||||
[ Rewritten as part of {{{development-version}}}. ]
|
||||
|
||||
In Org parlance, an entry with all its subheadings and other contents
|
||||
is a "subtree". Denote can operate on the subtree to extract it from
|
||||
the current file and create a new file out of it. One such workflow is
|
||||
|
|
@ -1047,9 +1035,6 @@ To see another example of a wrapper function that =let= binds
|
|||
:CUSTOM_ID: h:e43baf95-f201-4fec-8620-c0eb5eaa1c85
|
||||
:END:
|
||||
|
||||
[ As part of {{{development-version}}}, we fixed an issue where a
|
||||
=C-u= prefix argument was needed to select a silo. ]
|
||||
|
||||
The =denote-silo-extras.el= provides optional convenience functions for
|
||||
working with silos ([[#h:15719799-a5ff-4e9a-9f10-4ca03ef8f6c5][Maintain separate directory silos for notes]]).
|
||||
Start by loading the relevant library:
|
||||
|
|
@ -1130,8 +1115,7 @@ development log: <https://protesilaos.com/codelog/2023-03-31-emacs-denote-menu/>
|
|||
|
||||
#+findex: denote-menu-bar-mode
|
||||
The command ~denote-menu-bar-mode~ toggles the presentation of the
|
||||
menu. It is enabled by default. [ The ~denote-menu-bar-mode~ is part
|
||||
of {{{development-version}}}. ]
|
||||
menu. It is enabled by default.
|
||||
|
||||
Emacs also provides support for operations through a context menu.
|
||||
This is typically the set of actions that are made available via a
|
||||
|
|
@ -1169,7 +1153,7 @@ mechanisms to facilitate the task of renaming them.
|
|||
|
||||
#+vindex: denote-after-rename-file-hook
|
||||
All renaming commands run the ~denote-after-rename-file-hook~ after a
|
||||
succesful operation. [ Part of {{{development-version}}}. ]
|
||||
succesful operation.
|
||||
|
||||
Apart from renaming files, Denote can also rename only the buffer.
|
||||
The idea is that the underlying file name is correct but it can be
|
||||
|
|
@ -1183,12 +1167,6 @@ line or switching between then with commands like ~switch-to-buffer~.
|
|||
:CUSTOM_ID: h:7cc9e000-806a-48da-945c-711bbc7426b0
|
||||
:END:
|
||||
|
||||
[ Revised as part of {{{development-version}}} to honour the value of
|
||||
the user option ~denote-prompts~ where that makes sense ([[#h:f9204f1f-fcee-49b1-8081-16a08a338099][The ~denote-prompts~ option]]).
|
||||
This version also broadens the scope of the user option
|
||||
~denote-rename-no-confirm~, such that it automatically saves the
|
||||
affected buffers, post-rename. ]
|
||||
|
||||
#+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
|
||||
|
|
@ -1293,10 +1271,6 @@ one-by-one, use ~denote-dired-rename-files~ ([[#h:1b6b2c78-42f0-45b8-9ef0-6de21a
|
|||
:CUSTOM_ID: h:a2ae9090-c49e-4b32-bcf5-eb8944241fd7
|
||||
:END:
|
||||
|
||||
[ Revised as part of {{{development-version}}} to save the underlying
|
||||
buffer. The assumption is that the user who opts in to this feature is
|
||||
familiar with the Denote renaming operation and knows it is reliable. ]
|
||||
|
||||
#+vindex: denote-rename-no-confirm
|
||||
The user option ~denote-rename-no-confirm~ makes all commands that
|
||||
rename files not prompt for confirmation and save buffers outright ([[#h:532e8e2a-9b7d-41c0-8f4b-3c5cbb7d4dca][Renaming files]]).
|
||||
|
|
@ -1332,12 +1306,6 @@ use, but carries out the renaming without asking for confirmation
|
|||
:CUSTOM_ID: h:3ab08ff4-81fa-4d24-99cb-79f97c13a373
|
||||
:END:
|
||||
|
||||
[ Revised as part of {{{development-version}}} to (i) accept an
|
||||
optional double prefix argument to automatically save the buffer and
|
||||
(ii) to not ask for confirmation while renaming and to automatically
|
||||
save the buffer if the user option ~denote-rename-no-confirm~ is
|
||||
non-nil ([[#h:a2ae9090-c49e-4b32-bcf5-eb8944241fd7][The ~denote-rename-no-confirm~ option]]). ]
|
||||
|
||||
#+findex: denote-rename-file-using-front-matter
|
||||
In the previous section, we covered the more general mechanism of the
|
||||
command ~denote-rename-file~ ([[#h:7cc9e000-806a-48da-945c-711bbc7426b0][Rename a single file]]). There is also a
|
||||
|
|
@ -1383,8 +1351,6 @@ If called interactively with a prefix argument (=C-u= by default) or
|
|||
from Lisp with a non-nil =NO-CONFIRM= argument, this "yes or no"
|
||||
prompt is skipped and the renaming is done outright.
|
||||
|
||||
[ The following are part of {{{development-version}}}. ]
|
||||
|
||||
If called interactively with a double prefix argument (=C-u C-u= by
|
||||
default) or from Lisp with a non-nil =SAVE-BUFFER= argument, the
|
||||
buffer is saved after the front matter is updated and the file is
|
||||
|
|
@ -1404,13 +1370,6 @@ the like.
|
|||
:CUSTOM_ID: h:1b6b2c78-42f0-45b8-9ef0-6de21a8b2cde
|
||||
:END:
|
||||
|
||||
[ Revised as part of {{{development-version}}} to honour the value of
|
||||
the user option ~denote-prompts~ where that makes sense ([[#h:f9204f1f-fcee-49b1-8081-16a08a338099][The ~denote-prompts~ option]]). ]
|
||||
|
||||
[ As part of {{{development-version}}} the
|
||||
~denote-dired-rename-marked-files~ is an alias for
|
||||
~denote-dired-rename-files~. ]
|
||||
|
||||
#+findex: denote-dired-rename-files
|
||||
#+findex: denote-dired-rename-marked-files
|
||||
The command ~denote-dired-rename-files~ (alias
|
||||
|
|
@ -1434,9 +1393,6 @@ check the command ~denote-dired-rename-marked-files-with-keywords~.
|
|||
:CUSTOM_ID: h:f365ff7e-2140-4e14-a92f-666ae97382a4
|
||||
:END:
|
||||
|
||||
[ Revised as part of {{{development-version}}} to honour the value of
|
||||
the user option ~denote-prompts~ where that makes sense ([[#h:f9204f1f-fcee-49b1-8081-16a08a338099][The ~denote-prompts~ option]]). ]
|
||||
|
||||
#+findex: denote-dired-rename-marked-files-with-keywords
|
||||
The ~denote-dired-rename-marked-files-with-keywords~ command renames
|
||||
marked files in Dired to conform with our file-naming scheme. It does
|
||||
|
|
@ -1532,8 +1488,6 @@ Similarly, the ~denote-keywords-remove~ removes one or more keywords
|
|||
from the list of existing keywords and then renames the file
|
||||
accordingly.
|
||||
|
||||
[ The following are part of {{{development-version}}}. ]
|
||||
|
||||
Both commands accept an optional prefix argument to automatically save
|
||||
the buffer. Similarly, they both interpret a non-nil value for the
|
||||
user option ~denote-rename-no-confirm~ the same as the prefix argument
|
||||
|
|
@ -1552,8 +1506,6 @@ Aliases for these commands are: ~denote-rename-add-keywords~ and
|
|||
:CUSTOM_ID: h:b08a350f-b269-47ed-8c2a-b8ecf1b63c7f
|
||||
:END:
|
||||
|
||||
[ Part of {{{development-version}}}. ]
|
||||
|
||||
#+findex: denote-rename-add-signature
|
||||
#+findex: denote-rename-remove-signature
|
||||
The commands ~denote-rename-add-signature~ and
|
||||
|
|
@ -1735,9 +1687,6 @@ hackability and so users can deviate from the aforementioned
|
|||
:CUSTOM_ID: h:d375c6d2-92c7-425f-9d9d-219ff47ed2a3
|
||||
:END:
|
||||
|
||||
[ Part of {{{development-version}}}, superseding the deprecated user
|
||||
option ~denote-file-name-letter-casing~. ]
|
||||
|
||||
#+vindex: denote-file-name-slug-functions
|
||||
The user option ~denote-file-name-slug-functions~ controls the
|
||||
sluggification of file name components ([[#h:ae8b19a1-7f67-4258-96b3-370a72c43f4e][Sluggification of file name components]]).
|
||||
|
|
@ -2115,8 +2064,6 @@ like an ordinary link by default. This is just a convenience for the
|
|||
user/theme in case they want =denote:= links to remain distinct from
|
||||
other links.
|
||||
|
||||
[ The following is part of {{{development-version}}}. ]
|
||||
|
||||
#+findex: denote-link-markdown-follow
|
||||
In files whose major mode is ~markdown-mode~, the default key binding
|
||||
=C-c C-o= (which calls the command ~markdown-follow-thing-at-point~)
|
||||
|
|
@ -2130,8 +2077,6 @@ buttonization. Interested users can refer to the function
|
|||
:CUSTOM_ID: h:d99de1fb-b1b7-4a74-8667-575636a4d6a4
|
||||
:END:
|
||||
|
||||
[ Part of {{{development-version}}}. ]
|
||||
|
||||
#+vindex: denote-org-store-link-to-heading
|
||||
The user option ~denote-org-store-link-to-heading~ determines whether
|
||||
~org-store-link~ links to the current Org heading (such links are
|
||||
|
|
@ -2180,8 +2125,6 @@ regardless of the aforementioned user option ([[#h:fc1ad245-ec08-41be-8d1e-7153d
|
|||
:CUSTOM_ID: h:fc1ad245-ec08-41be-8d1e-7153d99daf02
|
||||
:END:
|
||||
|
||||
[ Part of {{{development-version}}}. ]
|
||||
|
||||
#+findex: denote-org-extras-link-to-heading
|
||||
As part of the optional =denote-org-extras.el= extension, the command
|
||||
~denote-org-extras-link-to-heading~ prompts for a link to an Org file
|
||||
|
|
@ -2583,8 +2526,6 @@ creating a new one ([[#h:ad91ca39-cf10-4e16-b224-fdf78f093883][Open an existing
|
|||
:CUSTOM_ID: h:ed220cac-7dcb-4bb7-9243-1bb85e452e5f
|
||||
:END:
|
||||
|
||||
[ Part of {{{development-version}}}. ]
|
||||
|
||||
Sometimes the user needs to translate all =denote:= link types to
|
||||
their =file:= equivalent. This may be because some other tool does not
|
||||
recognise =denote:= links (or other custom links types---which are a
|
||||
|
|
@ -2702,8 +2643,7 @@ The faces we define for this purpose are:
|
|||
+ ~denote-faces-time~
|
||||
+ ~denote-faces-title~
|
||||
|
||||
As part of {{{development-version}}} we also provide these faces for
|
||||
more fine-grained colouration:
|
||||
For more control, we also provide these:
|
||||
|
||||
#+vindex denote-faces-year
|
||||
#+vindex denote-faces-month
|
||||
|
|
@ -2815,15 +2755,14 @@ own function and assigning it to the ~denote-rename-buffer-function~.
|
|||
:CUSTOM_ID: h:8b542c50-dcc9-4bca-8037-a36599b22779
|
||||
:END:
|
||||
|
||||
[ As part of version 2.3.0 (currently {{{development-version}}}), all
|
||||
dynamic blocks are defined in the file =denote-org-extras.el=. The
|
||||
file which was once called =denote-org-dblock.el= contains aliases
|
||||
for the new function names and dipslays a warning about its
|
||||
deprecation. There is no need to ~require~ the ~denote-org-extras~
|
||||
feature because all of Denote's Org dynamic blocks are autoloaded
|
||||
(meaning that they work as soon as they are used). For backward
|
||||
compatibility, all dynamic blocks retain their original names as an
|
||||
alias for the newer one. ]
|
||||
[ As part of version 2.3.0, all dynamic blocks are defined in the file
|
||||
=denote-org-extras.el=. The file which was once called
|
||||
=denote-org-dblock.el= contains aliases for the new function names
|
||||
and dipslays a warning about its deprecation. There is no need to
|
||||
~require~ the ~denote-org-extras~ feature because all of Denote's
|
||||
Org dynamic blocks are autoloaded (meaning that they work as soon as
|
||||
they are used). For backward compatibility, all dynamic blocks
|
||||
retain their original names as an alias for the newer one. ]
|
||||
|
||||
Denote can optionally integrate with Org mode's "dynamic blocks"
|
||||
facility. This means that it can use special blocks that are evaluated
|
||||
|
|
@ -2856,15 +2795,14 @@ Evaluate:
|
|||
:CUSTOM_ID: h:50160fae-6515-4d7d-9737-995ad925e64b
|
||||
:END:
|
||||
|
||||
[ As part of version 2.3.0 (currently {{{development-version}}}), all
|
||||
dynamic blocks are defined in the file =denote-org-extras.el=. The
|
||||
file which was once called =denote-org-dblock.el= contains aliases
|
||||
for the new function names and dipslays a warning about its
|
||||
deprecation. There is no need to ~require~ the ~denote-org-extras~
|
||||
feature because all of Denote's Org dynamic blocks are autoloaded
|
||||
(meaning that they work as soon as they are used). For backward
|
||||
compatibility, all dynamic blocks retain their original names as an
|
||||
alias for the newer one. ]
|
||||
[ As part of version 2.3.0, all dynamic blocks are defined in the file
|
||||
=denote-org-extras.el=. The file which was once called
|
||||
=denote-org-dblock.el= contains aliases for the new function names
|
||||
and dipslays a warning about its deprecation. There is no need to
|
||||
~require~ the ~denote-org-extras~ feature because all of Denote's
|
||||
Org dynamic blocks are autoloaded (meaning that they work as soon as
|
||||
they are used). For backward compatibility, all dynamic blocks
|
||||
retain their original names as an alias for the newer one. ]
|
||||
|
||||
#+findex: denote-org-extras-dblock-insert-links
|
||||
The =denote-links= block can be inserted at point with the command
|
||||
|
|
@ -2925,9 +2863,6 @@ this in an Org file:
|
|||
:
|
||||
: #+END:
|
||||
|
||||
[ The ~denote-org-extras-dblock-insert-missing-links~ is part of
|
||||
{{{development-version}}}. ]
|
||||
|
||||
#+findex: denote-org-extras-dblock-insert-missing-links
|
||||
Finally, the =denote-missing-links= block is available with the
|
||||
command ~denote-org-extras-dblock-insert-missing-links~. It is like
|
||||
|
|
@ -2947,15 +2882,14 @@ 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:
|
||||
|
||||
[ As part of version 2.3.0 (currently {{{development-version}}}), all
|
||||
dynamic blocks are defined in the file =denote-org-extras.el=. The
|
||||
file which was once called =denote-org-dblock.el= contains aliases
|
||||
for the new function names and dipslays a warning about its
|
||||
deprecation. There is no need to ~require~ the ~denote-org-extras~
|
||||
feature because all of Denote's Org dynamic blocks are autoloaded
|
||||
(meaning that they work as soon as they are used). For backward
|
||||
compatibility, all dynamic blocks retain their original names as an
|
||||
alias for the newer one. ]
|
||||
[ As part of version 2.3.0, all dynamic blocks are defined in the file
|
||||
=denote-org-extras.el=. The file which was once called
|
||||
=denote-org-dblock.el= contains aliases for the new function names
|
||||
and dipslays a warning about its deprecation. There is no need to
|
||||
~require~ the ~denote-org-extras~ feature because all of Denote's
|
||||
Org dynamic blocks are autoloaded (meaning that they work as soon as
|
||||
they are used). For backward compatibility, all dynamic blocks
|
||||
retain their original names as an alias for the newer one. ]
|
||||
|
||||
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]]).
|
||||
|
|
@ -3164,9 +3098,6 @@ for one among them using minibuffer completion. If there is only one,
|
|||
it visits it outright. If there is no journal entry, it creates one
|
||||
by calling ~denote-journal-extra-new-entry~ (as described above).
|
||||
|
||||
[ The ~denote-journal-extras-link-or-create-entry~ is part of
|
||||
{{{development-version}}}. ]
|
||||
|
||||
#+findex: denote-journal-extras-link-or-create-entry
|
||||
The command ~denote-journal-extras-link-or-create-entry~ links to the
|
||||
journal entry for today or creates it in the background, if missing,
|
||||
|
|
@ -3855,8 +3786,7 @@ or by advising the Org export function.
|
|||
|
||||
Denote also provides commands to convert =denote:= links to their
|
||||
=file:= equivalent, in case this is a required pre-processing step for
|
||||
export purposes ([[#h:ed220cac-7dcb-4bb7-9243-1bb85e452e5f][Convert =denote:= links to =file:= links]]). [ This is
|
||||
part of {{{development-version}}}. ]
|
||||
export purposes ([[#h:ed220cac-7dcb-4bb7-9243-1bb85e452e5f][Convert =denote:= links to =file:= links]]).
|
||||
|
||||
**** Manually configure Org export
|
||||
:PROPERTIES:
|
||||
|
|
@ -4248,8 +4178,7 @@ might change them without further notice.
|
|||
with keywords readable by ~completing-read-multiple~. =STRING=
|
||||
consists of underscore-separated words, as those appear in the
|
||||
keywords component of a Denote file name. =STRING= is the same as
|
||||
the return value of ~denote-retrieve-filename-keywords~. [ Part of
|
||||
{{{development-version}}}. ]
|
||||
the return value of ~denote-retrieve-filename-keywords~.
|
||||
|
||||
#+findex: denote-keywords-sort
|
||||
+ Function ~denote-keywords-sort~ :: Sort =KEYWORDS= if
|
||||
|
|
@ -4266,15 +4195,12 @@ might change them without further notice.
|
|||
valid =DATE= is a value that can be parsed by either ~decode-time~
|
||||
or ~date-to-time~ .Those functions signal an error if =DATE= is a
|
||||
value they do not recognise. If =DATE= is nil, return nil.
|
||||
[ Part of {{{development-version}}}. ]
|
||||
|
||||
#+findex: denote-parse-date
|
||||
+ Function ~denote-parse-date~ :: Return =DATE= as an appropriate
|
||||
value for the ~denote~ command. Pass =DATE= through
|
||||
~denote-valid-date-p~ and use its return value. If either that or
|
||||
=DATE= is nil, return ~current-time~. [ The ~denote-valid-date-p~ is
|
||||
the new name of ~denote--valid-date~, with enhanced functionality.
|
||||
Done as part of {{{development-version}}}. ]
|
||||
=DATE= is nil, return ~current-time~.
|
||||
|
||||
#+findex: denote-directory
|
||||
+ Function ~denote-directory~ :: Return path of the variable
|
||||
|
|
@ -4409,15 +4335,12 @@ might change them without further notice.
|
|||
title for =FILE= given its =TYPE=. Try to find the value of the
|
||||
title in the front matter of FILE, otherwise use its file name. This
|
||||
is a wrapper for ~denote-retrieve-front-matter-title-value~ and
|
||||
=denote-retrieve-filename-title=. [ This was known as the private
|
||||
function ~denote--retrieve-title-or-filename~. It is made public as
|
||||
part of {{{development-version}}}. ]
|
||||
=denote-retrieve-filename-title=.
|
||||
|
||||
#+findex: denote-get-identifier
|
||||
+ Function ~denote-get-identifier~ :: Convert =DATE= into a Denote
|
||||
identifier using ~denote-id-format~. =DATE= is parsed by
|
||||
~denote-valid-date-p~. If =DATE= is nil, use the current time.
|
||||
[ Part of {{{development-version}}}. ]
|
||||
|
||||
#+findex: denote-create-unique-file-identifier
|
||||
+ Function ~denote-create-unique-file-identifier~ :: Create a new unique
|
||||
|
|
@ -4470,18 +4393,12 @@ might change them without further notice.
|
|||
of the default prompt. Previous inputs at this prompt are available
|
||||
for minibuffer completion if the user option ~denote-history-completion-in-prompts~
|
||||
is set to a non-nil value ([[#h:403422a7-7578-494b-8f33-813874c12da3][The ~denote-history-completion-in-prompts~ option]]).
|
||||
[ Revised as part of {{{development-version}}} to optionally not
|
||||
provide completion against its previous input history. ]
|
||||
|
||||
#+findex: denote-file-prompt
|
||||
+ Function ~denote-file-prompt~ :: Prompt for file with identifier in
|
||||
variable ~denote-directory~. With optional =FILES-MATCHING-REGEXP=,
|
||||
filter the candidates per the given regular expression. With
|
||||
optional =PROMPT-TEXT=, use it instead of the default "Select NOTE".
|
||||
[ As part of {{{development-version}}}, completion candidates have a
|
||||
relative file path, but the return value and what is stored in the
|
||||
minibuffer history is still the full file system path. Furthermore,
|
||||
the =PROMPT-TEXT= is added. ]
|
||||
|
||||
#+findex: denote-keywords-prompt
|
||||
+ Function ~denote-keywords-prompt~ :: Prompt for one or more keywords.
|
||||
|
|
@ -4489,8 +4406,7 @@ might change them without further notice.
|
|||
~crm-separator~, which typically is a comma. With optional
|
||||
=PROMPT-TEXT=, use it to prompt the user for keywords. Else use a
|
||||
generic prompt. With optional =INITIAL-KEYWORDS= use them as the
|
||||
initial minibuffer text. [ The optional =INITIAL-KEYWORDS= argument is
|
||||
part of {{{development-version}}}. ]
|
||||
initial minibuffer text.
|
||||
|
||||
#+findex: denote-title-prompt
|
||||
+ Function ~denote-title-prompt~ :: Prompt for title string. With
|
||||
|
|
@ -4499,8 +4415,6 @@ might change them without further notice.
|
|||
default prompt. Previous inputs at this prompt are available
|
||||
for minibuffer completion if the user option ~denote-history-completion-in-prompts~
|
||||
is set to a non-nil value ([[#h:403422a7-7578-494b-8f33-813874c12da3][The ~denote-history-completion-in-prompts~ option]]).
|
||||
[ Revised as part of {{{development-version}}} to optionally not
|
||||
provide completion against its previous input history. ]
|
||||
|
||||
#+vindex: denote-title-prompt-current-default
|
||||
+ Variable ~denote-title-prompt-current-default~ :: Currently bound
|
||||
|
|
@ -4534,7 +4448,6 @@ might change them without further notice.
|
|||
optionally perform completion against their own minibuffer history
|
||||
when the user option ~denote-history-completion-in-prompts~ is set
|
||||
to a non-nil value ([[#h:403422a7-7578-494b-8f33-813874c12da3][The ~denote-history-completion-in-prompts~ option]]).
|
||||
[ This is part of {{{development-version}}}. ]
|
||||
|
||||
#+findex: denote-files-matching-regexp-prompt
|
||||
+ Function ~denote-files-matching-regexp-prompt~ :: Prompt for
|
||||
|
|
@ -4572,8 +4485,7 @@ might change them without further notice.
|
|||
the rewriting of the front matter. Otherwise produce a ~y-or-n-p~
|
||||
prompt to that effect. With optional =NO-CONFIRM=, save the buffer
|
||||
after performing the rewrite. Otherwise leave it unsaved for
|
||||
furthter review by the user. [ The =NO-CONFIRM= saves the buffer as
|
||||
part of {{{development-version}}}. ]
|
||||
furthter review by the user.
|
||||
|
||||
#+findex: denote-rewrite-keywords
|
||||
+ Function ~denote-rewrite-keywords~ :: Rewrite =KEYWORDS= in =FILE=
|
||||
|
|
@ -4582,8 +4494,7 @@ might change them without further notice.
|
|||
confirmation. With optional =SAVE-BUFFER=, save the buffer
|
||||
corresponding to =FILE=. This function is for use in the commands
|
||||
~denote-keywords-add~, ~denote-keywords-remove~,
|
||||
~denote-dired-rename-files~, or related. [ The =SAVE-BUFFER= saves
|
||||
the buffer as part of {{{development-version}}}. ]
|
||||
~denote-dired-rename-files~, or related.
|
||||
|
||||
#+findex: denote-update-dired-buffers
|
||||
+ Function ~denote-update-dired-buffers~ :: Update Dired buffers of
|
||||
|
|
@ -4591,8 +4502,6 @@ might change them without further notice.
|
|||
even if it is not inside the ~denote-directory~. Note that the
|
||||
~denote-directory~ accepts a directory-local value for what we
|
||||
internally refer to as "silos" ([[#h:15719799-a5ff-4e9a-9f10-4ca03ef8f6c5][Maintain separate directories for notes]]).
|
||||
[ Refined as part of {{{development-version}}} to also revert the
|
||||
current Dired buffer. ]
|
||||
|
||||
#+vindex: denote-file-types
|
||||
+ Variable ~denote-file-types~ :: Alist of ~denote-file-type~ and
|
||||
|
|
@ -4727,15 +4636,13 @@ might change them without further notice.
|
|||
#+findex: denote-format-string-for-org-front-matter
|
||||
+ Function ~denote-format-string-for-org-front-matter~ :: Return
|
||||
string =S= as-is for Org or plain text front matter. If =S= is not a
|
||||
string, return an empty string. [ Part of {{{development-version}}}. ]
|
||||
string, return an empty string.
|
||||
|
||||
#+findex: denote-format-string-for-md-front-matter
|
||||
+ Function ~denote-format-string-for-md-front-matter~ :: Surround
|
||||
string =S= with quotes. If =S= is not a string, return a literal
|
||||
emptry string. This can be used in ~denote-file-types~ to format
|
||||
front mattter. [ Revised as part of {{{development-version}}} and
|
||||
renamed from ~denote-surround-with-quotes~ to
|
||||
~denote-format-string-for-md-front-matter~. ]
|
||||
front mattter.
|
||||
|
||||
#+findex: denote-format-keywords-for-md-front-matter
|
||||
+ Function ~denote-format-keywords-for-md-front-matter~ :: Format
|
||||
|
|
@ -4766,8 +4673,6 @@ might change them without further notice.
|
|||
+ Function ~denote-link-return-backlinks~ :: Return list of backlinks
|
||||
in current or optional =FILE=. Also see ~denote-link-return-links~.
|
||||
|
||||
[ All of the following are part of {{{development-version}}}. ]
|
||||
|
||||
#+vindex: denote-link-signature-format
|
||||
+ Variable ~denote-link-signature-format~ :: Format of link
|
||||
description for ~denote-link-with-signature~.
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
;; Author: Protesilaos Stavrou <info@protesilaos.com>
|
||||
;; Maintainer: Protesilaos Stavrou <info@protesilaos.com>
|
||||
;; URL: https://github.com/protesilaos/denote
|
||||
;; Version: 2.2.4
|
||||
;; Version: 2.3.0
|
||||
;; Package-Requires: ((emacs "28.1"))
|
||||
|
||||
;; This file is NOT part of GNU Emacs.
|
||||
|
|
|
|||
Loading…
Reference in a new issue