70 lines
2.9 KiB
EmacsLisp
70 lines
2.9 KiB
EmacsLisp
(require 'ox-publish)
|
|
(require 'ox-rss)
|
|
|
|
(setq org-export-exclude-tags '("noexport" "draft"))
|
|
|
|
(setq org-publish-project-alist
|
|
'(("ryuslash.org"
|
|
:base-directory "."
|
|
:publishing-directory "public_html"
|
|
:exclude "\\`README.org\\'"
|
|
:base-extension "org"
|
|
:publishing-function org-html-publish-to-html
|
|
:html-head "<link rel=\"stylesheet\" href=\"assets/css/main.css\" type=\"text/css\"/>"
|
|
:html-link-home "https://ryuslash.gitlab.io/ryuslash.org/"
|
|
:html-link-user-abs-url t)
|
|
("ryuslash.org Posts"
|
|
:base-directory "posts"
|
|
:publishing-directory "public_html/posts"
|
|
:exclude "\\`README.org\\'"
|
|
:base-extension "org"
|
|
:publishing-function org-html-publish-to-html
|
|
:html-head "<link rel=\"stylesheet\" href=\"../assets/css/main.css\" type=\"text/css\"/>"
|
|
:html-link-home "https://ryuslash.gitlab.io/ryuslash.org/"
|
|
:html-link-user-abs-url t)
|
|
("ryuslash-rss"
|
|
:base-directory "."
|
|
:publishing-directory "public_html"
|
|
:exclude ".*"
|
|
:include ("index.org")
|
|
:base-extension "org"
|
|
:publishing-function org-rss-publish-to-rss)))
|
|
|
|
(defun publish-ryuslash.org ()
|
|
(with-current-buffer (find-file "index.org")
|
|
(org-update-all-dblocks)
|
|
(save-buffer))
|
|
(org-publish-all))
|
|
|
|
(defun project-config-parse-element (org-element)
|
|
(pcase org-element
|
|
(`(keyword ,something) (cons (plist-get something :key)
|
|
(plist-get something :value)))
|
|
(`(paragraph ,something) (cons
|
|
"BODY"
|
|
(buffer-substring-no-properties
|
|
(plist-get something :contents-begin)
|
|
(plist-get something :contents-end))))))
|
|
|
|
(defun project-config-parse-document (document)
|
|
(with-current-buffer (find-file document)
|
|
(goto-char (point-min))
|
|
(let (alist)
|
|
(while (not (alist-get "BODY" alist nil nil #'equal))
|
|
(setq alist (cons (project-config-parse-element (org-element-at-point))
|
|
alist))
|
|
(org-forward-element))
|
|
alist)))
|
|
|
|
(defun project-config-print-element (filename alist)
|
|
(format "* %s\n :PROPERTIES:\n :ID: %s\n :PUBDATE: %s\n :END:\n\n %s\n[[file:%s][Read more]]\n"
|
|
(alist-get "TITLE" alist nil nil #'equal)
|
|
(alist-get "ID" alist nil nil #'equal)
|
|
(alist-get "PUBDATE" alist nil nil #'equal)
|
|
(alist-get "BODY" alist nil nil #'equal)
|
|
filename))
|
|
|
|
(defun org-dblock-write:blog-posts (params)
|
|
(let ((files (cl-remove-if (lambda (item) (string-prefix-p "." item)) (directory-files "posts"))))
|
|
(insert (format "%s" (apply #'concat (mapcar (lambda (file) (project-config-print-element (concat "posts/" file) (project-config-parse-document (concat "posts/" file))))
|
|
files))))))
|