From dcbda721705ed54c378bcefa0ec9116b8203ecc8 Mon Sep 17 00:00:00 2001 Message-Id: From: Ihor Radchenko Date: Mon, 5 Sep 2022 19:40:13 +0800 Subject: [PATCH] ox-publish: Allow linking to encrypted Org files * lisp/ox-html.el (org-html-link): Convert .org.gpg file links to .html, in addition to previously performed .org -> .html convertion. (org-html-link-org-files-as-html): Update the docstring. * doc/org-manual.org (Publishing links): * etc/ORG-NEWS (Publishing now supports links to encrypted Org files): Document the new feature. --- doc/org-manual.org | 17 ++++++++++------- etc/ORG-NEWS | 6 ++++++ lisp/ox-html.el | 15 +++++++++------ 3 files changed, 25 insertions(+), 13 deletions(-) diff --git a/doc/org-manual.org b/doc/org-manual.org index 794682b49..fbd88aa68 100644 --- a/doc/org-manual.org +++ b/doc/org-manual.org @@ -16454,13 +16454,16 @@ *** Publishing links #+cindex: links, publishing To create a link from one Org file to another, you would use something -like =[[file:foo.org][The foo]]= or simply =[[file:foo.org]]= (see [[*External Links]]). When -published, this link becomes a link to =foo.html=. You can thus -interlink the pages of your "Org web" project and the links will work -as expected when you publish them to HTML. If you also publish the -Org source file and want to link to it, use an =http= link instead of -a =file:= link, because =file= links are converted to link to the -corresponding =.html= file. +like =[[file:foo.org][The foo]]= or simply =[[file:foo.org]]= (see +[[*External Links]]). When published, this link becomes a link to +=foo.html=. You can thus interlink the pages of your "Org web" +project and the links will work as expected when you publish them to +HTML. If you also publish the Org source file and want to link to it, +use an =http= link instead of a =file:= link, because =file= links are +converted to link to the corresponding =.html= file. + +Links to encrypted Org files, like =[[file:foo.org.gpg]]= are also +supported. You may also link to related files, such as images. Provided you are careful with relative file names, and provided you have also diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS index 713a850f6..3f1c8f4c7 100644 --- a/etc/ORG-NEWS +++ b/etc/ORG-NEWS @@ -140,6 +140,12 @@ backend. From now on, using =outline-*= functions is strongly discouraged when working with Org files. ** New features +*** Publishing now supports links to encrypted Org files + +Links to other published Org files are automatically converted to the +corresponding html links. Now, this feature is also available when +links point to encrypted Org files, like +=[[file:foo.org.gpg::Heading]]=. *** Interactive commands now support escaping text inside comment blocks diff --git a/lisp/ox-html.el b/lisp/ox-html.el index b5aa868fe..8da180034 100644 --- a/lisp/ox-html.el +++ b/lisp/ox-html.el @@ -839,6 +839,8 @@ (defcustom org-html-link-org-files-as-html t (recognized by the extension \".org\") should become links to the corresponding HTML file, assuming that the linked Org file will also be converted to HTML. +Links to \"file.org.gpg\" are also converted. + When nil, the links still point to the plain \".org\" file." :group 'org-export-html :type 'boolean) @@ -3066,12 +3068,13 @@ (defun org-html-link (link desc info) (lambda (raw-path info) ;; Treat links to `file.org' as links to `file.html', if ;; needed. See `org-html-link-org-files-as-html'. - (cond - ((and (plist-get info :html-link-org-files-as-html) - (string= ".org" - (downcase (file-name-extension raw-path ".")))) - (concat (file-name-sans-extension raw-path) dot html-ext)) - (t raw-path)))) + (save-match-data + (cond + ((and (plist-get info :html-link-org-files-as-html) + (let ((case-fold-search t)) + (string-match "\\(.+\\)\\.org\\(?:\\.gpg\\)?$" raw-path))) + (concat (match-string 1 raw-path) dot html-ext)) + (t raw-path))))) (type (org-element-property :type link)) (raw-path (org-element-property :path link)) ;; Ensure DESC really exists, or set it to nil. -- 2.35.1