l...@tosk.in writes:

>> Thus, we may simply extend `org-html-link' to work on .org.gpg files in
>> addition to .org files.
>
> Yes, this is it exactly.

Can you try the attached patch?

-- 
Ihor Radchenko,
Org mode contributor,
Learn more about Org mode at https://orgmode.org/.
Support Org development at https://liberapay.com/org-mode,
or support my work at https://liberapay.com/yantar92

>From dcbda721705ed54c378bcefa0ec9116b8203ecc8 Mon Sep 17 00:00:00 2001
Message-Id: <dcbda721705ed54c378bcefa0ec9116b8203ecc8.1662378219.git.yanta...@gmail.com>
From: Ihor Radchenko <yanta...@gmail.com>
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

Reply via email to