emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] Include missing files when sitemap style is tree


From: Anthony Carrico
Subject: [PATCH] Include missing files when sitemap style is tree
Date: Fri, 11 Sep 2020 23:26:33 -0400
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.12.0

* ox-publish.el (org-publish-sitemap): Include files that have an ancestor below base-directory with no published files and sitemap style is tree.

This entire patch is released to the public domain by its author, Anthony Carrico. TINYCHANGE
---
 lisp/ox-publish.el | 21 +++++++++++++++++++--
 1 file changed, 19 insertions(+), 2 deletions(-)

diff --git a/lisp/ox-publish.el b/lisp/ox-publish.el
index 7bb2fed6e..314b48ffc 100644
--- a/lisp/ox-publish.el
+++ b/lisp/ox-publish.el
@@ -747,6 +747,20 @@ return a string.  Return value is a list as returned by
         (funcall subtree-to-list root)))
       (_ (user-error "Unknown site-map style: `%s'" style)))))

+(defun org-publish-dir-name-parent (dir-name)
+  (file-name-as-directory (expand-file-name (concat dir-name ".."))))
+
+(defun org-publish-dir-name-and-parents (dir-name root-dir-name)
+  (pcase dir-name
+     ("" nil)
+     ((or "./" "/" (pred (string= root-dir-name))) (list dir-name))
+     (_ (cons dir-name (org-publish-dir-name-and-parents
+                       (org-publish-dir-name-parent dir-name) 
root-dir-name)))))
+
+(defun org-publish-file-name-parents (file root)
+  (org-publish-dir-name-and-parents (file-name-directory file)
+                                   (file-name-as-directory root)))
+
 (defun org-publish-sitemap (project &optional sitemap-filename)
   "Create a sitemap of pages in set defined by PROJECT.
 Optionally set the filename of the sitemap with SITEMAP-FILENAME.
@@ -819,8 +833,11 @@ Default for SITEMAP-FILENAME is `sitemap.org'."
         ;; Add directories, if applicable.
         (unless (and (eq style 'list) (eq sort-folders 'ignore))
           (setq files
-                (nconc (remove root (org-uniquify
-                                     (mapcar #'file-name-directory files)))
+                (nconc (remove
+                        root
+                        (org-uniquify
+                         (mapcan (lambda (f) (org-publish-file-name-parents f 
root))
+                                 files)))
                        files)))
         ;; Eventually sort all entries.
         (when (or sort-files (not (memq sort-folders 'ignore)))
--
2.25.4




reply via email to

[Prev in Thread] Current Thread [Next in Thread]