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>