branch: externals/denote-org
commit 3f525c88f02bce6b44f9d4471fa6fe36f7960b65
Author: Protesilaos Stavrou <i...@protesilaos.com>
Commit: Protesilaos Stavrou <i...@protesilaos.com>

    Escape nested dynamic blocks or keywords by prepending a zero-width space 
to them
---
 denote-org.el | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/denote-org.el b/denote-org.el
index 57bbec8034..8d98f7b4c7 100644
--- a/denote-org.el
+++ b/denote-org.el
@@ -584,6 +584,14 @@ Used by `org-dblock-update' with PARAMS provided by the 
dynamic block."
 
 ;;;;; Dynamic block to insert entire file contents
 
+(defun denote-org-escape-code-in-region (beg end)
+  "Like `org-escape-code-in-region' to escape only #+ by appending a zero 
width space to it.
+Operate on the region between positions BEG and END."
+  (save-excursion
+    (goto-char end)
+    (while (re-search-backward "^[ \t]*\\(#\\+\\)" beg t)
+      (save-excursion (replace-match "​\\1" nil nil nil 1)))))
+
 (defun denote-org-dblock--get-file-contents (file &optional no-front-matter 
add-links)
   "Insert the contents of FILE.
 With optional NO-FRONT-MATTER as non-nil, try to remove the front
@@ -615,7 +623,8 @@ argument."
              (1+ (re-search-forward "^$" nil :no-error 1)))
            beginning-of-contents))
         (when add-links
-          (indent-region beginning-of-contents (point-max) 2)))
+          (indent-region beginning-of-contents (point-max) 2))
+        (denote-org-escape-code-in-region beginning-of-contents (point-max)))
       (buffer-string))))
 
 (defvar denote-org-dblock-file-contents-separator
@@ -741,7 +750,8 @@ With optional ADD-LINKS, make the title link to the 
original file."
             (insert (format "* %s %s\n\n" title tags)))
           (org-align-tags :all))
         (while (re-search-forward "^\\(*+?\\) " nil :no-error)
-          (replace-match (format "*%s " "\\1"))))
+          (replace-match (format "*%s " "\\1")))
+        (denote-org-escape-code-in-region beginning-of-contents (point-max)))
       (buffer-string))))
 
 (defun denote-org-dblock-add-files-as-headings (regexp &optional add-links 
sort-by-component reverse excluded-dirs-regexp exclude-regexp)

Reply via email to