branch: externals/denote commit 5cfc1d1be560b54ae493de99360e9281bd01cce9 Author: Protesilaos Stavrou <i...@protesilaos.com> Commit: Protesilaos Stavrou <i...@protesilaos.com>
Add denote-faces-broken-link (only works with Org) --- README.org | 17 +++++++++++++---- denote.el | 16 +++++++++++++++- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/README.org b/README.org index 69b4b13515..dbfa1f128d 100644 --- a/README.org +++ b/README.org @@ -796,11 +796,20 @@ case the user needs it. Links are created only for files which qualify as a "note" for our purposes ([[#h:fc913d54-26c8-4c41-be86-999839e8ad31][Linking notes]]). +[ The following two faces are part of {{{development-version}}} ] + #+vindex: denote-faces-link -Links are styled with the ~denote-faces-link~ face [part of -{{{development-version}}}], which looks exactly like an ordinary link by -default. This is just a convenience for the user/theme in case they -want =denote:= links to remain distinct from other links. +Links are styled with the ~denote-faces-link~ face, which looks exactly +like an ordinary link by default. This is just a convenience for the +user/theme in case they want =denote:= links to remain distinct from +other links. + +#+vindex: denote-faces-broken-link +In Org files, broken links get the ~denote-faces-broken-link~ if the +linked identifier does not resolve to a file path with a note. The +ability to use distinct faces for such a scenario is a feature of Org, +which is not available in other supported file types that use Emacs' +generic button mechanism. ** Insert links matching a regexp :PROPERTIES: diff --git a/denote.el b/denote.el index c37f722591..47414a2cc0 100644 --- a/denote.el +++ b/denote.el @@ -1387,6 +1387,12 @@ The operation does the following: "Face used to style Denote links in the buffer." :group 'denote-faces) +(defface denote-faces-broken-link '((t :inherit (error link))) + "Face used to style Denote broken links in the buffer. +This only works in Org files, as Emacs' generic buttons do not +provide a facility that uses a face based on certain conditions." + :group 'denote-faces) + (defface denote-faces-subdirectory '((t :inherit bold)) "Face for subdirectory of file name. @@ -1937,6 +1943,14 @@ file." (denote-link--ol-resolve-link-to-target link) nil)) +(defun denote-link-ol-face (link) + "Return appropriate face for LINK. +If the LINK resolves to a note, use `denote-faces-link', else +return `denote-faces-broken-link'." + (if (denote-link--ol-resolve-link-to-target link) + 'denote-faces-link + 'denote-faces-broken-link)) + (defun denote-link-ol-complete () "Like `denote-link' but for Org integration. This lets the user complete a link through the `org-insert-link' @@ -1976,7 +1990,7 @@ backend." (org-link-set-parameters "denote" :follow #'denote-link-ol-follow - :face 'denote-faces-link + :face #'denote-link-ol-face :complete #'denote-link-ol-complete :export #'denote-link-ol-export)))))