From 99d3e48af3944fc749694c52989b924fc3f080f4 Mon Sep 17 00:00:00 2001 From: JSDurand Date: Tue, 24 Aug 2021 16:43:49 +0800 Subject: Use Org-mode to publish a blog * org-conf.el (org-publish-project-alist): The settings are stored in this variable. (durand-sitemap-custom-string-alist): My hack to insert some strings in sitemap files. (durand-org-publish-sitemap): Custom function to generate sitemaps. (durand-org-publish-sitemap-format): Add a date to the format of the entries. (ox): Add a require to avoid some errors at startup. --- org-conf.el | 110 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 109 insertions(+), 1 deletion(-) diff --git a/org-conf.el b/org-conf.el index 1f1d8cd..019c033 100644 --- a/org-conf.el +++ b/org-conf.el @@ -6,6 +6,10 @@ ;; org-format-latex-options (plist-put org-format-latex-options :scale 1.5) ) +;;; org-export + +(require 'ox) + ;;; org capture bookmark (setq org-capture-bookmark nil) @@ -542,10 +546,69 @@ If DESC is non-`nil', then it is the description of the new link." ;;; publishing settings +;;;;; Projects settings + (setq org-publish-project-alist (list (list - "blog" + "website" + :components (list "code" "life" "main")) + (list + "code" + :base-directory (directory-file-name + (expand-file-name + "code" (expand-file-name + "blog" org-directory))) + :base-extension "org" + :publishing-directory (directory-file-name + (expand-file-name + "public" org-directory)) + :publishing-function #'org-html-publish-to-html + :section-numbers nil + :with-toc nil + :with-email t + :with-creator t + :auto-sitemap t + :recursive t + :sitemap-function #'durand-org-publish-sitemap + :sitemap-format-entry #'durand-org-publish-sitemap-format + :sitemap-date-format "Published: %F %a %R" + :sitemap-filename "code-sitemap.org" + :sitemap-title "About coding" + :html-link-home "index.html" + :sitemap-sort-files 'anti-chronologically + :html-head "" + :html-preamble t) + (list + "life" + :base-directory (directory-file-name + (expand-file-name + "life" (expand-file-name + "blog" org-directory))) + :base-extension "org" + :publishing-directory (directory-file-name + (expand-file-name + "public" org-directory)) + :publishing-function #'org-html-publish-to-html + :section-numbers nil + :with-toc nil + :with-email t + :with-creator t + :auto-sitemap t + :recursive t + :sitemap-function #'durand-org-publish-sitemap + :sitemap-format-entry #'durand-org-publish-sitemap-format + :sitemap-date-format "Published: %F %a %R" + :sitemap-filename "life-sitemap.org" + :sitemap-title "My life" + :html-link-home "index.html" + :sitemap-sort-files 'anti-chronologically + :html-head "" + :html-preamble t) + (list + "main" :base-directory (directory-file-name (expand-file-name "blog" org-directory)) @@ -556,5 +619,50 @@ If DESC is non-`nil', then it is the description of the new link." :publishing-function #'org-html-publish-to-html :section-numbers nil :with-toc nil + :with-email t + :with-creator t + :auto-sitemap nil + :recursive nil + :html-head "" :html-preamble t))) +;;;;; Sitemap function + +;;;;;; A hack to insert some string in the sitemap file. + +(defvar durand-sitemap-custom-string-alist + (list + (cons "About coding" + "This is the coding blog. It contains my coding experiments, or \ +one might think of them as development diaries.") + (cons "My life" + "This is my casual blog. It contains articles about my plain \ +life.")) + "An association list that relates the title of the sitemap and the string to insert.") + +;;;;;; Custom sitemap function + +(defun durand-org-publish-sitemap (title rep) + "Return the sitemap as a string. +TITLE is the title of the sitemap. + +REP is a representation of the files and directories in the +project. Use such functions as `org-list-to-org' or +`org-list-to-subtree' to transform it." + (format "#+TITLE: %s\n#+AUTHOR: JSDurand\n%s#+DATE: <%s>\n\n%s\n\n%s" + title + "#+HTML_LINK_UP: index.html" + (format-time-string "%F %a %R") + (cdr (assoc title durand-sitemap-custom-string-alist #'string=)) + (org-list-to-org rep))) + +;;;;;; Custom sitemap format + +(defun durand-org-publish-sitemap-format (entry _style project) + "Format the entry for the sitemap. +A date is added." + (format "[[file:%s][(%s) %s]]" + entry (format-time-string + "%F %R" (org-publish-find-date entry project)) + (org-publish-find-title entry project))) -- cgit v1.2.3-18-g5258