dotemacs

My Emacs configuration
git clone git://git.entf.net/dotemacs
Log | Files | Refs | LICENSE

CHANGELOG.org (104312B)


      1 #+title: Change log of Denote
      2 #+author: Protesilaos Stavrou
      3 #+email: info@protesilaos.com
      4 #+options: ':nil toc:nil num:nil author:nil email:nil
      5 
      6 This document contains the release notes for each tagged commit on the
      7 project's main git repository: <https://git.sr.ht/~protesilaos/denote>.
      8 
      9 The newest release is at the top.  For further details, please consult
     10 the manual: <https://protesilaos.com/emacs/denote>.
     11 
     12 * Version 1.2.0 on 2022-12-12
     13 :PROPERTIES:
     14 :CUSTOM_ID: h:92478a05-4a69-413c-8d95-1dacbcf6af2c
     15 :END:
     16 
     17 ** Denote now requires Emacs version 28.1 or higher
     18 :PROPERTIES:
     19 :CUSTOM_ID: h:bc0e173a-3b9f-427c-9fb0-d435a5ef127e
     20 :END:
     21 
     22 With the help of Noboru Ota (nobiot), we realised that Denote was
     23 broken on Emacs 27 for quite a while.  The fact that we received no
     24 feedback about it suggests that this change is the best course of
     25 action going forward.  Discussion:
     26 <https://lists.sr.ht/~protesilaos/denote/%3C86r0yvzm12.fsf%40nobiot.com%3E#%3C86sfja78ik.fsf@nobiot.com%3E>
     27 
     28 Emacs 27 lacks certain Xref facilities that we need for the
     29 backlinking facility.  It was holding us back for no good reason,
     30 while also adding to the maintenance burden.
     31 
     32 If you are using Denote on Emacs 27 and things are working for you,
     33 there is no need to update the package.  Do it when you also upgrade
     34 Emacs to a newer version.
     35 
     36 ** Display context in backlinks' buffer
     37 :PROPERTIES:
     38 :CUSTOM_ID: h:dafbdbae-36f1-487a-94c8-2762568a766e
     39 :END:
     40 
     41 By default, the generic backlinks' buffer, which can be displayed with
     42 the command ~denote-link-backlinks~ (alias ~denote-link-show-backlinks-buffer~),
     43 only shows the file names of the linked notes.
     44 
     45 We have made it possible to produce a more informative view by showing
     46 the context of the link and also listing all links per file.  This is
     47 done by setting the user option ~denote-backlinks-show-context~ to a
     48 non-nil value.
     49 
     50 To illustrate the difference, this is the default backlinks' buffer:
     51 
     52 #+begin_example
     53 Backlinks to "On being honest" (20220614T130812)
     54 ------------------------------------------------
     55 
     56 20220614T145606--let-this-glance-become-a-stare__journal.txt
     57 20220616T182958--feeling-butterflies-in-your-stomach__journal.txt
     58 #+end_example
     59 
     60 And this is the one with ~denote-backlinks-show-context~ enabled:
     61 
     62 #+begin_example
     63 Backlinks to "On being honest" (20220614T130812)
     64 ------------------------------------------------
     65 
     66 20220614T145606--let-this-glance-become-a-stare__journal.txt
     67 37: growing into it: [[denote:20220614T130812][On being honest]].
     68 64: As I said in [[denote:20220614T130812][On being honest]] I have never
     69 20220616T182958--feeling-butterflies-in-your-stomach__journal.txt
     70 62: indifference.  In [[denote:20220614T130812][On being honest]] I alluded
     71 #+end_example
     72 
     73 Granted, here we show plain text though in Emacs the results have the
     74 appropriate colours of the active theme and are easier to read.
     75 
     76 Thanks to Noboru Ota (nobiot) for implementing this feature.  We
     77 discussed it at length on the mailing list:
     78 <https://lists.sr.ht/~protesilaos/denote/%3C86r0yvzm12.fsf%40nobiot.com%3E>.
     79 
     80 Noboru has assigned copyright to the Free Software Foundation.
     81 
     82 ** Dynamic Org blocks for lists of Denote links
     83 :PROPERTIES:
     84 :CUSTOM_ID: h:f7904a57-22c0-446f-b7e3-7a736332002c
     85 :END:
     86 
     87 Denote now includes the ~denote-org-dblock~ library.  Activate it
     88 thus:
     89 
     90 #+begin_src emacs-lisp
     91 ;; Register Denote's Org dynamic blocks
     92 (require 'denote-org-dblock)
     93 #+end_src
     94 
     95 A dynamic block gets its contents by evaluating a given function,
     96 depending on the type of block.  The type of block and its parameters
     97 are stated in the opening =#+BEGIN= line of the block.  Typing =C-c
     98 C-c= with point on that line runs the function, with the given
     99 arguments, and populates the block's contents accordingly.
    100 
    101 What Denote has is ways to write blocks that produce a list of links
    102 matching a given regular expression while conforming with some other
    103 parameters.  The manual explains how to use this powerful feature
    104 (which is necessarily specific to the Org file type):
    105 <https://protesilaos.com/emacs/denote#h:8b542c50-dcc9-4bca-8037-a36599b22779>.
    106 
    107 Thanks to Elias Storms for authoring ~denote-org-dblock~ and for
    108 discussing this issue at length with me on the mailing list:
    109 <https://lists.sr.ht/~protesilaos/denote/%3Cm2sfisexx7.fsf%40MBA21.fritz.box%3E>.
    110 
    111 Elias has assigned copyright to the Free Software Foundation.
    112 
    113 ** Integration with the built-in project.el and xref.el libraries
    114 :PROPERTIES:
    115 :CUSTOM_ID: h:e8a7d08c-cdf0-4207-92c1-391415b8371f
    116 :END:
    117 
    118 Denote was already using Xref internally but has now gained more
    119 capabilities which help it find files more effectively.  With the help
    120 of Emacs' standard project library, all file-related prompts (e.g. to
    121 add a link) search all items in the ~denote-directory~ regardless of
    122 whether the user is in a subdirectory or not.
    123 
    124 All Denote commands benefit from this refactoring.  One such request
    125 to "Make ~denote-open-or-create~ work better across subfolders" was
    126 made in issue 114 on the GitHub mirror:
    127 <https://github.com/protesilaos/denote/issues/114>.
    128 
    129 Thanks to Noboru Ota (nobiot) for introducing this feature together
    130 with a new system of "modules" for incorporating additional built-in
    131 functionality:
    132 
    133 - <https://lists.sr.ht/~protesilaos/denote/%3C86a64ooxyi.fsf%40nobiot.com%3E>
    134 - <https://lists.sr.ht/~protesilaos/denote/%3C86k03f4iq6.fsf%40nobiot.com%3E>
    135 
    136 I will not document the new user option ~denote-modules~ right now as
    137 my ongoing job search prevented me from exploring the full potential
    138 of this feature.  I promise to do it for the next version of Denote
    139 and update the manual accordingly.  Nevertheless, the doc string of
    140 ~denote-modules~ already provides all one needs to get started.
    141 
    142 ** Re-use last input in "do or create" commands
    143 :PROPERTIES:
    144 :CUSTOM_ID: h:5a003d44-7ad0-4c92-b908-ec7cf016b2dd
    145 :END:
    146 
    147 The commands ~denote-open-or-create~, ~denote-link-or-create~ first
    148 prompt for an existing note.  If they find it, they act on it,
    149 otherwise they prompt for the creation of a new note to operate on.
    150 
    151 At the first prompt, it is common to use regular expressions and
    152 out-of-order pattern matching (such as with the ~orderless~ package),
    153 so the input can be something like =_test ^2022 some title=, which we
    154 obviously don't want to automatically reuse as the new note's actual
    155 title.
    156 
    157 To this end, and to accommodate all workflows, we leverage Emacs'
    158 minibuffer history to make the last input accessible with =M-p= at the
    159 minibuffer prompt (=M-x previous-history-element=).  The text is
    160 available for further editing before it is submitted as the new note's
    161 title.  Simple, effective, and flexible!
    162 
    163 Thanks to Guo Yong for starting the discussion that led me to this
    164 improvement:
    165 <https://lists.sr.ht/~protesilaos/denote/%3CNF6pFBq--3-9%40tutanota.com%3E>.
    166 
    167 ** Add support for any file type
    168 :PROPERTIES:
    169 :CUSTOM_ID: h:e73a4e76-6c00-4691-8893-8f885c26f306
    170 :END:
    171 
    172 Denote provides the user option ~denote-file-type~ which specifies the
    173 file type to use for new notes.  Options include Org mode (the
    174 default), Markdown+YAML, Markdown+TOML, and plain text.  Furthermore,
    175 there exists the convenience command ~denote-type~ (alias
    176 ~denote-create-note-using-type~) which prompts for a file type to use
    177 when creating a new note (I normally write in plain text, but
    178 sometimes switch to Org or Markdown).
    179 
    180 The variable ~denote-file-types~ (which is NOT a user option)
    181 specifies all the parameters of what a "file type" means, such as how
    182 to format its front matter, what style of date+time to use, which file
    183 type extension to write, how to rename the file, what style of link to
    184 apply, and so on.  Advanced users can now edit this variable to either
    185 register new file types or redefine the behaviour of existing ones.
    186 Read this comprehensive guide on how to do it:
    187 <https://protesilaos.com/codelog/2022-10-30-demo-denote-custom-file-type/>.
    188 
    189 I repeat: this is for advanced users or, anyhow, for those who are
    190 prepared to maintain some custom code in their setup.  The guide is
    191 accessible though and I am always willing to help anyone in need of
    192 assistance.
    193 
    194 A relevant request for such a feature can be found in issue 86 on the
    195 GitHub mirror: <https://github.com/protesilaos/denote/issues/86>.
    196 
    197 The ~denote-file-types~ were introduced by Jean-Philippe Gagné Guay in
    198 pull request 89 at the GitHub mirror and were part of Denote version
    199 0.6.0: <https://github.com/protesilaos/denote/pull/89>.  I have made
    200 lots of changes since then to make all parts of Denote work with it
    201 and to parameterise its various facets.
    202 
    203 ** Exclude certain directories from all operations
    204 :PROPERTIES:
    205 :CUSTOM_ID: h:04f42aab-d8fe-4c4a-b865-3bb0655e2631
    206 :END:
    207 
    208 The user option ~denote-excluded-directories-regexp~ instructs all
    209 Denote functions that read or check file/directory names to omit
    210 directories that match the given regular expression.  The regexp needs
    211 to match only the name of the directory, not its full path.
    212 
    213 Affected operations include file prompts and functions that return the
    214 available files in the ~denote-directory~.  File prompts are used by
    215 several commands, such as ~denote-link~ and ~denote-subdirectory~.
    216 Functions that check for files include ~denote-directory-files~ and
    217 ~denote-directory-subdirectories~.
    218 
    219 Thanks to Graham Marlow for the contribution which was done in pull
    220 request 112 on the GitHub mirror:
    221 <https://github.com/protesilaos/denote/pull/112>.
    222 
    223 The original contribution, with the subsequent tweaks I made to it, is
    224 within the eligible line count and thus does not require copyright
    225 assignment to the Free Software Foundation.
    226 
    227 ** Exclude certain keywords from being inferred
    228 :PROPERTIES:
    229 :CUSTOM_ID: h:226ba85e-1f5e-45f5-956a-f5e8a95c397e
    230 :END:
    231 
    232 The user option ~denote-excluded-keywords-regexp~ omits keywords that
    233 match a regular expression from the list of inferred keywords.
    234 
    235 Keywords are inferred from file names and provided at relevant prompts
    236 as completion candidates when the user option ~denote-infer-keywords~
    237 is non-nil.
    238 
    239 Thanks to Stefan Thesing for proposing this idea in issue 115 on the
    240 GitHub mirror: <https://github.com/protesilaos/denote/issues/115>.
    241 
    242 [ Other people participate in that thread and there may be something
    243   more coming out of it. ]
    244 
    245 ** Use the ~citar-denote~ package for bibliography notes
    246 :PROPERTIES:
    247 :CUSTOM_ID: h:ff16633f-5fb8-4935-9e2f-044ec998d3f7
    248 :END:
    249 
    250 Peter Prevos has produced the ~citar-denote~ package which makes it
    251 possible to write notes on BibTeX entries with the help of the ~citar~
    252 package.  These notes have the citation's unique key associated with
    253 them in the file's front matter.  They also get a configurable keyword
    254 in their file name, making it easy to find them in Dired and/or
    255 retrieve them with the various Denote methods.
    256 
    257 With ~citar-denote~, the user leverages standard minibuffer completion
    258 mechanisms (e.g. with the help of the ~vertico~ and ~embark~ packages)
    259 to manage bibliographic notes and access those notes with ease.  The
    260 package's documentation covers the details: <https://github.com/pprevos/citar-denote/>.
    261 
    262 Thanks to Peter Prevos for developing this package and for mentioning
    263 it on the Denote mailing list:
    264 <https://lists.sr.ht/~protesilaos/denote/%3C877cz0e96r.fsf%40prevos.net%3E>.
    265 
    266 ** New functions and variables for developers
    267 :PROPERTIES:
    268 :CUSTOM_ID: h:5cc2076d-d4d2-45be-b28e-9ec67eca82b4
    269 :END:
    270 
    271 Developers or users who maintain custom code now have access to:
    272 
    273 + Function ~denote-keywords-sort~
    274 + Function ~denote-keywords-prompt~
    275 
    276 Plus all the following which are related to the aforementioned ~denote-file-types~:
    277 
    278 + Variable ~denote-org-link-format~
    279 + Variable ~denote-md-link-format~
    280 + Variable ~denote-id-only-link-format~
    281 + Variable ~denote-org-link-in-context-regexp~
    282 + Variable ~denote-md-link-in-context-regexp~
    283 + Variable ~denote-id-only-link-in-context-regexp~
    284 + Function ~denote-date-org-timestamp~
    285 + Function ~denote-date-rfc3339~
    286 + Function ~denote-date-iso-8601~
    287 
    288 Again, users can implement support for ANY FILE TYPE and use it to
    289 write notes in, either as their default choice or on-demand.  If
    290 anything, this highlights the flexibility of Denote.
    291 
    292 ** Miscellaneous
    293 :PROPERTIES:
    294 :CUSTOM_ID: h:acbb0cf7-ad17-495e-85d2-821cbbfc3158
    295 :END:
    296 
    297 + Added the ~denote-keywords-sort~ function.  The intent is to
    298   abstract the task of sorting the keywords.  Before, it was handled
    299   by the ~denote-keywords-prompt~, which meant that keywords were not
    300   sorted when the ~denote~ function was called from Lisp.  Thanks to
    301   Florian for bringing this matter to my attention, providing relevant
    302   feedback, and fixing an omission of mine in ~denote-rename-file~:
    303   <https://lists.sr.ht/~protesilaos/denote/%3C166689879712.8.6808878344988686135.71824507%40aboulafia.org%3E>.
    304 
    305 + Expanded the manual's entry on directory "silos" to include more
    306   code examples.  Thanks to Viktor Haag for asking a question on the
    307   mailing list that inspired me to produce this entry:
    308   <https://lists.sr.ht/~protesilaos/denote/%3CCANnkwC6NLd0VneUEqFrjh7TCUBLBgEtLCcPwM37JDvJXJCShVQ%40mail.gmail.com%3E>.
    309 
    310 + Included a section in the manual with a non-exhaustive list of
    311   references to publications about Denote.  As of this writing, it
    312   includes entries from David Wilson (SystemCrafters), Jack Baty,
    313   Jeremy Friesen, and Peter Prevos.  If you have an article about
    314   Denote, please contact me about it directly or on the Denote mailing
    315   list and I will add it to the manual.
    316 
    317 + Tweaked how Org's HTML export produces links in order to avoid
    318   broken subdirectory paths.  Thanks to Thibaut Benjamin for the
    319   contribution, which was done in pull request 116 on the GitHub
    320   mirror: <https://github.com/protesilaos/denote/pull/116>.
    321 
    322   The change concerns a single line and thus Thibaut requires no
    323   copyright assignment to the Free Software Foundation.
    324 
    325 + Expanded the manual where necessary.
    326 
    327 * Version 1.1.0 on 2022-10-20
    328 :PROPERTIES:
    329 :CUSTOM_ID: h:8e0f536a-ab3b-4cab-82f7-529bc0e40dbd
    330 :END:
    331 
    332 ** New commands or refinements to common use-cases
    333 :PROPERTIES:
    334 :CUSTOM_ID: h:5665e7ec-4f3a-4de3-8cb0-63d25a0db8c1
    335 :END:
    336 
    337 + The ~denote-link-add-missing-links~ is a companion to what we
    338   already provide to produce a list of links to Denote files matching
    339   a regular expression (the ~denote-link-add-links~).  This new
    340   command adds links that are not already present in the current file.
    341   So if you have a metanote that references, say, your journal entries
    342   but have not updated it in a month, you can revisit the metanote,
    343   invoke ~denote-link-add-missing-links~, and then type the search
    344   terms (e.g. =_journal=) to include what remains.
    345 
    346   Thanks to Elias Storms for the initial contribution, which was done
    347   in pull request 108 on the GitHub mirror:
    348   <https://github.com/protesilaos/denote/pull/108>.
    349 
    350   Elias has assigned copyright to the Free Software Foundation.  It is
    351   required for changes that exceed 15 lines in total.
    352 
    353 + The ~denote-link-find-backlink~ provides a minibuffer interface that
    354   shows all backlinks to the current note.  It complements the
    355   existing ~denote-link-backlinks~ command (which also has the alias
    356   ~denote-link-show-backlinks-buffer~).  Each command has its own
    357   niche: the minibuffer lets the user leverage powerful pattern
    358   matching styles, such as those provided by the =orderless= package,
    359   while the bespoke buffer provides an easy overview of what links to
    360   the current note.
    361 
    362   Thanks to Elias Storms for the original patch:
    363   <https://lists.sr.ht/~protesilaos/denote/%3Cm2fsg6o2t6.fsf%40MBA21.fritz.box%3E#%3Cm2pmfam7yi.fsf@MBA21.fritz.box%3E>.
    364 
    365 + The ~denote-keywords-add~ and ~denote-keywords-remove~ are two
    366   commands that interactively operate on the current note's front
    367   matter to add or remove keywords.  They use the familiar keywords'
    368   prompt which means, among others, that they can read more than one
    369   keyword at a time.  To specify multiple keywords, separate each
    370   input with a comma (or whatever the value of ~crm-separator~ is,
    371   which should be a comma unless something out-of-the-ordinary is in
    372   force).
    373 
    374   Thanks to Elias Storms for the original patch, which was done as
    375   part of a discussion on the mailing list and then iterated on:
    376   <https://lists.sr.ht/~protesilaos/denote/%3Cm24jwvpbt2.fsf%40MBA21.fritz.box%3E#%3Cm28rlik0tc.fsf@MBA21.fritz.box%3E>.
    377 
    378 + The ~denote-link~ command will now recognise an active region and
    379   use its text as the description of the inserted link.  The default
    380   behaviour is to use the file's title from its front matter or file
    381   name.  Thanks to Charanjit Singh for the original contribution,
    382   which was done as part of pull request 109 on the GitHub mirror:
    383   <https://github.com/protesilaos/denote/pull/109>.  A subsequent
    384   tweak was implemented in pull request 110, following a discussion
    385   with me: <https://github.com/protesilaos/denote/pull/110>.
    386 
    387   Charanjit's contribution is below the ~15 line threshold and thus
    388   does not require copyright assignment to the Free Software
    389   Foundation.
    390 
    391 + The renaming operations are now aware of the underlying version
    392   control system and will use the appropriate command when a VCS is
    393   available.  In practice, renaming a file under, say, Git will
    394   register it as a "rename" instead of two separate actions of
    395   deletion and addition.
    396 
    397   Thanks to Florian for the patch.  It was discussed on the mailing
    398   list and then underwent some changes:
    399   <https://lists.sr.ht/~protesilaos/denote/%3C166547153518.8.941129310186454444.68125516@aboulafia.org%3E>.
    400 
    401 + The ~denote-rename-file-using-front-matter~ no longer fails to carry
    402   out its intended task when the front matter has no keywords.  If no
    403   keywords are available, this is interpreted as a request to remove
    404   the KEYWORDS component of the file name.  This was always
    405   technically possible and could be achieved with various permutations
    406   of the user option ~denote-prompts~ (as explained in its doc string
    407   or the manual).  Denote only needs an identifier in the file name to
    408   establish unique links (although I strongly encourage you to stick
    409   to the standard file-naming scheme as it is informative, reliable,
    410   and can work even if you access your data without Emacs).
    411 
    412 ** For more advanced use-cases
    413 :PROPERTIES:
    414 :CUSTOM_ID: h:505c84dd-2959-4bd4-8af4-78d75592a6d5
    415 :END:
    416 
    417 + The variable ~denote-file-types~ has been tweaked to respond
    418   directly to changes in its value done with ~setq~.  Thanks to Noboru
    419   Ota for the patch: <https://lists.sr.ht/~protesilaos/denote/%3C86k05gsqsg.fsf%40nobiot.com%3E>.
    420 
    421   Noboru has assigned copyright to the Free Software Foundation.
    422 
    423 + The =:front-matter= property of the ~denote-file-types~ now accepts
    424   a nil value.  Denote could always work without front matter, but
    425   this was not implemented flexibly in the ~denote-file-types~.
    426   Thanks to Noboru Ota (nobiot) for pointing this out on the mailing
    427   list: <https://lists.sr.ht/~protesilaos/denote/%3C86k05gsqsg.fsf%40nobiot.com%3E>.
    428 
    429 + The ~denote-file-prompt~ function now reads an optional
    430   =INITIAL-TEXT= argument.  This is a string that prepopulates the
    431   minibuffer.  It is useful for custom commands the user may have
    432   where, for example, there is a need to automatically filter to
    433   entries matching =_journal=.  Thanks to Alan Schmitt for suggesting
    434   the idea: <https://lists.sr.ht/~protesilaos/denote/%3C87pmf676n1.fsf@m4x.org%3E>.
    435 
    436 + The ~denote-rename-file-using-front-matter~ accepts an optional
    437   =AUTO-CONFIRM= argument.  It can either be passed interactively or
    438   via Lisp.  The doc string (or the manual) explains the details.
    439   Thanks to Elias Storms for the initial patch:
    440   <https://lists.sr.ht/~protesilaos/denote/%3Cm2a667aeku.fsf%40gmail.com%3E>.
    441 
    442 + The ~denote-prompt-for-date-return-id~ function uses the familiar
    443   ~denote-date-prompt~ and returns the appropriate identifier.  It is
    444   used internally by some of our function, but we also provide it for
    445   anyone who wants to write their own custom code.
    446 
    447 + The ~denote-retrieve-or-create-file-identifier~ function reads and
    448   option =DATE= argument to its mandatory =FILE= argument.  If =FILE=
    449   does not have an identifier and optional =DATE= is non-nil, the
    450   function invokes the ~denote-prompt-for-date-return-id~, as
    451   mentioned above.
    452 
    453 + The ~denote-rename-file~ command accepts an optional =DATE=
    454   argument.  It functionally does what is described right above, with
    455   the exception that this is for an interactive function (a
    456   "command").  Read the detailed doc string or the manual for
    457   everything that pertains to this powerful command.
    458 
    459   Thanks to Florian for suggesting the idea on the mailing list:
    460   <https://lists.sr.ht/~protesilaos/denote/%3C166521684647.7.5483179875879361874.67576870%40aboulafia.org%3E>.
    461 
    462 + The ~denote-directory-text-only-files~ function filters the
    463   ~denote-directory-files~ to only return a list of text files.  This
    464   leaves out, say, mp3 files.  The function is used internally, though
    465   it may also prove useful in custom user code.
    466 
    467 ** Miscellaneous refinements
    468 :PROPERTIES:
    469 :CUSTOM_ID: h:0531047f-ef15-412e-b265-886c55526d57
    470 :END:
    471 
    472 + Implemented a ~revert-buffer-function~ for the backlinks' buffer,
    473   which is produced by the command ~denote-link-backlinks~.  This
    474   revert function is what the =g= key invokes with the default key
    475   bindings (the command is ~revert-buffer~).  It produces the buffer
    476   anew, updating the list of backlinks accordingly.
    477 
    478 + Documented how to speed up the creation of the backlinks' buffer.
    479   As this depends on the built-in =xref= library, the change is done
    480   by specifying the value of the user option ~xref-search-program~ in
    481   Emacs 28 or higher.  For example:
    482 
    483   #+begin_src emacs-lisp
    484   (setq xref-search-program 'ripgrep)
    485   #+end_src
    486 
    487   For something more elaborate:
    488 
    489   #+begin_src emacs-lisp
    490   ;; Prefer ripgrep, then ugrep, and fall back to regular grep.
    491   (setq xref-search-program
    492         (cond
    493          ((or (executable-find "ripgrep")
    494               (executable-find "rg"))
    495           'ripgrep)
    496          ((executable-find "ugrep")
    497           'ugrep)
    498          (t
    499           'grep)))
    500   #+end_src
    501 
    502 + Removed some minor duplication of effort in how the buttonisation of
    503   links is done (what makes them clickable).
    504 
    505 + Made refinements to the definition of functions such as
    506   ~denote-link-add-links~.  There should be no noticeable change for
    507   users, though this shows we care about code quality.
    508 
    509 + With Eshel Yaron, we tried to remove the empty indices for functions
    510   and variables from the HTML version of the manual.  These indices
    511   are useful in the Info version, which can be accessed directly from
    512   Emacs when the =denote= package is installed (for example, evaluate
    513   =(info "(denote) Top")=), but they do not work with HTML.  Alas,
    514   what we tried to do did not work.  Maybe Org has a way to control
    515   what is exported where.  We shall see.  At any rate, thanks to Eshel
    516   for the effort: <https://lists.sr.ht/~protesilaos/denote/patches/36028>.
    517 
    518 + All code that integrates the =denote:= custom hyperlink type with
    519   Org's link facility is now assigned =autoload= cookies.  These are
    520   done to ensure that =denote= is loaded and is available in cases
    521   where Org needs to access a =denote:= link at some early stage
    522   (e.g. at startup before using Denote).  Thanks to Sven Seebeck for
    523   reporting the problem: <https://lists.sr.ht/~protesilaos/denote/%3C87r0zovwix.fsf%40svenseebeck.me%3E>.
    524   Although Sven could not reproduce a bug reliably, I believe this
    525   prevents such an eventuality.
    526 
    527 + Expanded or otherwise updated the manual to account for all of the
    528   above, where appropriate.
    529 
    530 * Version 1.0.0 on 2022-09-30
    531 :PROPERTIES:
    532 :CUSTOM_ID: h:053975d7-3fe2-49e5-96a0-336483e5861c
    533 :END:
    534 
    535 This is the first major release of Denote.  A part of the changes
    536 documented herein is for advanced users or developers who wish to
    537 extend Denote with their custom code.  Though we first cover what
    538 applies to everyone.
    539 
    540 ** Changes for all users
    541 :PROPERTIES:
    542 :CUSTOM_ID: h:25692d4f-08da-4938-a81e-54070d91f51a
    543 :END:
    544 
    545 + The custom Org hyperlink type of =denote:= can be visited from
    546   outside the ~denote-directory~.  We now provide the necessary glue
    547   code that Org needs to store these =denote:= links.  Storing them
    548   can be done with an ~org-capture~ template or via the command
    549   ~org-store-link~.  Use this to, for example, capture a TODO that
    550   references one of your notes.
    551 
    552   =denote:= links work for as long as the referenced file is somewhere
    553   in the ~denote-directory~ or one of its subdirectories.
    554 
    555   Thanks to Marc Fargas for the contribution.  Marc did not need to
    556   assign copyright to the Free Software Foundation, as the patch was
    557   within the ~15 line limit that is permissible.
    558 
    559   The contribution was discussed on the mailing list:
    560   <https://lists.sr.ht/~protesilaos/denote/patches/35137>.  A prior
    561   exchange took place in issue 104 over at the GitHub mirror:
    562   <https://github.com/protesilaos/denote/issues/104>.
    563 
    564   Some further tweaks were made to the relevant function.  Thanks to
    565   Elias Storms for reporting on the mailing list a bug which revealed
    566   a regression I introduced to the Org link storing mechanism:
    567   <https://lists.sr.ht/~protesilaos/denote/%3C15D55F4B-64D1-4083-AD5E-B5BACA8F1909%40ap.be%3E>.
    568 
    569 + Following from above, the command ~denote-link-find-file~ finds
    570   files reliably, regardless of where the link is stored.  All it
    571   needs is for the target file to be inside the ~denote-directory~.
    572 
    573   I discovered this while exchanging views with Marc Fargas regarding
    574   the aforementioned patch: <https://lists.sr.ht/~protesilaos/denote/patches/35137>.
    575 
    576 + The command ~denote-link-buttonize-buffer~, which "buttonizes"
    577   =denote:= links in plain text and Markdown files, now performs its
    578   task regardless of where the current file is stored.  Those links
    579   work for as long as the file they reference is somewhere inside the
    580   ~denote-directory~.
    581 
    582 + The commands ~denote-link-after-creating~, ~denote-link-or-create~
    583   provide a convenience for users who need to create link to notes
    584   that may not exist yet.  The idea is that one is expounding on a
    585   given topic and wants to create a link to a relevant issue.  They
    586   are not sure if they have written anything about it yet, so they
    587   invoke the relevant command.  Consult their doc strings or read the
    588   manual: <https://protesilaos.com/emacs/denote#h:9e41e7df-2aac-4835-94c5-659b6111e6de>.
    589 
    590   Thanks to user sienic for suggesting the idea and for testing the
    591   prototypes.  And thanks to Juanjo Presa for participating in the
    592   discussion to share the view that this functionality should be part of
    593   denote.el.  This happened in issue 96 over at the GitHub mirror:
    594   <https://github.com/protesilaos/denote/issues/96>.
    595 
    596 + The command ~denote-open-or-create~ offers the convenience of
    597   visiting a file, if it exists, else prompting for its creation.
    598   Thanks to Alan Schmitt for the contribution.  The patch was sent on
    599   the mailing list: <https://lists.sr.ht/~protesilaos/denote/%3C87fsgvddny.fsf%40protesilaos.com%3E>.
    600   It is within the limit of what is allowed without assigning
    601   copyright to the Free Software Foundation, though Alan has done the
    602   relevant paperwork.
    603 
    604 + The manual expands on two sections: (1) Variants of
    605   ~denote-open-or-create~, (2) Variants of ~denote-link-or-create~.
    606   They show how one can use the above "do or create" commands with
    607   different permutations of the Denote prompts for new note creation.
    608 
    609 + The manual includes a section titled "Create a note with the
    610   region's contents".  Quote:
    611 
    612   #+begin_quote
    613   Sometimes it makes sense to gather notes in a single file and later
    614   review it to make multiple notes out of it.  With the following
    615   code, the user marks a region and then invokes the command
    616   ~my-denote-create-new-note-from-region~: it prompts for a title and
    617   keywords and then uses the region's contents to fill in the newly
    618   created note.
    619   #+end_quote
    620 
    621   This is not part of denote.el, though we provide it in the manual
    622   for users that may need it.  Thanks to sundar bp for suggesting the
    623   idea.  This was done via a private channel and the information is
    624   shared with permission.
    625 
    626 + The manual has another entry titled "Split an Org subtree into its
    627   own note", which is similar to the above idea of using the region's
    628   contents but has some extra niceties provided by Org.  Quote:
    629 
    630   #+begin_quote
    631   With Org files in particular, it is common to have nested headings which
    632   could be split off into their own standalone notes.  In Org parlance an
    633   entry with all its subheadings is a "subtree".  With the following code,
    634   the user places the point inside the heading they want to split off and
    635   invokes the command ~my-denote-split-org-subtree~.  It will create a
    636   note using the heading's text and tags for the new file.  The contents
    637   of the subtree become the contents of the new note and are removed from
    638   the old one.
    639   #+end_quote
    640 
    641   Thanks to Sven Seebeck for suggesting the idea and for testing my
    642   prototypes.  This information is shared with permission, as it was
    643   provided via a private channel.
    644 
    645 + The manual describes how a user can leverage the built-in
    646   ~dired-virtual-mode~ to perform arbitrary sorting of their list of
    647   notes.  It also includes code for Eshell to quickly "export" a
    648   command's output into a dedicated buffer (which can then be used to
    649   derive a "virtual" Dired).  Thanks to Yi Liu for asking the question
    650   that inspired this entry:
    651   <https://lists.sr.ht/~protesilaos/denote/%3C1C75FF01-EC76-49DF-9AEB-ED718A2795FF@gmail.com%3E>.
    652 
    653 + The ~denote-faces-broken-link~ has been removed.  It was used for
    654   Org links.  The idea was to apply a different style if the link was
    655   broken.  However, the way fontification works means that there may
    656   be a performance penalty as Org tries to check again and again if
    657   the link is broken or note.  As =denote:= links are robust (unless
    658   the user tries to break them), this penalty is unacceptable.  Thanks
    659   to Peter Prevos for reporting the issue and discussing it with me on
    660   the mailing list:
    661   <https://lists.sr.ht/~protesilaos/denote/%3C87k05umyyo.fsf%40prevos.net%3E>.
    662 
    663 + The "denote" group in Custom UI buffers now provides a link to the
    664   Info manual that is shipped with the package.  To read the manual,
    665   evaluate =(info "(denote) Top")=.  Else visit the official web page:
    666   <https://protesilaos.com/emacs/denote>.
    667 
    668 + Fixed a case where an internal check for a note would throw an error
    669   if the buffer was not visiting a file.  Thanks to Hilde Rhyne was
    670   the patch: it is below the ~15 line threshold and thus does not
    671   require copyright assignment to the Free Software Foundation.  The
    672   issue was discussed on the mailing list and was pushed to users as
    673   version =0.6.1=:
    674   <https://lists.sr.ht/~protesilaos/denote/%3Cm035d7nq22.fsf%40disroot.org%3E>.
    675 
    676 + When linking to a file that has no front matter, Denote tries to use
    677   the TITLE component of the file name (per our file-naming scheme) as
    678   the link's descriptive text.  We now make this look a bit better, by
    679   capitalising only the first letter while dehyphenating the text,
    680   converting =this-is-a-test= to =This is a test=.  Before, we would
    681   capitalise all words.  Thanks to Clemens Radermacher for the patch.
    682   It was sent via a private channel.  Clemens has assigned copyright
    683   to the Free Software Foundation.
    684 
    685 ** Changes for developers or advanced users
    686 :PROPERTIES:
    687 :CUSTOM_ID: h:165cd056-5e27-4536-b8ac-57f88c927a43
    688 :END:
    689 
    690 Lots of functions and variables which once were for "private" use (the
    691 presence of double hyphens in the symbol) are now made public.
    692 Concretely this means that they no longer have double hyphens in their
    693 name and we pledge to support them henceforth.  "Support" means that
    694 we (i) consider them stable, (ii) document them properly, (iii) will
    695 record any changes made to them such as in a change log, a blog post
    696 on my website, and via ~make-obsolete~.
    697 
    698 The manual provides a complete reference of what is on offer.  The
    699 section is titled "For developers or advanced users":
    700 <https://protesilaos.com/emacs/denote#h:c916d8c5-540a-409f-b780-6ccbd90e088e>.
    701 
    702 Normally, we do not support private forms and can delete/modify them
    703 without notice.  However, I decided to write obsoletion aliases for
    704 all forms I made public or otherwise revised, in an effort not to
    705 break any existing custom code.  The following table covers all
    706 obsolete symbols and their new counterparts.  PLEASE UPDATE YOUR CODE
    707 as those aliases will be removed in the near future.
    708 
    709 | Index | Old symbol                                     | New symbol                                        |
    710 |-------+------------------------------------------------+---------------------------------------------------|
    711 |     1 | denote--id-format                              | denote-id-format                                  |
    712 |     2 | denote--id-regexp                              | denote-id-regexp                                  |
    713 |     3 | denote--title-regexp                           | denote-title-regexp                               |
    714 |     4 | denote--keywords-regexp                        | denote-keywords-regexp                            |
    715 |     5 | denote--punctuation-regexp                     | denote-excluded-punctuation-regexp                |
    716 |     6 | denote-punctuation-excluded-extra-regexp       | denote-excluded-punctuation-extra-regexp          |
    717 |     7 | denote--sluggify                               | denote-sluggify                                   |
    718 |     8 | denote--sluggify-and-join                      | denote-sluggify-and-join                          |
    719 |     9 | denote--sluggify-keywords                      | denote-sluggify-keywords                          |
    720 |    10 | denote--desluggify                             | denote-desluggify                                 |
    721 |    11 | denote--only-note-p                            | denote-file-is-note-p                             |
    722 |    12 | denote--file-has-identifier-p                  | denote-file-has-identifier-p                      |
    723 |    13 | denote--file-supported-extension-p             | denote-file-has-supported-extension-p             |
    724 |    14 | denote--writable-and-supported-p               | denote-file-is-writable-and-supported-p           |
    725 |    15 | denote--file-name-relative-to-denote-directory | denote-get-file-name-relative-to-denote-directory |
    726 |    16 | denote-link--id-from-string                    | denote-extract-id-from-string                     |
    727 |    17 | denote--directory-files                        | denote-directory-files                            |
    728 |    18 | denote--subdirs                                | denote-directory-subdirectories                   |
    729 |    19 | denote--get-note-path-by-id                    | denote-get-path-by-id                             |
    730 |    20 | denote--directory-files-matching-regexp        | denote-directory-files-matching-regexp            |
    731 |    21 | denote--retrieve-read-file-prompt              | denote-file-prompt                                |
    732 |    22 | denote--extract-keywords-from-path             | denote-extract-keywords-from-path                 |
    733 |    23 | denote--keywords-prompt                        | denote-keywords-prompt                            |
    734 |    24 | denote--retrieve-filename-identifier           | denote-retrieve-filename-identifier               |
    735 |    25 | denote--file-name-id                           | denote-retrieve-or-create-file-identifier         |
    736 |    26 | denote--retrieve-filename-title                | denote-retrieve-filename-title                    |
    737 |    27 | denote--retrieve-title-value                   | denote-retrieve-title-value                       |
    738 |    28 | denote--retrieve-title-line                    | denote-retrieve-title-line                        |
    739 |    29 | denote--retrieve-keywords-value                | denote-retrieve-keywords-value                    |
    740 |    30 | denote--retrieve-keywords-line                 | denote-retrieve-keywords-line                     |
    741 |    31 | denote--format-file                            | denote-format-file-name                           |
    742 |    32 | denote--barf-duplicate-id                      | denote-barf-duplicate-id                          |
    743 |    33 | denote--title-prompt                           | denote-title-prompt                               |
    744 |    34 | denote--file-type-prompt                       | denote-file-type-prompt                           |
    745 |    35 | denote--date-prompt                            | denote-date-prompt                                |
    746 |    36 | denote--subdirs-prompt                         | denote-subdirectory-prompt                        |
    747 |    37 | denote--template-prompt                        | denote-template-prompt                            |
    748 |    38 | denote--filetype-heuristics                    | denote-filetype-heuristics                        |
    749 |    39 | denote--rename-file                            | denote-rename-file-and-buffer                     |
    750 |    40 | denote--rename-file-prompt                     | denote-rename-file-prompt                         |
    751 
    752 If you are writing code that extends Denote and feel that something is
    753 either missing or has remained private, please contact us on the
    754 mailing list, the GitHub/GitLab mirror, or send me an email directly.
    755 I always respond in a timely fashion.
    756 
    757 ** Open to everyone
    758 :PROPERTIES:
    759 :CUSTOM_ID: h:27a391cf-8d5e-4d19-942f-46fc52dea80c
    760 :END:
    761 
    762 The most common feedback I get about Denote is that its documentation
    763 is good.  As you can tell from these change logs, the plan is to
    764 continue on this path.
    765 
    766 Please note that the communication channels for Denote (mailing list,
    767 mirrors, my personal email) are open to users of all levels.  Do not
    768 hesitate to contact us/me.
    769 
    770 Thanks again to everyone for their contributions, direct or indirect,
    771 either in the form of code or the discussion of ideas.  Quoting from
    772 the "Acknowledgements" section of the manual (all my packages have
    773 such a section):
    774 
    775 #+begin_quote
    776 Denote is meant to be a collective effort.  Every bit of help matters.
    777 
    778 + Author/maintainer :: Protesilaos Stavrou.
    779 
    780 + Contributions to code or the manual :: Abin Simon, Alan Schmitt,
    781   Benjamin Kästner, Clemens Radermacher, Colin McLear, Damien Cassou,
    782   Eshel Yaron, Hilde Rhyne, Jack Baty, Jean-Philippe Gagné Guay, Jürgen
    783   Hötzel, Kaushal Modi, Kyle Meyer, Marc Fargas, Peter Prevos, Philip
    784   Kaludercic, Quiliro Ordóñez, Stefan Monnier.
    785 
    786 + Ideas and/or user feedback :: Abin Simon, Alan Schmitt, Alfredo
    787   Borrás, Benjamin Kästner, Colin McLear, Damien Cassou, Elias Storms,
    788   Frank Ehmsen, Hanspeter Gisler, Jack Baty, Juanjo Presa, Kaushal
    789   Modi, M. Hadi Timachi, Paul van Gelder, Peter Prevos, Shreyas
    790   Ragavan, Summer Emacs, Sven Seebeck, Taoufik, Yi Liu, Ypot, atanasj,
    791   hpgisler, pRot0ta1p, sienic, sundar bp.
    792 
    793 Special thanks to Peter Povinec who helped refine the file-naming
    794 scheme, which is the cornerstone of this project.
    795 
    796 Special thanks to Jean-Philippe Gagné Guay for the numerous
    797 contributions to the code base.
    798 #+end_quote
    799 
    800 * Version 0.6.0 on 2022-08-31
    801 :PROPERTIES:
    802 :CUSTOM_ID: h:50aba79a-d702-42b4-a2a5-7fa29033f904
    803 :END:
    804 
    805 Denote is in a stable state.  I consider it feature-complete, without
    806 prejudice to possible refinements to its existing feature set.  The next
    807 version shall be =1.0.0=.
    808 
    809 ** User-facing changes
    810 :PROPERTIES:
    811 :CUSTOM_ID: h:566a770b-399e-47a6-9aa4-326fd6ade9a7
    812 :END:
    813 
    814 + The Denote linking facility can now link to any file that has the
    815   Denote file-naming scheme.  Before, we limited this feature to what we
    816   consider "note" files, else the supported plain text formats (per
    817   ~denote-file-type~).  Thanks to Peter Prevos for the discussion on the
    818   mailing list: <https://lists.sr.ht/~protesilaos/denote/%3C87fsi1m5ze.fsf%40prevos.net%3E>.
    819 
    820 + Date prompts may optionally use the familiar Org date-selection
    821   mechanism that leverages the calendar.  This feature is subject to the
    822   user option ~denote-date-prompt-use-org-read-date~.  A date prompt is
    823   used by the ~denote-date~ command or, optionally, by the ~denote~
    824   command when the user option ~denote-prompts~ is configured
    825   accordingly.  The manual elaborates on the specificities.  Thanks to
    826   Jean-Philippe Gagné Guay for the contribution in pull request 97 at
    827   the GitHub mirror: <https://github.com/protesilaos/denote/pull/97>.
    828 
    829 + Leading empty spaces at the ~denote~ =TITLE= prompt no longer produce
    830   hyphens: they are simply ignored to keep file names consistent.
    831   Thanks to Peter Prevos for the contribution in pull request 99 at the
    832   GitHub mirror: <https://github.com/protesilaos/denote/pull/99>.
    833 
    834   [ Peter has started the process for copyright assignment to the Free
    835     Software Foundation, though the total contributions are still within
    836     the permitted boundaries. ]
    837 
    838 + When linking to files that have no front matter, the link's anchor
    839   text (the human-readable part) is derived from the file name =TITLE=
    840   component.  We apply a de-hyphenation and capitalisation of its
    841   constituent words.  This is not always perfect, but it is better than
    842   something like =this-is-the-title=.  Thanks to Peter Prevos for the
    843   original idea in pull request 93 at the GitHub mirror:
    844   <https://github.com/protesilaos/denote/pull/93>.
    845 
    846 + The active region is now used as the default value of the ~denote~
    847   command =TITLE= prompt.  The idea behind this Do-What-I-Mean-flavoured
    848   patch is to be able to take a note about a subject that appears in a
    849   buffer by simply marking it before invoking the ~denote~ command.
    850 
    851   Thanks to Eshel Yaron for the patch: <https://lists.sr.ht/~protesilaos/denote/patches/34870>.
    852   It is below the ~15 line threshold that thus requires no copyright
    853   assignment to the Free Software Foundation.
    854 
    855 + The ~denote-rename-file-using-front-matter~ command now offers to save
    856   the buffer if appropriate.  In the past, it would simply produce an
    857   error asking the user to save the buffer.  Thanks to Peter Prevos for
    858   the contribution in pull request 103 at he GitHub mirror:
    859   <https://github.com/protesilaos/denote/pull/103>.
    860 
    861 + Fixed the text of the confirmation prompt in the command
    862   ~denote-migrate-old-markdown-yaml-tags~.  Thanks to Abin Simon for the
    863   patch: <https://lists.sr.ht/~protesilaos/denote/patches/34632>.
    864 
    865   This patchset also fixes (i) how a tag is identified for the purposes
    866   of migrating old to new front matter, (ii) the regular expression for
    867   Org front matter keywords
    868 
    869   [ The total changes are below the ~15 line threshold and thus do not
    870     require copyright assignment to the Free Software Foundation. ]
    871 
    872 + Fixed a bug that prevented the creation of new notes.  Thanks to
    873   Juergen Hoetzel for the contribution in pull request 84 at the GitHub
    874   mirror: <https://github.com/protesilaos/denote/pull/84>.  This was
    875   done immediately after the release of version =0.5.0= on 2022-08-10
    876   and was provided to users as version =0.5.1=
    877 
    878   [ The change is below the ~15 line threshold. ]
    879 
    880 ** Internal refinements
    881 :PROPERTIES:
    882 :CUSTOM_ID: h:9374b533-faaa-4ab4-b668-f74b5eae7ab5
    883 :END:
    884 
    885 These make the code simpler and more predictable.  As the individual
    886 changes are not user-facing, I invite interested parties to consult the
    887 Git log.  Special thanks to Jean-Philippe Gagné Guay for the multiple
    888 contributions (and relevant discussions) over at the GitHub mirror:
    889 
    890 - <https://github.com/protesilaos/denote/pull/88>
    891 - <https://github.com/protesilaos/denote/pull/89>
    892 - <https://github.com/protesilaos/denote/pull/91>
    893 - <https://github.com/protesilaos/denote/pull/94>
    894 - <https://github.com/protesilaos/denote/pull/101>
    895 - <https://github.com/protesilaos/denote/pull/102>
    896 
    897 [ Jean-Philippe has assigned copyright to the Free Software Foundation.
    898   It is required for non-trivial changes. ]
    899 
    900 ** For advanced users
    901 :PROPERTIES:
    902 :CUSTOM_ID: h:c6fc05a2-ff31-4a0c-91a1-f64d2cfd6a16
    903 :END:
    904 
    905 The variable ~denote-file-types~ is an alist of plists which
    906 substantiates the supported file types (per the user option
    907 ~denote-file-type~).  Properties pertain to the formatting of front
    908 matter and the retrieval of relevant values.  The doc string of
    909 ~denote-file-types~ explains the details, while the default value uses
    910 the ancillary functions we define.  Thanks to Jean-Philippe Gagné Guay
    911 for the relevant contributions in pull request 89 at the GitHub mirror:
    912 <https://github.com/protesilaos/denote/pull/89>.
    913 
    914 
    915 * Version 0.5.0 on 2022-08-10
    916 :PROPERTIES:
    917 :CUSTOM_ID: h:80b9daaa-c3c8-4457-b109-966bb6a99832
    918 :END:
    919 
    920 The general theme of this release is to refine what we already offer.
    921 As I explained in some discussions, Denote is feature-complete.  We can
    922 always improve the code or add some ancillary function/command/variable,
    923 though all the main ideas have already been implemented.  Additional
    924 functionality can be provided by other packages: I remain at the
    925 disposal of anyone willing to write such a package.
    926 
    927 The present release covers more than 150 commits since version 0.4.0 on
    928 2022-07-25.
    929 
    930 All release notes: <https://protesilaos.com/emacs/denote-changelog>.
    931 
    932 ** Templates for new notes
    933 :PROPERTIES:
    934 :CUSTOM_ID: h:0878125f-8392-48e6-aeff-1469eb1e18fc
    935 :END:
    936 
    937 We now provide the ~denote-templates~ user option.  A "template" is
    938 arbitrary text that Denote will add to a newly created note right below
    939 the front matter.
    940 
    941 Templates are expressed as a =(KEY . STRING)= association.
    942 
    943 - The =KEY= is the name which identifies the template.  It is an
    944   arbitrary symbol, such as =report=, =memo=, =statement=.
    945 
    946 - The =STRING= is ordinary text that Denote will insert as-is.  It can
    947   contain newline characters to add spacing.  The manual of Denote
    948   contains examples on how to use the ~concat~ function, beside writing
    949   a generic string:
    950   <https://protesilaos.com/emacs/denote#h:f635a490-d29e-4608-9372-7bd13b34d56c>.
    951 
    952 The user can choose a template either by invoking the new command
    953 ~denote-template~ or by changing the user option ~denote-prompts~ to
    954 always prompt for a template when calling the ~denote~ command.
    955 
    956 Thanks to Jean-Philippe Gagné Guay for refinements to this facility.
    957 Done in pull request 77 on the GitHub mirror:
    958 <https://github.com/protesilaos/denote/pull/77>.
    959 
    960 [ Jean-Philippe has assigned copyright to the Free Software Foundation. ]
    961 
    962 ** Revised format for Org =#+filetags= entry
    963 :PROPERTIES:
    964 :CUSTOM_ID: h:17688b79-cb1b-4a59-831e-fbf2a81245d3
    965 :END:
    966 
    967 Denote used to format tags in Org files by separating them with two
    968 spaces:
    969 
    970 #+begin_example
    971 #+filetags:  tag1  tag2
    972 #+end_example
    973 
    974 While this worked for some obvious use-cases, it is not supported by
    975 Org.  The Org documentation stipulates that tags be separated by the
    976 colon sign.  The above would then be written thus:
    977 
    978 #+begin_example
    979 #+filetags:  :tag1:tag2:
    980 #+end_example
    981 
    982 Denote now conforms with Org's specifications.  To help users update
    983 their existing notes, we provide the ~denote-migrate-old-org-filetags~
    984 command.  It will perform the conversion in all Org files that had the
    985 old notation.  As with all Denote operations that rewrite file contents,
    986 it DOES NOT SAVE BUFFERS.  The user is expected to review the changes,
    987 such as by using ~diff-buffer-with-file~.  Multiple buffers can be saved
    988 with ~save-some-buffers~ (check its doc string).
    989 
    990 This command is provided for the convenience of the user.  It shall be
    991 deprecated and eventually removed from future versions of Denote.
    992 
    993 If you need help with any of this, please do not hesitate to contact me
    994 either in private or in one of Denote's official channels (mailing list,
    995 GitHub/GitLab mirror).
    996 
    997 Thanks to Alan Schmitt for bringing this matter to my attention:
    998 <https://lists.sr.ht/~protesilaos/denote/%3C871qu0jw5l.fsf%40protesilaos.com%3E>.
    999 Also thanks to Jean-Philippe Gagné Guay for commenting on it as it
   1000 helped me decide to include the command in =denote.el=:
   1001 <https://github.com/protesilaos/denote/pull/83#issuecomment-1210167133>.
   1002 
   1003 ** Revised format for Markdown+YAML =tags:= entry
   1004 :PROPERTIES:
   1005 :CUSTOM_ID: h:205a09cf-0159-425e-a6b3-41700fa3ad31
   1006 :END:
   1007 
   1008 This is the same idea as above.  Before, we were making the mistake of
   1009 using incorrect YAML notation:
   1010 
   1011 #+begin_src yaml
   1012 tags:  tag1  tag2
   1013 #+end_src
   1014 
   1015 Now we do:
   1016 
   1017 #+begin_src yaml
   1018 tags:  ["tag1", "tag2"]
   1019 #+end_src
   1020 
   1021 This is how the TOML variant always worked.
   1022 
   1023 For the user's convenience, we provide a command to migrate from the old
   1024 to the new syntax: ~denote-migrate-old-markdown-yaml-tags~.
   1025 
   1026 ** Changes to file renaming and front matter rewriting
   1027 :PROPERTIES:
   1028 :CUSTOM_ID: h:15ecb4e8-d1ce-4e42-b74d-a3a046d93220
   1029 :END:
   1030 
   1031 Denote adds "front matter" to newly created notes which includes data
   1032 such as the title and keywords/tags of the document.  Strictly speaking,
   1033 the front matter is not required by Denote.  It is provided for the
   1034 user's convenience, such as for readability or if they want to use the
   1035 note with other programs (e.g. Org export, a blog with Hugo/Jekyll,
   1036 ...).
   1037 
   1038 Denote provides commands which help the user rename their notes, by
   1039 changing the file name's =TITLE= and/or =KEYWORDS= components (per
   1040 Denote's file-naming scheme).  These commands also operate on the front
   1041 matter to keep the data between file name and file contents in sync
   1042 (again, for the user's convenience).
   1043 
   1044 For this release we have consolidated and refined our offerings in order
   1045 to improve their ergonomics.  All changes are the result of fruitful
   1046 discussions on the mailing list and the issue tracker of the GitHub
   1047 mirror:
   1048 
   1049 - <https://lists.sr.ht/~protesilaos/denote/%3C87k081l6vw.fsf%40silverstone.mail-host-address-is-not-set%3E>
   1050 - <https://lists.sr.ht/~protesilaos/denote/%3C878rogw5kk.fsf%40protesilaos.com%3E>
   1051 - <https://lists.sr.ht/~protesilaos/denote/%3C87fsiljv1s.fsf%40hu.mail-host-address-is-not-set%3E>
   1052 - <https://lists.sr.ht/~protesilaos/denote/%3C87r122afe3.fsf%40hu.mail-host-address-is-not-set%3E>
   1053 - <https://github.com/protesilaos/denote/issues/74>
   1054 
   1055 Thanks to (A-Z) Hanspeter Gisler, Jean-Philippe Gagné Guay, and Peter
   1056 Prevos for their participation.
   1057 
   1058 Also thanks to Jean-Philippe Gagné Guay for relevant code contributions
   1059 (please consult the Git log for the minutiae):
   1060 
   1061 - <https://github.com/protesilaos/denote/pull/66>
   1062 - <https://github.com/protesilaos/denote/pull/67>
   1063 - <https://github.com/protesilaos/denote/pull/69>
   1064 - <https://github.com/protesilaos/denote/pull/75>
   1065 - <https://github.com/protesilaos/denote/pull/76>
   1066 
   1067 *** Renaming a single file
   1068 :PROPERTIES:
   1069 :CUSTOM_ID: h:1d695e54-1481-42dd-916b-c0542c48aa6f
   1070 :END:
   1071 
   1072 The commands ~denote-dired-rename-file-and-add-front-matter~ and
   1073 ~denote-dired-rename-file~ are deprecated and superseded by the new
   1074 ~denote-rename-file~.  Please update any key bindings in your setup.
   1075 
   1076 The difference between the old commands and the new ~denote-rename-file~
   1077 is that the latter will now insert front matter to supported file types
   1078 (per ~denote-file-type~) if they have none.  This basically means that,
   1079 e.g., renaming a generic Org/Markdown/Plain text file with
   1080 ~denote-rename-file~ will update its file name to comply with Denote's
   1081 file-naming scheme and also add the appropriate front matter (it
   1082 "converts" it to a Denote note).  If front matter exists, this command
   1083 will rewrite it to reflect the changes to the file name's =TITLE= and/or
   1084 =KEYWORDS=.
   1085 
   1086 Consult the manual for the details:
   1087 <https://protesilaos.com/emacs/denote#h:7cc9e000-806a-48da-945c-711bbc7426b0>.
   1088 
   1089 Or, if the new version of the GNU ELPA package is installed, evaluate:
   1090 
   1091 #+begin_src emacs-lisp
   1092 (info "(denote) Rename a single file")
   1093 #+end_src
   1094 
   1095 The user option ~denote-dired-rename-expert~ is obsolete.  Denote always
   1096 asks for confirmation when renaming a single file.  This is because the
   1097 user can rely on batch-renaming commands which ask for confirmation only
   1098 once per batch.
   1099 
   1100 *** Renaming multiple files at once
   1101 :PROPERTIES:
   1102 :CUSTOM_ID: h:82455fb4-576b-4753-af66-ac48fd158327
   1103 :END:
   1104 
   1105 The command ~denote-dired-rename-marked-files-and-add-front-matter~ is
   1106 deprecated and its functionality is absorbed by the existing
   1107 ~denote-dired-rename-marked-files~ command.  The deprecated command was
   1108 used to insert front matter to supported file types (per
   1109 ~denote-file-type~) that had none.  We now handle this internally, thus
   1110 streamlining the experience for the user.
   1111 
   1112 Refer to the manual for the details:
   1113 <https://protesilaos.com/emacs/denote#h:1b6b2c78-42f0-45b8-9ef0-6de21a8b2cde>
   1114 
   1115 Assuming the latest Info manual is installed, evaluate:
   1116 
   1117 #+begin_src emacs-lisp
   1118 (info "(denote) Rename multiple files at once")
   1119 #+end_src
   1120 
   1121 *** Renaming a single file based on its front matter
   1122 :PROPERTIES:
   1123 :CUSTOM_ID: h:d913e369-9325-46c4-985b-cf5b3e35372b
   1124 :END:
   1125 
   1126 Introduced the ~denote-rename-file-using-front-matter~ command.  This is
   1127 new functionality we provide which uses the front matter as input to
   1128 perform a rename of the file.  The aforementioned offerings prompt for
   1129 input via the minibuffer and propagate the changes firstly to the file
   1130 name and subsequently to the front matter.  Whereas with the command
   1131 ~denote-rename-file-using-front-matter~, the user can edit the front
   1132 matter manually and then invoke the command to pass the changes to the
   1133 file name, subject to a confirmation.  Relevant entries are the title
   1134 and tags/filetags (depending on the file type).  The date and the
   1135 identifier are not pertinent.  Identifiers in file names are NEVER
   1136 rewritten by Denote.
   1137 
   1138 Consult the manual:
   1139 <https://protesilaos.com/emacs/denote#h:3ab08ff4-81fa-4d24-99cb-79f97c13a373>.
   1140 
   1141 With the latest package, evaluate:
   1142 
   1143 #+begin_src emacs-lisp
   1144 (info "(denote) Rename a single file based on its front matter")
   1145 #+end_src
   1146 
   1147 *** Renaming multiple files based on their front matter
   1148 :PROPERTIES:
   1149 :CUSTOM_ID: h:4efc6c14-fd71-4bd8-8bb1-e8e720b98eff
   1150 :END:
   1151 
   1152 The command ~denote-dired-rename-marked-files-using-front-matter~
   1153 completes the set of features we provide for syncing between file name
   1154 and front matter.  It applies to all marked files in a Dired buffer.
   1155 
   1156 Read the manual to understand how the command works and what it does
   1157 exactly: <https://protesilaos.com/emacs/denote#h:ea5673cd-e6ca-4c42-a066-07dc6c9d57f8>.
   1158 
   1159 Or evaluate:
   1160 
   1161 #+begin_src emacs-lisp
   1162 (info "(denote) Rename multiple files based on their front matter")
   1163 #+end_src
   1164 
   1165 *** Add missing front matter on demand
   1166 :PROPERTIES:
   1167 :CUSTOM_ID: h:32a103be-71a2-48e4-a18e-7727c04545ed
   1168 :END:
   1169 
   1170 Sometimes the user may have incomplete front matter, perhaps due to a
   1171 mistake that was saved on disk.  The command ~denote-add-front-matter~
   1172 appends a new front matter block to the current note.
   1173 
   1174 Read:
   1175 <https://protesilaos.com/emacs/denote#h:54b48277-e0e5-4188-ad54-ef3db3b7e772>
   1176 
   1177 Or evaluate:
   1178 
   1179 #+begin_src emacs-lisp
   1180 (info "(denote) Regenerate front matter")
   1181 #+end_src
   1182 
   1183 ** Faces for Denote links
   1184 :PROPERTIES:
   1185 :CUSTOM_ID: h:507fb46c-a2e9-48a7-8cd2-53c5fc73394d
   1186 :END:
   1187 
   1188 We provide the ~denote-faces-link~ and the ~denote-faces-broken-link~.
   1189 The latter is only relevant for Org, as Emacs' standard button mechanism
   1190 does not have a way to apply a face dynamically.
   1191 
   1192 This is a change for themes/tinkerers who need to differentiate
   1193 =denote:= links from other links.  Otherwise, the presentation is the
   1194 same as before.
   1195 
   1196 Thanks to Peter Prevos for asking about it on the mailing list:
   1197 <https://lists.sr.ht/~protesilaos/denote/%3C03618bb20d3eaba78c32cd0cb63bfc71%40prevos.net%3E>.
   1198 
   1199 ** Use of XDG path in ~denote-directory~
   1200 :PROPERTIES:
   1201 :CUSTOM_ID: h:efa3049e-f1fa-48ff-af7d-d16edc677704
   1202 :END:
   1203 
   1204 The default value of the ~denote-directory~ user option used to be
   1205 =~/Documents/notes= (subject to some conversion via Elisp).  Denote now
   1206 conforms with the freedesktop.org specifications by using the =XDG=
   1207 directory for =DOCUMENTS= instead of =~/Documents=:
   1208 <https://www.freedesktop.org/wiki/Software/xdg-user-dirs/>.
   1209 
   1210 Users who already bind the ~denote-directory~ are not affected by this
   1211 change.  Same for those who do not tinker with =XDG= environment
   1212 variables and/or do not use some exotic setup.
   1213 
   1214 Thanks to Philip Kaludercic for the patch:
   1215 <https://lists.sr.ht/~protesilaos/denote/patches/34561#%3C20220809115824.43089-1-philipk@posteo.net%3E>
   1216 
   1217 ** Bespoke major-mode for the backlinks' buffer
   1218 :PROPERTIES:
   1219 :CUSTOM_ID: h:feb9a0ed-ba15-486e-ae11-5b222b00bc31
   1220 :END:
   1221 
   1222 The backlinks' buffer now uses the ~denote-backlink-mode~ instead of the
   1223 generic ~special-mode~.  The former derives from the latter.  It binds
   1224 keys to move between links with =n= (next) and =p= (previous).  These
   1225 are stored in the ~denote-backlink-mode-map~ (use =M-x describe-mode=
   1226 (=C-h m=) in an unfamiliar buffer to learn more about it).
   1227 
   1228 Thanks to Philip Kaludercic for the patch:
   1229 <https://lists.sr.ht/~protesilaos/denote/patches/34561#%3C20220809115824.43089-2-philipk@posteo.net%3E>
   1230 
   1231 ** Changes to the manual
   1232 :PROPERTIES:
   1233 :CUSTOM_ID: h:80217a39-86b8-4310-b7c4-dcc14e0b98fd
   1234 :END:
   1235 
   1236 + Documented all of the aforementioned.  Improved how information is
   1237   presented and, generally, iterated on an already comprehensive
   1238   document.
   1239 
   1240 + Introduced a node which explains how to tweak the front matter:
   1241   <https://protesilaos.com/emacs/denote#h:7f918854-5ed4-4139-821f-8ee9ba06ad15>.
   1242   Or evaluate:
   1243 
   1244   #+begin_src emacs-lisp
   1245   (info "(denote) Change the front matter format")
   1246   #+end_src
   1247 
   1248 + Updated the reference to =consult-notes=.  This is a package that uses
   1249   the =consult= interface to provide access and search facilities for
   1250   notes.  It can integrate with Denote.  Thanks to Colin McLear for the
   1251   change in pull request 70 on the GitHub mirror:
   1252   <https://github.com/protesilaos/denote/pull/70>.
   1253 
   1254   [ The change is below the ~15 line threshold and thus does not require
   1255     copyright assignment to the Free Software Foundation. ]
   1256 
   1257 ** Internal restructuring
   1258 :PROPERTIES:
   1259 :CUSTOM_ID: h:5d09d0af-3c25-4419-8448-90b8e1adab0d
   1260 :END:
   1261 
   1262 + All Denote code is consolidated in =denote.el=.  We no longer maintain
   1263   separate files like =denote-link.el=, =denote-dired.el=, etc.  Users
   1264   who had ~require~ calls to such libraries must remove them and only
   1265   keep:
   1266 
   1267   #+begin_src emacs-lisp
   1268   (require 'denote)
   1269   #+end_src
   1270 
   1271 + User options that have an entry in the manual will now provide a link
   1272   to it via their Help buffer and/or the Custom UI.  This is done by
   1273   adding the =:link= attribute to their declaration.
   1274 
   1275   Furthermore, user options and faces now specify the version of Denote
   1276   that last affected their value (e.g. ~denote-directory~, which was
   1277   mentioned above for the XDG spec, now informs the user that it changed
   1278   for version =0.5.0=).
   1279 
   1280   [ I learnt these by developing the =modus-themes=. ]
   1281 
   1282 + The variables ~denote-last-title~, ~denote-last-keywords~,
   1283   ~denote-last-buffer~, and ~denote-last-front-matter~ are all obsolete.
   1284   These were used prior to version =0.1.0= to help with development but
   1285   are now deemed surplus to requirements.
   1286 
   1287 + Lots of changes were made to private functions, variables, doc
   1288   strings, and comments, in the interest of simplifying the code and/or
   1289   ensuring consistency in how operations are carried out.  Though
   1290   everything is the same for the end-user.
   1291 
   1292 Thanks to Jean-Philippe Gagné Guay for the numerous contributions on the
   1293 GitHub mirror.  They are important for Denote, though the user does not
   1294 need to know what is happening internally (consult the Git log for the
   1295 details):
   1296 
   1297 - <https://github.com/protesilaos/denote/pull/65>
   1298 - <https://github.com/protesilaos/denote/pull/72>
   1299 - <https://github.com/protesilaos/denote/pull/73>
   1300 - <https://github.com/protesilaos/denote/pull/78>
   1301 - <https://github.com/protesilaos/denote/pull/80>
   1302 - <https://github.com/protesilaos/denote/pull/81>
   1303 - <https://github.com/protesilaos/denote/pull/82>
   1304 - <https://github.com/protesilaos/denote/pull/83>
   1305 
   1306 ** Discussions
   1307 :PROPERTIES:
   1308 :CUSTOM_ID: h:79089c06-9e0c-49cc-9d53-a1a2fd72fb65
   1309 :END:
   1310 
   1311 *** Encrypting Denote notes
   1312 :PROPERTIES:
   1313 :CUSTOM_ID: h:87e4556a-4864-4955-a98c-62b2e6a509c3
   1314 :END:
   1315 
   1316 Paul van Gelder asked about this on the mailing list.  I provided
   1317 guidelines on what can be done, though did not record anything in the
   1318 manual: I prefer to elicit more feedback from users.  The gist is that
   1319 Emacs already has all the requisite functionality, though encryption per
   1320 se is outside the scope of Denote:
   1321 <https://lists.sr.ht/~protesilaos/denote/%3C1123434736.64290.1658954014673%40kpc.webmail.kpnmail.nl%3E>.
   1322 
   1323 Denote's relevant internal mechanisms will recognise files ending in
   1324 =.gpg= (e.g. for fontification in Dired).
   1325 
   1326 *** Visualise usage of Denote keywords
   1327 :PROPERTIES:
   1328 :CUSTOM_ID: h:d94ee5e3-0a54-404c-b44b-34edc3703fbc
   1329 :END:
   1330 
   1331 Peter Prevos shared a proof-of-concept way to visualise keywords in the
   1332 ~denote-directory~ and show usage statistics:
   1333 <https://lists.sr.ht/~protesilaos/denote/%3Ce9e5d6ae85984b51067b47f4d8e134fa%40prevos.net%3E>.
   1334 
   1335 We do not include this information in the manual, as we wait for the
   1336 fully fledged code.  Though do give it a try if you are interested and,
   1337 perhaps, share your thoughts for Peter's consideration.
   1338 
   1339 *** Conflict between ~denote-dired-mode~ and ~diredfl-mode~
   1340 :PROPERTIES:
   1341 :CUSTOM_ID: h:0cbf504c-676c-436e-8ae8-e7115368e691
   1342 :END:
   1343 
   1344 Hilde Rhyne shared a workaround they have to disable ~diredfl-mode~ in
   1345 the buffers where ~denote-dired-mode~ is enabled.  The conflict between
   1346 the two is a known issue that is acknowledged in the manual:
   1347 <https://lists.sr.ht/~protesilaos/denote/%3Cm0tu6q6bg0.fsf%40disroot.org%3E>.
   1348 
   1349 I think we need a proper solution in the code we provide, so this
   1350 workaround is not mentioned in the manual.
   1351 
   1352 *** Why doesn't Denote provide a search facility?
   1353 :PROPERTIES:
   1354 :CUSTOM_ID: h:068108f4-a4fa-4ff8-be49-f1f10a862451
   1355 :END:
   1356 
   1357 There was a discussion started by Fourchaux, with the participation of
   1358 basaran and Andre0991 on the GitHub mirror:
   1359 <https://github.com/protesilaos/denote/issues/71>.
   1360 
   1361 The gist of my answer is that Denote does not need to provide such a
   1362 facility because notes are ordinary files: whatever the user already has
   1363 for them should apply to Denote.  If the user has nothing to search
   1364 through files, they anyhow need something that works outside the
   1365 confines of Denote: a =denote-SEARCH= command is not an adequate
   1366 solution.
   1367 
   1368 Emacs has numerous built-in commands, such as ~grep~ (~lgrep~ and
   1369 ~rgrep~), ~project-find-regexp~, ~find-grep-dired~, ~ibuffer-do-occur~,
   1370 ...  Furthermore, there are lots of high quality packages that have
   1371 their own wrappers or extensions for searching file contents, such as
   1372 the =ivy= and =helm= completion frameworks, as well as =consult= (the
   1373 commands ~consult-grep~ and ~consult-ripgrep~), =consult-notes=, =rg=,
   1374 =deadgrep=, =deft=, and probably plenty more that do not come to mind
   1375 right now.
   1376 
   1377 I strongly encourage the user to find a universal search solution to the
   1378 problem of searching file contents.
   1379 
   1380 * Version 0.4.0 on 2022-07-25
   1381 :PROPERTIES:
   1382 :CUSTOM_ID: h:1c8098ee-089c-4511-bc6a-4140aab01321
   1383 :END:
   1384 
   1385 + Defined the ~denote-link-dired-marked-notes~ command.  It lets the
   1386   user produce a typographic list of links to the note files that are
   1387   marked in Dired.  The list is written at point.  If there are multiple
   1388   buffers which visit Denote notes, the command first prompts with
   1389   minibuffer completion for one among them.
   1390 
   1391   In terms of workflow, ~denote-link-dired-marked-notes~ complements the
   1392   ~denote-link-add-links~ command for those cases where it is easier to
   1393   select files than write an elegant regular expression.
   1394 
   1395 + Implemented the ~denote-dired-rename-marked-files~ command.  This
   1396   provides a much-requested facility to perform the familiar renaming
   1397   operation on a set of files.  In particular:
   1398 
   1399   - the file's existing file name is retained and becomes the =TITLE=
   1400     field, per Denote's file-naming scheme;
   1401 
   1402   - the =TITLE= is sluggified and downcased, per our conventions;
   1403 
   1404   - an identifier is prepended to the =TITLE=;
   1405 
   1406   - the file's extension is retained;
   1407 
   1408   - a prompt is asked once for the =KEYWORDS= field and the input is
   1409     applied to all file names;
   1410 
   1411   - if the file is recognised as a Denote note, the command rewrites its
   1412     front matter to include the new keywords.  A confirmation to carry
   1413     out this step is performed once at the outset.  Note that the
   1414     affected buffers are not saved.  The user can thus check them to
   1415     confirm that the new front matter does not cause any problems
   1416     (e.g. with the command ~diff-buffer-with-file~).  Multiple buffers
   1417     can be saved with ~save-some-buffers~ (read its doc string).
   1418 
   1419   Parts of ~denote-dired-rename-marked-files~ were added or refined over
   1420   a series of commits.  Consult the Git log for the minutia.  Thanks to
   1421   Jean-Philippe Gagné Guay for the relevant additions in pull requests
   1422   51 and 52 on the GitHub mirror:
   1423 
   1424   - <https://github.com/protesilaos/denote/pull/51>
   1425   - <https://github.com/protesilaos/denote/pull/52>
   1426 
   1427   Jean-Philippe has assigned copyright to the Free Software Foundation.
   1428 
   1429 + Improved how the ~denote-dired-rename-file~ command rewrites front
   1430   matter.  Before, it would perform a replacement of the whole block,
   1431   which had the adverse effect of overwriting custom front matter
   1432   entries.  Now, it only targets the lines which hold the title and
   1433   keywords, leaving everything else intact.  Thanks to Peter Prevos for
   1434   reporting the problem and testing the solution to it in issue 60 on
   1435   the GitHub mirror: <https://github.com/protesilaos/denote/issues/60>.
   1436 
   1437 + Introduced the ~denote-dired-rename-file-and-add-front-matter~ command
   1438   that always prepends front matter to a file whose extension is among
   1439   the supported ones (per the user option ~denote-file-type~).  This
   1440   differs from the standard ~denote-dired-rename-file~ command which
   1441   only rewrites the front matter's title and keywords if they exist.
   1442 
   1443   In practice, ~denote-dired-rename-file-and-add-front-matter~ empowers
   1444   the user to convert a generic text file to a Denote note.
   1445 
   1446   This command was originally added by Jean-Philippe Gagné Guay in pull
   1447   request 49 on the GitHub mirror and refined in subsequent commits:
   1448   <https://github.com/protesilaos/denote/pull/49>.  Also read issue 48
   1449   where this idea was originally discussed:
   1450   <https://github.com/protesilaos/denote/issues/48>.
   1451 
   1452 + Added the ~denote-dired-rename-marked-files-and-add-front-matters~
   1453   command, which is like the ~denote-dired-rename-marked-files~ but adds
   1454   front matter instead of rewriting existing one, just how the command
   1455   ~denote-dired-rename-file-and-add-front-matter~ does it (both are
   1456   mentioned above).  Thanks to Jean-Philippe Gagné Guay for the
   1457   refinements to it in pull request 53 on the GitHub mirror:
   1458   <https://github.com/protesilaos/denote/pull/53>.
   1459 
   1460 + Wrote an interactive spec for ~denote-link-buttonize-buffer~.  It can
   1461   now be invoked with =M-x= or a key binding, should the need arise.
   1462   This function is normally called via a hook and takes effect in plain
   1463   text as well as Markdown files.
   1464 
   1465 + Extended the fontification rules so that file names with non-ASCII
   1466   characters are styled properly.  This issue was brought up on the
   1467   mailing list by Frank Ehmsen and was discussed with the participation
   1468   of Peter Prevos:
   1469   <https://lists.sr.ht/~protesilaos/denote/%3C2273b3b1-344c-6c6e-3ab6-a227b6bc3721%40eh-is.de%3E>.
   1470 
   1471   The same topic was raised at the same time on the GitHub mirror by
   1472   user hpgisler in issue 61:
   1473   <https://github.com/protesilaos/denote/issues/61>.
   1474 
   1475   After some discussion, we agreed on the right approach, which was
   1476   formalised by Peter Prevos as pull request 64 on the GitHub mirror:
   1477   <https://github.com/protesilaos/denote/pull/64>.  The change is below
   1478   the ~15 line threshold and thus does not require copyright assignment
   1479   to the Free Software Foundation.
   1480 
   1481 + Made the registration of the =denote:= custom Org hyperlink type
   1482   conditional on the availability of the ~org~ feature.  In other words,
   1483   those who do not use Org will not be loading this part of the code.
   1484   Thanks to Abin Simon for reporting the problem and for showing how
   1485   Elfeed handles this case.  This was done in issue 47 on the GitHub
   1486   mirror: <https://github.com/protesilaos/denote/issues/47>.
   1487 
   1488 + Ensured that duplicate keywords are not produced by the relevant
   1489   prompt.  Thanks to user Taoufik for the contribution in pull request
   1490   50 on the GitHub mirror: <https://github.com/protesilaos/denote/pull/50>.
   1491   The change is below the ~15 line threshold and thus does not require
   1492   copyright assignment to the Free Software Foundation.
   1493 
   1494 + Fixed a typo in the reference to the ~crm-separator~ in the manual.
   1495   David Wilson (System Crafters channel) spotted the error in a recent
   1496   live stream whose main topic was about Denote (thanks, by the way!):
   1497   <https://www.youtube.com/watch?v=QcRY_rsX0yY>.
   1498 
   1499 + Addressed an inconsistency in the command ~denote-link-find-file~
   1500   where it would not recognise links without a title in their format
   1501   (those can be inserted by passing a prefix argument (=C-u= by default)
   1502   to the commands that insert links, such as ~denote-link~).
   1503 
   1504 + Attached conditionality to the ~denote~ command's =SUBDIRECTORY=
   1505   argument, so that it does not create new file paths.  This is only
   1506   relevant for those who call ~denote~ from Lisp.  Interactive use is
   1507   the same as before.
   1508 
   1509 + Clarified that the user option ~denote-org-capture-specifiers~ can
   1510   accept arbitrary text in addition to the formatting specifiers that
   1511   Org's capture mechanism introduces.
   1512 
   1513 + Explained in the manual why ~denote-org-capture-specifiers~ is needed
   1514   instead of writing the capture template directly the way one normally
   1515   does.  The gist is that because our file names are derived dynamically
   1516   based on user input, we need to account for the sequence in which the
   1517   value of arguments is reified by ~org-capture~.
   1518 
   1519 + Refactored how notes are prepared internally.  Thanks to Jean-Philippe
   1520   Gagné Guay for the contribution in pull request 55 on the GitHub
   1521   mirror: <https://github.com/protesilaos/denote/pull/55>.
   1522 
   1523 + Declared the ~denote-punctuation-excluded-extra-regexp~ variable which
   1524   is, for the time being, targeted at experienced users.  Its purpose is
   1525   to extend what we consider "illegal" punctuation for the file name.
   1526   Thanks to pRot0ta1p for the feedback in issue 57 over at the GitHub
   1527   mirror: <https://github.com/protesilaos/denote/issues/57>.  Example
   1528   based on the input of pRot0ta1p:
   1529 
   1530   #+begin_src emacs-lisp
   1531   (setq denote-punctuation-excluded-extra-regexp
   1532         "[『』〖〗{}「」【】〔〕[]()《》〈〉«»!#¥%…&"'*,。;:、?—]*")
   1533   #+end_src
   1534 
   1535   The ideal is to make ~denote--punctuation-regexp~ work for all
   1536   scripts, but that may be unrealistic.
   1537 
   1538 + Clarified what the manual means by "attachments" to notes.  Those are
   1539   for Org, if the user resorts to the relevant Org mechanisms.  Denote
   1540   does not do any of that.
   1541 
   1542 + Revised the parsing of a date input as used in the ~denote-date~
   1543   command or related.  The idea is to turn =2020-01-15= into something
   1544   like =2020-01-15 16:19= by using the current time, so that the hour
   1545   and minute component is not left to =00:00= when the user does not
   1546   specify it explicitly.
   1547 
   1548   This reduces the burden on the user who would otherwise need to input
   1549   the time value in order to avoid the error of duplicate identifiers in
   1550   the scenario where the same date is used more than once.
   1551 
   1552   The change also addresses a difference between Emacs 28 and Emacs 29
   1553   where the former does not read dates without a time component.
   1554 
   1555   Thanks to Peter Prevos for the feedback in issue 58 over at the GitHub
   1556   mirror: <https://github.com/protesilaos/denote/issues/58>.
   1557 
   1558 + Fixed compilation warnings in Emacs 29 about the format of doc strings
   1559   that need to output a literal single quote.  Thanks to Kyle Meyer for
   1560   the patch, which was sent on the mailing list:
   1561   <https://lists.sr.ht/~protesilaos/denote/patches/34117>.
   1562 
   1563 + Fixed typo in the user option ~denote-prompts~ about the
   1564   ~crm-separator~.  Thanks to Kyle Meyer for the patch, which was sent
   1565   on the mailing list:
   1566   <https://lists.sr.ht/~protesilaos/denote/patches/34116>.
   1567 
   1568 + Made the built-in =subr-x= library a runtime dependency, due to
   1569   complications with the ~when-let*~ form.  The problem was made
   1570   manifest in a renaming operation, though it was not about renaming per
   1571   se.  Thanks to hpgisler for reporting the problem in issue 62 and for
   1572   testing the proposed solution:
   1573   <https://github.com/protesilaos/denote/issues/62>.
   1574 
   1575 + Streamlined the use of the =seq= library instead of =cl-lib=, as we
   1576   were already using the former more heavily and there was no need for
   1577   the latter.  Thanks to Philip Kaludercic for pointing this out on the
   1578   emacs-devel mailing list:
   1579   <https://lists.gnu.org/archive/html/emacs-devel/2022-07/msg00838.html>.
   1580 
   1581 + Added a generic =README.md= file to placate the Git forges.  Neither
   1582   SourceHut nor GitHub/GitLab are fully compliant with the Org markup we
   1583   use in =README.org= (we use Org because it is easy to generate the
   1584   Info manual and HTML pages out of it).  SourceHut will not render the
   1585   file at all, while the others render it but do not parse it properly.
   1586 
   1587 + Made several other internal tweaks and refinements in the interest of
   1588   robustness and/or clarity.
   1589 
   1590 + Rewrote all relevant documentation.
   1591 
   1592 ** Non-changes
   1593 :PROPERTIES:
   1594 :CUSTOM_ID: h:0ac79968-a575-4380-addc-d58cc2b5f627
   1595 :END:
   1596 
   1597 The following are not part of any changes that were made during this
   1598 release cycle, though they provide potentially interesting insight into
   1599 the workings of the project.
   1600 
   1601 + Identifiers with milliseconds :: Denote's identifier format extends up
   1602   to seconds.  This is the product of years of experimentation and is,
   1603   in my opinion, the best compromise between usability/readability and
   1604   precision.  If a user produces two notes within a fraction of a
   1605   second, then yes they will have duplicate identifiers.  In principle,
   1606   there is no reason not to address this potential problem, provided we
   1607   do not compromise on Denote's file-naming scheme (making the
   1608   identifier less readable is a compromise).  We shall see what the best
   1609   course of action is.  Thanks to Felipe Balbi and Jean-Philippe Gagné
   1610   Guay for the discussion thus far in issue 54 on the GitHub mirror:
   1611   <https://github.com/protesilaos/denote/issues/54>.
   1612 
   1613 + Denote and evil-mode :: Users of evil-mode do not have to worry about
   1614   Denote, as we do not define any key bindings.  The manual includes
   1615   sample configuration, which proposes some key bindings, but that is
   1616   the user's prerogative.  Thanks to Saša Janiška and Alan Schmitt for
   1617   their participation on the mailing list:
   1618   <https://lists.sr.ht/~protesilaos/denote/%3C87czdxf1dz.fsf%40atmarama.ddns.net%3E>.
   1619 
   1620 + Denote and Citar :: Peter Prevos started developing a package that
   1621   connects Denote with Citar: <https://github.com/pprevos/denote-citar>.
   1622   The idea is to use notes as part of one's bibliography.  Discussions
   1623   which include sample code on how to leverage ~denote~ from Lisp:
   1624 
   1625   - <https://lists.sr.ht/~protesilaos/denote/%3C6add8bc63cab0a557fa4b9919e025afc%40prevos.net%3E>
   1626   - <https://lists.sr.ht/~protesilaos/denote/%3C87r12d2w96.fsf%40protesilaos.com%3E>
   1627   - <https://lists.sr.ht/~protesilaos/denote/%3C87a69060q6.fsf%40protesilaos.com%3E>
   1628 
   1629 + Denote and graph of connections :: Saša Janiška asked whether Denote
   1630   will provide some way to visualise links between notes.  The answer is
   1631   negative.  Denote's scope is clearly delineated and its feature set is
   1632   largely complete (notwithstanding refinements to what we already
   1633   provide).  Peter Prevos is experimenting with some code that uses the
   1634   R language.  Any such facility will have to be implemented as a
   1635   separate package.  I remain at the disposal of anyone who needs help
   1636   with Denote's internals.  Thanks to the aforementioned fellows for
   1637   their participation on the mailing list:
   1638   <https://lists.sr.ht/~protesilaos/denote/%3C878roleze1.fsf%40atmarama.ddns.net%3E>.
   1639 
   1640 + Denote's scalability :: There was a discussion whether Denote will
   1641   work well with very large sets of files.  The short answer is that it
   1642   will work the same way Emacs and/or standard Unix tools do: good
   1643   enough!  If there are improvements to be made, which do not jeopardise
   1644   the principles of the project, we shall implement them without
   1645   hesitation.  Thanks to Saša Janiška and Peter Prevos for their
   1646   participation on the mailing list:
   1647   <https://lists.sr.ht/~protesilaos/denote/%3C87sfmtf7im.fsf%40atmarama.ddns.net%3E>.
   1648 
   1649 + Denote's minimum requirement of Emacs 27.2 :: We cannot depend on
   1650   Emacs 27.1 due to this message from the byte compiler:
   1651 
   1652   : You should depend on (emacs "27.2") or the (org "9.3") package if you need `org-link-open-as-file'.
   1653 
   1654   Depending on Org is not an option because Denote optionally works
   1655   without Org, so Emacs 27.2 is what we have to opt for.  If your
   1656   operating system does not provide this version in package format,
   1657   please petition its maintainers/providers to do so.  Thanks to
   1658   Alexander for asking about it on the mailing list:
   1659   <https://lists.sr.ht/~protesilaos/denote/%3C9ec818e6a7979efbb2f8b1f5a497665b%40purelymail.com%3E>.
   1660 
   1661 Finally, a mildly interesting piece of trivia: we have exceeded 600
   1662 commits since the first day of the project's Git history on 2022-06-04
   1663 (the actual history is much longer).  That averages to more than 10 per
   1664 day!  I think things will slow down eventually.
   1665 
   1666 * Version 0.3.0 on 2022-07-11
   1667 :PROPERTIES:
   1668 :CUSTOM_ID: h:6864cfd4-d0be-4c89-b313-39ba6e892a03
   1669 :END:
   1670 
   1671 + Fixed how references are analysed to produce the backlinks' buffer.
   1672   This should resolve the issue that some users faced where the
   1673   backlinks would not be produced.
   1674 
   1675   The previous implementation would not yield the appropriate results if
   1676   (i) the value of the user option ~denote-directory~ was a "project"
   1677   per the built-in project.el and (ii) the link to the given entry was
   1678   from a subdirectory.  In short, the references were sometimes returned
   1679   as relative file paths, whereas they should always be absolute.
   1680   Thanks to Jean-Philippe Gagné Guay for the feedback in issue 42 over
   1681   at the GitHub mirror: <https://github.com/protesilaos/denote/pull/42>.
   1682 
   1683   [ Jean-Philippe has assigned copyright to the Free Software
   1684     Foundation.  It is a prerequisite for contributing to core Emacs
   1685     and/or any package distributed via the official GNU ELPA. ]
   1686 
   1687 + Addressed a regression in the function ~denote-directory~ (this is the
   1688   function that normalises the variable of the same name) which
   1689   prevented it from returning an expanded file path.  This too
   1690   contributed to problems with the backlinking facility.  Thanks to
   1691   Jean-Philippe Gagné Guay for the contribution in pull request 44 over
   1692   at the GitHub mirror: <https://github.com/protesilaos/denote/pull/44>.
   1693 
   1694   Also thanks to user pRot0ta1p for the relevant feedback in issue 43
   1695   (also on the mirror): <https://github.com/protesilaos/denote/issues/43>.
   1696   More thanks to Alfredo Borrás, Benjamin Kästner, and Sven Seebeck for
   1697   their comments in a related thread on the mailing list:
   1698   <https://lists.sr.ht/~protesilaos/denote/%3CCA73E705-1194-4324-9962-70708C4C72E5%40zoho.eu%3E>.
   1699   These discussions showed we had a problem, which we managed to
   1700   identify.
   1701 
   1702 + Introduced the user option ~denote-prompts~ (read its doc string or
   1703   the relevant entry in the manual).  It governs how the standard
   1704   ~denote~ command for creating new notes will behave in interactive
   1705   usage.  By default, ~denote~ prompts for a title and keywords.  With
   1706   ~denote-prompts~, the command can also ask for a file type (per
   1707   ~denote-file-type~), subdirectory of the ~denote-directory~, and a
   1708   specific date+time.  Prompts occur in the order they are specified.
   1709   Furthermore, the ~denote-prompts~ can be set to values which do not
   1710   include the title and keywords.  This means that the resulting file
   1711   names can be any of those permutations:
   1712 
   1713   : DATE.EXT
   1714   : DATE--TITLE.EXT
   1715   : DATE__KEYWORDS.EXT
   1716 
   1717   Recall that Denote's standard file-naming scheme is defined as follows
   1718   (read the manual for the details):
   1719 
   1720   : DATE--TITLE__KEYWORDS.EXT
   1721 
   1722   For our purposes, Denote will work perfectly fine for linking and
   1723   backlinking, even if file names do not include the =TITLE= and
   1724   =KEYWORDS= fields.  However, the user is advised to consider the
   1725   implications on usability: notes without a descriptive title and/or
   1726   useful keywords may be hard to filter and practically impossible to
   1727   manage at scale.  File names without such information should at least
   1728   be added to subdirectories which themselves have a descriptive name.
   1729 
   1730   At any rate, Denote does not have strong opinions about one's
   1731   workflow.  The standard file name is the culmination of years of
   1732   experience.
   1733 
   1734   Consider the ~denote-prompts~ the affirmative answer to the question
   1735   "Can keywords be optional?" as posed by Jack Baty on the mailing list:
   1736   <https://lists.sr.ht/~protesilaos/denote/%3C8D392BC3-980A-4E5B-9480-D6A00BE8279F%40baty.net%3E>.
   1737 
   1738   Thanks to Jean-Philippe Gagné Guay for the original contribution in
   1739   commit 9b981a2.  It was originally part of a pull request, but due to
   1740   some internal changes I had to merge it as a patch and technically the
   1741   web UI did not count the PR as "merged" (though it was in terms of
   1742   substance).
   1743 
   1744 + Refactored the ~denote~ command to (i) accommodate the new user option
   1745   ~denote-prompts~ via its interactive specification and (ii) be more
   1746   flexible when called from Lisp.  The latter scenario is for advanced
   1747   users or, generally, those who can maintain some custom code in their
   1748   configuration.  A case in point is one of the examples we show in the
   1749   manual for a programmatic way to create notes that automatically get
   1750   the =journal= tag:
   1751 
   1752   #+begin_src emacs-lisp
   1753   (defun my-denote-journal ()
   1754     "Create an entry tagged 'journal', while prompting for a title."
   1755     (interactive)
   1756     (denote
   1757      (denote--title-prompt)
   1758      '("journal")))
   1759   #+end_src
   1760 
   1761   Notice that the ='("journal")= is a list of strings even for a single
   1762   keyword.  Whereas before a single one was a plain string.  This is a
   1763   breaking change.
   1764 
   1765   Please consult the doc string of the ~denote~ command for the
   1766   technicalities.
   1767 
   1768 + Refashioned the interactive convenience functions of ~denote-type~,
   1769   ~denote-date~, ~denote-subdirectory~ to leverage the ~denote-prompts~
   1770   user option while calling ~denote~ interactively.  In practical terms,
   1771   they no longer accept any arguments when called from Lisp.  Users who
   1772   need a programmatic approach are advised to either call ~denote~
   1773   directly, or check how these commands ~let~ bind the ~denote-prompts~
   1774   to carry out their operations.  The doc string of each command
   1775   explains how it works.  Or evaluate this to check the manual:
   1776 
   1777   #+begin_src emacs-lisp
   1778   (info "(denote) Convenience commands for note creation")
   1779   #+end_src
   1780 
   1781   Else visit:
   1782   <https://protesilaos.com/emacs/denote#h:887bdced-9686-4e80-906f-789e407f2e8f>
   1783 
   1784 + Documented how the user option ~denote-directory~ can accept a local
   1785   value.  This is pertinent to scenaria where the user needs to maintain
   1786   separate directories of notes.  By "separate" we mean sets of notes
   1787   that do not communicate with each other, cannot create links between
   1788   them, etc.  The manual delves into the technicalities.  If you have
   1789   the Info entry installed, evaluate:
   1790 
   1791   #+begin_src emacs-lisp
   1792   (info "(denote) Maintain separate directories for notes")
   1793   #+end_src
   1794 
   1795   Else visit:
   1796   <https://protesilaos.com/emacs/denote#h:15719799-a5ff-4e9a-9f10-4ca03ef8f6c5>.
   1797 
   1798   Thanks to user "Summer Emacs" for starting the discussion on the
   1799   mailing list, and Benjamin Kästner for their participation:
   1800   <https://lists.sr.ht/~protesilaos/denote/%3Cm25yk5e856.fsf@gmail.com%3E>.
   1801 
   1802 + Added an entry to the manual's Frequently Asked Questions about a
   1803   failed search for backlinks.  It includes sample code that users of
   1804   Windows can apply, if necessary.  (The error is not Denote's fault.)
   1805   Thanks to Benjamin Kästner for the patch, which is below the ~15 line
   1806   threshold and thus does not require copyright assignment to the Free
   1807   Software Foundation:
   1808   <https://lists.sr.ht/~protesilaos/denote/%3Cce117b14-55cf-622e-6cd8-0af698091ae3%40gmail.com%3E>.
   1809 
   1810 + Removed duplicate entries from the list of file paths that the =xref=
   1811   library returns for the purposes of backlinking.  Thanks to
   1812   Jean-Philippe Gagné Guay for the contribution in pull request 44 on
   1813   the GitHub mirror: <https://github.com/protesilaos/denote/issues/44>.
   1814 
   1815 + Applied an appropriate face to the backlinks' button to mitigate an
   1816   error.  Thanks to Jean-Philippe Gagné Guay for the contribution in
   1817   pull request 45 on the GitHub mirror and for later testing a
   1818   subsequent tweak: <https://github.com/protesilaos/denote/issues/45>.
   1819 
   1820 + Simplfied all the faces we define to make them work with all themes.
   1821   The previous colours were consistent with the =modus-themes=:
   1822   <https://protesilaos.com/emacs/modus-themes>.
   1823 
   1824 + Refined how strings are sluggified under all circumstances.  Before, a
   1825   nil value for the user option ~denote-allow-multi-word-keywords~ would
   1826   have the adverse effect of joining all the strings in the title field
   1827   of the file name.  The intent always was to do that only for
   1828   multi-word keywords, not the title.  This change was part of a hotfix,
   1829   formalised as version =0.2.1= a day after the release of =0.2.0=.
   1830 
   1831 + Made the fontification rules more robust, while avoiding any false
   1832   positives.  This was done over a series of commits as it had
   1833   implications for the file name permutations that were mentioned
   1834   earlier.  Thanks to Jean-Philippe Gagné Guay for the patches and/or
   1835   discussion about the merits of each change and concomitant
   1836   considerations:
   1837 
   1838   - https://github.com/protesilaos/denote/pull/36
   1839   - https://github.com/protesilaos/denote/pull/38
   1840   - https://github.com/protesilaos/denote/pull/40
   1841   - https://github.com/protesilaos/denote/pull/42
   1842 
   1843 + Rewrote all relevant entries in the manual to reflect all the
   1844   user-facing aspects of the aforementioned.
   1845 
   1846 + Discussed a use-case of rewriting old journal entries as Denote-style
   1847   files.  As of this writing, we do not support migration of files in
   1848   bulk.  It might happen at some point, though it is no mean task.
   1849   Thanks to Summer Emacs and Alan Schmitt for their participation:
   1850   <https://lists.sr.ht/~protesilaos/denote/%3Cm27d4mbktj.fsf%40gmail.com%3E>.
   1851 
   1852   An aside here as this topic was brought up: my packages are open to
   1853   users of all skill levels and is why I maintain a mailing list as well
   1854   as mirrors of the official git repository on SourceHut.  Do not
   1855   hesitate to ask a question.  If, for whatever reason, those
   1856   communication channels are not appropriate, you are welcome to contact
   1857   me in private: <https://protesilaos.com/contact>.
   1858 
   1859 Thanks again to Jean-Philippe Gagné Guay for the numerous contributions.
   1860 Please read the commit log for the minutia, as this change log entry
   1861 omitted some of the finer yet important details.
   1862 
   1863 * Version 0.2.0 on 2022-07-04
   1864 :PROPERTIES:
   1865 :CUSTOM_ID: h:2002fee6-3f0c-48be-9727-6d4e20f34856
   1866 :END:
   1867 
   1868 + Version =0.1.0= (from 2022-06-27) was never built as a package.  The
   1869   reason is that the GNU ELPA machinery reads the =Version:= header of
   1870   the main file, not the git tag.  As the original commit in =denote.el=
   1871   included =Version: 0.1.0=, GNU ELPA rightly tries to build the package
   1872   using that reference.  But because at that time I had not yet updated
   1873   the Copyright header to name the Free Software Foundation, the package
   1874   could not be prepared.  As such, please consider this release to be
   1875   the "first formal stable version".  My apologies for the delay,
   1876   contrary to what was promised in the last change log entry.
   1877 
   1878   - Prospective users are advised to read the manual:
   1879     <https://protesilaos.com/emacs/denote>.  For a video demonstration:
   1880     <https://protesilaos.com/codelog/2022-06-18-denote-demo/>.
   1881 
   1882   - Thanks to Benjamin Kästner for reporting the issue with the GNU ELPA
   1883     package on the mailing list:
   1884     <https://lists.sr.ht/~protesilaos/denote/%3C9d600ff0-4fed-2ad7-5dbc-5a194639a045@gmail.com%3E>.
   1885 
   1886 + Originally, Denote was designed to only work with notes in a flat
   1887   directory.  With code contributions from Jean-Philippe Gagné Guay,
   1888   support for subdirectories of the user option ~denote-directory~ is
   1889   now available.  This covers the case of creating links between notes,
   1890   following them, and viewing the backlinks' buffer of the current
   1891   entry.
   1892 
   1893   - Thanks to Jean-Philippe for the contributions which took place on
   1894     the GitHub mirror:
   1895 
   1896     + <https://github.com/protesilaos/denote/pull/24>
   1897     + <https://github.com/protesilaos/denote/pull/25>
   1898     + <https://github.com/protesilaos/denote/pull/26>
   1899 
   1900   - Jean-Philippe Gagné Guay has assigned copyright to the Free Software
   1901     Foundation.  This is a prerequisite to contribute code to any
   1902     package on the official GNU ELPA archive (and to emacs.git for that
   1903     matter).
   1904 
   1905 + The new ~denote-subdirectory~ command lets the user select a directory
   1906   to place the new note in.  Available candidates are the value of the
   1907   ~denote-directory~ as well as all of its subdirectories, minus =.git=.
   1908   In future versions, we will consider how to provide a blocklist or a
   1909   regexp filter for the user to specify which subdirectories should be
   1910   omitted from minibuffer completion.  Please consider providing your
   1911   feedback on the technicalities.
   1912 
   1913   - Thanks to Jean-Philippe Gagné Guay and Shreyas Ragavan for the
   1914     feedback in issue 31 on the GitHub mirror:
   1915     <https://github.com/protesilaos/denote/issues/31>.
   1916 
   1917   - Thanks to Jean-Philippe Gagné Guay for fixing a potential problem in
   1918     how directories are represented when commands enter the directory
   1919     instead of selecting it (again, at the GitHub mirror):
   1920     <https://github.com/protesilaos/denote/pull/35>.
   1921 
   1922 + From 2022-06-24 to 2022-07-03, Denote provided support for links
   1923   between Org notes that leveraged the =id:= hyperlink type.
   1924   Discussions on the mailing list and the GitHub mirror revealed the
   1925   longer-term problems in our implementation.  In the Annex below, I
   1926   provide my detailed opinion on the matter.  The gist is that Denote
   1927   does not---and will not---create =id:= links between its notes, but
   1928   shall use the =denote:= hyperlink type instead (which works like the
   1929   standard =file:= type).  As the Annex explains, Denote is not org-roam
   1930   lite and we try not to engender such false expectations.
   1931 
   1932   - Despite the fact that the relevant patches are no longer applicable,
   1933     I wish to thank Kaushal Modi and Jean-Philippe Gagné Guay for their
   1934     contributions over at the GitHub mirror:
   1935 
   1936     + <https://github.com/protesilaos/denote/pull/20>
   1937     + <https://github.com/protesilaos/denote/pull/28>
   1938 
   1939 + The user option ~denote-date-format~ controls how the date and time is
   1940   recorded in the file's contents (what we call "front matter").  When
   1941   nil (the default value), we use a file-type-specific format (also
   1942   check the user option ~denote-file-type~):
   1943 
   1944   - For Org, an inactive timestamp is used, such as =[2022-06-30 Wed 15:31]=.
   1945 
   1946   - For Markdown, the RFC3339 standard is applied: =2022-06-30T15:48:00+03:00=.
   1947 
   1948   - For plain text, the format is that of ISO 8601: =2022-06-30=.
   1949 
   1950   If the value is a string, ignore the above and use it instead.  The
   1951   string must include format specifiers for the date.  These are described
   1952   in the doc string of ~format-time-string~.
   1953 
   1954   The ~denote-date-format~ supersedes the now obsolete
   1955   ~denote-front-matter-date-format~.
   1956 
   1957   Thanks to Peter Prevos and Kaushal Modi for their feedback in issue 27
   1958   on the GitHub mirror: <https://github.com/protesilaos/denote/issues/27>.
   1959 
   1960 + All the faces we define are now declared in the =denote-faces.el=
   1961   file.  The fontification rules are shared by ~denote-dired-mode~ and
   1962   the backlinks' buffer (invoked by ~denote-link-backlinks~ and
   1963   controlled by the user option ~denote-link-fontify-backlinks~).  The
   1964   current list of faces:
   1965 
   1966   - ~denote-faces-date~
   1967   - ~denote-faces-delimiter~
   1968   - ~denote-faces-extension~
   1969   - ~denote-faces-keywords~
   1970   - ~denote-faces-subdirectory~
   1971   - ~denote-faces-time~
   1972   - ~denote-faces-title~
   1973 
   1974 + Named the mailing list address as the =Maintainer:= of Denote.
   1975   Together with the other package headers, they help the user find our
   1976   primary sources and/or communication channels.  This change conforms
   1977   with work being done upstream in package.el by Philip Kaludercic.  I
   1978   was informed about it here:
   1979   <https://lists.sr.ht/~protesilaos/general-issues/%3C875ykl84yi.fsf%40posteo.net%3E>.
   1980 
   1981 + Fixed how keywords are inferred and combined.  The previous code did not
   1982   work properly when the user option =denote-infer-keywords= was nil.
   1983   It would return a list of symbols, with the parentheses, whereas the
   1984   file name needs a string where each keyword is delimited by an
   1985   underscore.
   1986 
   1987 + Simplified how information in the front matter is retrieved.  It fixes
   1988   cases where, for example, a special character at the end of the title
   1989   was ignored.  Thanks to Jean-Philippe Gagné Guay for the patch over at
   1990   the GitHub mirror: <https://github.com/protesilaos/denote/pull/21>.
   1991 
   1992 + Rewrote parts of the manual in the interest of clarity.
   1993 
   1994 ** Annex about discontinuing support for org-id
   1995 :PROPERTIES:
   1996 :CUSTOM_ID: h:647d6155-1ac3-4ecb-bd4c-06d09fecd3ba
   1997 :END:
   1998 
   1999 My thanks for their participation in the discussions go to Jean-Philippe
   2000 Gagné Guay, Kaushal Modi, and Shreyas Ragavan.
   2001 
   2002 #+begin_example
   2003 commit f35ef05cb451f265213c3aafc1e62c425b1ff043
   2004 Author: Protesilaos Stavrou <info@protesilaos.com>
   2005 Date:   Sun Jul 3 17:34:38 2022 +0300
   2006 
   2007     REMOVE support for 'id:' hyperlink types
   2008 
   2009     The original idea was to support the 'org-id' library on the premise
   2010     that it makes Denote a good Emacs citizen.  However, discussions on the
   2011     mailing list[0] and the GitHub mirror[1] have made it clear to me that
   2012     'org-id' is not consistent with Denote's emphasis on simplicity.
   2013 
   2014     To support the way 'org-id' works, we will eventually have to develop
   2015     some caching mechanism, just how the org-roam package does it.  This is
   2016     because the variable 'org-id-extra-files' needs to be kept up-to-date
   2017     whenever an operation on a file is performed.  At scale, this sort of
   2018     monitoring requires specialised software.  Such a mechanism is outside
   2019     the scope of Denote---if you need a db, use org-roam which is already
   2020     great.
   2021 
   2022     [0] <https://lists.sr.ht/~protesilaos/denote/%3C8735fk4y1w.fsf%40hallac.net%3E#%3C877d4un73c.fsf@protesilaos.com%3E>
   2023 
   2024     [1] <https://github.com/protesilaos/denote/issues/29>
   2025 
   2026     Quote of what I wrote on the GitHub mirror issue 29:
   2027 
   2028             [ggjp] This is what I was implying.  That we are, in fact,
   2029             providing an option that is not viable long-term, but keeping
   2030             the option for expert users who will be able to handle this.
   2031             And we should warn about this clearly in the doc of that option.
   2032 
   2033         [protesilaos] What you write here @ggjp and what @shrysr explained
   2034         tells me that those expert users will need to be real experts.  To
   2035         put it concretely, I am an experienced Emacs user with no
   2036         programming background, who has written several Emacs
   2037         packages (including the modus-themes which are built into Emacs),
   2038         but I have zero knowledge of using a db or of handling things with
   2039         python and the like.  So if I opt in to 'denote-link-use-org-id' I
   2040         will eventually run into problems that my non-existent skills will
   2041         prevent me from solving.  At that point, I will just use org-roam
   2042         which already handles this use-case in a competent way (and has a
   2043         massive community to rely on in case I need further support).
   2044 
   2045         If each package needs to write its own optimisations and maintain
   2046         its own cache, to me this shows that 'org-id' is not good enough for
   2047         the time being: more work needs to be done in org.git to provide a
   2048         universal solution.
   2049 
   2050         I wanted to support 'org-id' by default on the premise that Denote
   2051         must be a good Emacs citizen which interoperates with the rest of
   2052         the wider ecosystem.  But if 'org-id' leaves something to be
   2053         desired, then that goal is not worth pursuing: we add complexity to
   2054         our code, offer an option that we cannot genuinely/adequately
   2055         support, and make usage of it contingent on reading the docs and
   2056         having a high level of expertise.
   2057 
   2058         I think being a good Emacs citizen is a laudable principle.  In this
   2059         case, the right thing to do is to recommend the use of org-roam
   2060         instead of trying to accommodate 'org-id'.  As such, I have now
   2061         changed my mind and think we should remove what we previously added.
   2062 
   2063         For some context here: the reason I never used org-roam is
   2064         because (i) it is Org-specific whereas I write notes in different
   2065         file types and (ii) I did not want to ever rely on a db or
   2066         equivalent dependency.
   2067 
   2068         <https://github.com/protesilaos/denote/issues/29#issuecomment-1173036924>
   2069 
   2070  README.org         | 226 ++++++++---------------------------------------------
   2071  denote-link.el     |  99 ++++++-----------------
   2072  denote-retrieve.el |   2 +-
   2073  denote.el          |  14 +---
   2074  4 files changed, 63 insertions(+), 278 deletions(-)
   2075 #+end_example
   2076 
   2077 Followed up by my explanation:
   2078 
   2079 #+begin_src text
   2080 > can we not have denote style links to be default for (de)notes - and
   2081 > explicitly supported, while if they need to, users can still link
   2082 > denote org files via org-id to any other notes/files (and vice versa)
   2083 > -- in which case performance + testing for org-id driven linking is
   2084 > not within Denote's purview at all?
   2085 
   2086 The formal support for `id:` links was added shortly before the release
   2087 of version `0.1.0`.  In the days prior, we supported what you describe
   2088 via the manual.  The user could change the `denote-org-front-matter`
   2089 variable to include a `PROPERTIES` drawer.  This possibility still
   2090 exists, though yesterday I removed the relevant entry from the manual.
   2091 This way only the real do-it-yourself experts will go down that path.
   2092 
   2093 My concern here is with managing expectations.  If our Org notes are
   2094 superficially the same as org-roam's, an unsuspecting user may think
   2095 that Denote is an org-roam lite.  We will thus get issues/requests, such
   2096 as those already mentioned in this GitHub repo, about migrating from
   2097 org-roam to Denote.  While there are similarities, Denote is not a
   2098 minimalist org-roam and I would not like to encourage the idea of
   2099 treating the two as interchangeable.
   2100 
   2101 Doing things half-way-through is a way to create false expectations.  A
   2102 package on GNU ELPA must be usable by users of all skill levels.  If the
   2103 functionality we provide is incomplete and needs to be covered by
   2104 user-level tweaks, we are excluding a portion of the user base while
   2105 still assuming the maintenance burden.  If someone trusts Denote to,
   2106 say, write a 1000 notes, we do not want to surprise them after the fact.
   2107 Imagine if the reported issues that triggered this change happened 6
   2108 months into one's daily usage of Denote: it wouldn't be nice.
   2109 
   2110 Setting the right expectations is a matter of responsibility: we let the
   2111 user make a more informed choice and show respect for their time.  It
   2112 also makes it easier for me to keep Denote's scope in check by not
   2113 supporting every little extra that Org implements.  The premier Org
   2114 extension is org-roam: we do not need another one (or, if we do, I am
   2115 not the one to implement it).
   2116 
   2117 ,* * *
   2118 
   2119 Some comments on the `denote:` hyperlink type for Org as they may be
   2120 relevant in this context:
   2121 
   2122 ,* It is meant to work like the standard `file:` type.  This means that
   2123   it links to a file, while it can also have additional search
   2124   parameters, as explained in the Org manual.  Evaluate:
   2125 
   2126       (info "(org) Search Options")
   2127 
   2128 ,* It does not read the front matter, but only the file name.  You can
   2129   create a note as usual, delete all its contents, save it, and try to
   2130   link to it from another note.  It works.
   2131 
   2132 ,* Exporting now works like the `file:` type for HTML, LaTeX, Texinfo,
   2133   and Markdown.  Technically, it also supports the ASCII backend but the
   2134   format of the output could be tweaked further.
   2135 
   2136 There may be refinements to be made, which is okay as that is part of a
   2137 maintainer's duties.
   2138 #+end_src
   2139 
   2140 * Version 0.1.0 on 2022-06-27
   2141 :PROPERTIES:
   2142 :CUSTOM_ID: h:33939747-ad60-4913-a170-4b2f48f139cc
   2143 :END:
   2144 
   2145 The present entry is intended for early adopters of Denote who may have
   2146 not caught up with the latest developments.  Prospective users are
   2147 advised to read the manual: <https://protesilaos.com/emacs/denote>.  For
   2148 a video demonstration: <https://protesilaos.com/codelog/2022-06-18-denote-demo/>.
   2149 
   2150 + The =denote= package on GNU ELPA will be available a few hours after
   2151   this release.  GNU ELPA provides the latest stable release.  To use a
   2152   development snapshot, read:
   2153   <https://protesilaos.com/codelog/2022-05-13-emacs-elpa-devel/>.
   2154 
   2155 + Remember that any significant contribution (above ~15 lines) requires
   2156   copyright assignment to the Free Software Foundation.  A form with
   2157   instructions is included in the manual's "Contributing" section:
   2158   <https://protesilaos.com/emacs/denote#h:1ebe4865-c001-4747-a6f2-0fe45aad71cd>.
   2159 
   2160 + The front matter of notes in Org has changed to be compliant with the
   2161   standard =org-id= infrastructure.  A =PROPERTIES= drawer is added to
   2162   the top of the file, which includes an =ID= property with the value of
   2163   the Denote identifier.  Sample:
   2164 
   2165   #+begin_src org
   2166   :PROPERTIES:
   2167   :ID:          20220610T202537
   2168   :END:
   2169   ,#+title:      Sample Org front matter
   2170   ,#+date:       2022-06-10
   2171   ,#+filetags:   denote  testing
   2172   #+end_src
   2173 
   2174 + The front matter of Markdown (YAML or TOML) and plain text files
   2175   remains constant.  For completeness, this is how they look:
   2176 
   2177    #+begin_src md
   2178    ---
   2179    title:      "Sample with Markdown and YAML"
   2180    date:       2022-06-10
   2181    tags:       denote  testing
   2182    identifier: "20220610T202021"
   2183    ---
   2184    #+end_src
   2185 
   2186   #+begin_src md
   2187   +++
   2188   title      = "Sample with Markdown and TOML"
   2189   date       = 2022-06-10
   2190   tags       = ["denote", "testing"]
   2191   identifier = "20220610T201510"
   2192   +++
   2193   #+end_src
   2194 
   2195   #+begin_example
   2196   title:      Sample plain text
   2197   date:       2022-06-10
   2198   tags:       denote  testing
   2199   identifier: 20220610T202232
   2200   ---------------------------
   2201   #+end_example
   2202 
   2203 + The integration with =org-id= extends to how linking works.  By
   2204   default, Denote uses its own custom hyperlink type which starts with
   2205   the =denote:= prefix.  In Org, it works like the =file:= type.  When
   2206   the user option ~denote-link-use-org-id~ is non-nil, links from Org
   2207   notes to other Org notes will use the standard =id:= type instead.  As
   2208   this is an Org-specific feature, Denote takes care to use the
   2209   major-mode-agnostic =denote:= type when the link targets a non-Org
   2210   note.
   2211 
   2212 + In Org files the links created by Denote are buttonized automatically.
   2213   For Markdown and plain text, we use our own methods.  When a link is
   2214   inserted it is buttonized outright.  To buttonize links in existing
   2215   notes while visiting them in a buffer, add/evaluate this (it excludes
   2216   Org on its own):
   2217 
   2218   #+begin_src emacs-lisp
   2219   (add-hook 'find-file-hook #'denote-link-buttonize-buffer)
   2220   #+end_src
   2221 
   2222 + The generation of the backlinks' buffer now uses the built-in =xref=
   2223   library instead of relying on a hardcoded call to the =find=
   2224   executable.  This means that the ~denote-link-backlinks~ command will,
   2225   in principle, work properly with all Emacs builds.
   2226 
   2227 + Users of Emacs 28 or higher can configure ~xref-search-program~ to
   2228   change from the default =grep= to =ripgrep=, =ugrep=, or a
   2229   user-defined alternative.
   2230 
   2231 + This is the first stable release of Denote.  It covers close to 400
   2232   commits starting from 2022-06-04.  Denote is the successor to a toy
   2233   package of mine, USLS, whose first public version was made available
   2234   in early November 2020: <https://gitlab.com/protesilaos/usls>.
   2235 
   2236 + Thanks to everyone involved in the development of Denote.  Code
   2237   contributions, bug reports, discussion of ideas, are all valuable.
   2238   From A-Z the names mentioned in the manual's "Acknowledgements"
   2239   section: Colin McLear, Damien Cassou, Frank Ehmsen, Jack Baty, Kaushal
   2240   Modi, Peter Povinec, Sven Seebeck, Ypot.
   2241 
   2242 + Sources of Denote:
   2243 
   2244   + Package name (GNU ELPA): =denote=
   2245   + Official manual: <https://protesilaos.com/emacs/denote>
   2246   + Change log: <https://protesilaos.com/emacs/denote-changelog>
   2247   + Git repo on SourceHut: <https://git.sr.ht/~protesilaos/denote>
   2248     - Mirrors:
   2249       + GitHub: <https://github.com/protesilaos/denote>
   2250       + GitLab: <https://gitlab.com/protesilaos/denote>
   2251   + Mailing list: <https://lists.sr.ht/~protesilaos/denote>