From 89d495cdf20d8ec9720b8f74991fa6260bd8d1be Mon Sep 17 00:00:00 2001 From: noa@gaiwan.org Date: Sat, 29 Jun 2024 09:33:21 +0000 Subject: Updates to org-publish sitemap generation --- config.org | 152 +++++++++++++++++++++++++++++++++---------------------------- 1 file changed, 83 insertions(+), 69 deletions(-) diff --git a/config.org b/config.org index 3b04711..45ed395 100644 --- a/config.org +++ b/config.org @@ -721,12 +721,12 @@ The index page generation functions were taken from Dennis Ogbe. Thank you! #+end_src #+begin_src elisp -(defun my-blog-sort-article-list (l p) - "sort the article list anti-chronologically." - (sort l #'(lambda (a b) - (let ((date-a (org-publish-find-date a p)) - (date-b (org-publish-find-date b p))) - (not (time-less-p date-a date-b)))))) + (defun my-blog-sort-article-list (l p) + "sort the article list anti-chronologically." + (sort l #'(lambda (a b) + (let ((date-a (org-publish-find-date a p)) + (date-b (org-publish-find-date b p))) + (not (time-less-p date-a date-b)))))) #+end_src #+begin_src elisp @@ -745,73 +745,87 @@ The index page generation functions were taken from Dennis Ogbe. Thank you! #+end_src #+begin_src elisp -(defun noa/website-sitemap (title list) - "Generate the index page for my website." - ;; LIST looks like: - ;; (unordered ("[[file:uses.org][Things i use]]") ("[[file:media.org][Media Diary]]") ("[[file:tanklobsters.org][Tank lobsters]]")) - (with-temp-buffer - ;; mangle the parsed list given to us into a plain lisp list of files - (let* ((filenames (my-blog-parse-sitemap-list list)) - (project-plist (assoc "website-pages" org-publish-project-alist)) - (articles (my-blog-sort-article-list filenames project-plist))) - (message (concat "PLIST: " (plist-get project-plist :base-directory))) + (defun noa/website-sitemap (title list) + "Generate the index page for my website." + ;; LIST looks like: + ;; (unordered ("[[file:uses.org][Things i use]]") ("[[file:media.org][Media Diary]]") ("[[file:tanklobsters.org][Tank lobsters]]")) + (with-temp-buffer + ;; mangle the parsed list given to us into a plain lisp list of files + (let* ((filenames (my-blog-parse-sitemap-list list)) + (project-plist (assoc "website-pages" org-publish-project-alist)) + (articles (my-blog-sort-article-list filenames project-plist))) + (message (concat "PLIST: " (plist-get project-plist :base-directory))) - (insert "Several parts of this website are broken as i wrangle with the monstrosity that is programming in emacs lisp. The content should still be fine, but for further cosmetics please hold <3\n\n") - (dolist (file filenames) - (let* ((abspath (file-name-concat "/home/noa/data/share" file)) - ;; (abspath (file-name-concat (plist-get project-plist :base-directory) file)) - (relpath (file-relative-name abspath "/home/noa/data/share")) - (title (org-publish-find-title file project-plist)) - (date (format-time-string (car org-time-stamp-formats) (org-publish-find-date file project-plist))) - (preview (noa/naive-org-first-paragraph abspath))) - (insert (concat "* [[file:" relpath "][" title "]]\n")) - (insert (concat - "*" date ":*" - preview)) - (insert "\n"))) - ;; insert a title and save - (insert "#+TITLE: noa.pub\n") - (buffer-string)))) + (insert "Several parts of this website are broken as i wrangle with the monstrosity that is programming in emacs lisp. The content should still be fine, but for further cosmetics please hold <3\n\n") + (dolist (file filenames) + (let* ((abspath (file-name-concat "/home/noa/data/share" file)) + ;; (abspath (file-name-concat (plist-get project-plist :base-directory) file)) + (relpath (file-relative-name abspath "/home/noa/data/share")) + (title (org-publish-find-title file project-plist)) + (date (format-time-string (car org-time-stamp-custom-formats) (org-publish-find-date file project-plist))) + (preview (noa/naive-org-first-paragraph abspath))) + (insert (concat "* [[file:" relpath "][" title "]]\n")) + (insert (concat + "*" date ":*" + preview)) + (insert "\n"))) + ;; insert a title and save + (insert "#+TITLE: noa.pub\n") + (buffer-string)))) #+end_src #+begin_src elisp -(setq org-publish-project-alist - `(("website" - :components ("website-pages" "website-assets")) - ("website-pages" - :publishing-function org-html-publish-to-html - :base-directory "/home/noa/data/share" - :publishing-directory "/home/noa/projects/org-website" - :base-extension "org" - :with-drawers t - :html-link-home "/" - :html-head-include-default-style nil - :html-head-include-scripts nil - :html-doctype "html5" - ;; :html-validation-link nil - :html-preamble "" - :html-postamble ,noa/website-footer - :html-home/up-format "" - :html-link-up "" - :html-html5-fancy t - :html-indent nil - :html-head "𰻝\">\n -" - :auto-sitemap t - :sitemap-filename "/home/noa/projects/org-website/index.org" - :sitemap-title "noa.pub" - :sitemap-style list - ;; :sitemap-format-entry - :sitemap-function noa/website-sitemap - :sitemap-sort-folders ignore - :sitemap-sort-files anti-chronologically - :sitemap-ignore-case t) - ("website-assets" - :publishing-function org-publish-attachment - :base-directory "/home/noa/data/share" - :publishing-directory "/home/noa/projects/org-website" - :base-extension "css\\|js\\|png|\\jpg" - :recursive t))) + (defun noa/org-publish-sitemap-entry (entry style project) + "Default format for site map ENTRY, as a string. + ENTRY is a file name. STYLE is the style of the sitemap. + PROJECT is the current project." + (cond ((not (directory-name-p entry)) + (format "%s: [[file:%s][%s]]" + (format-time-string (car org-time-stamp-custom-formats) (org-publish-find-date entry project)) + entry + (org-publish-find-title entry project))) + ((eq style 'tree) + ;; Return only last subdir. + (file-name-nondirectory (directory-file-name entry))) + (t entry))) + + (setq org-publish-project-alist + `(("website" + :components ("website-pages" "website-assets")) + ("website-pages" + :publishing-function org-html-publish-to-html + :base-directory "/home/noa/data/share" + :publishing-directory "/home/noa/projects/org-website" + :base-extension "org" + :with-drawers t + :html-link-home "/" + :html-head-include-default-style nil + :html-head-include-scripts nil + :html-doctype "html5" + ;; :html-validation-link nil + :html-preamble "" + :html-postamble ,noa/website-footer + :html-home/up-format "" + :html-link-up "" + :html-html5-fancy t + :html-indent nil + :html-head "𰻝\">\n + " + :auto-sitemap t + :sitemap-filename "/home/noa/projects/org-website/index.org" + :sitemap-title "noa.pub" + :sitemap-style list + :sitemap-format-entry noa/org-publish-sitemap-entry + ;; :sitemap-function noa/website-sitemap + :sitemap-sort-folders ignore + :sitemap-sort-files anti-chronologically + :sitemap-ignore-case t) + ("website-assets" + :publishing-function org-publish-attachment + :base-directory "/home/noa/data/share" + :publishing-directory "/home/noa/projects/org-website" + :base-extension "css\\|js\\|png|\\jpg" + :recursive t))) #+end_src ** Markdown -- cgit 1.4.1-2-gfad0