Dynamically generate the index file
This commit is contained in:
parent
cbee86f26d
commit
6e368141cb
6 changed files with 73 additions and 16 deletions
20
index.org
20
index.org
|
@ -1,19 +1,9 @@
|
||||||
#+TITLE: ryuslash.org
|
#+TITLE: ryuslash.org
|
||||||
#+STARTUP: showall
|
#+STARTUP: showall
|
||||||
|
#+OPTIONS: toc:nil num:nil
|
||||||
|
#+HTML_LINK_UP:
|
||||||
|
#+HTML_LINK_HOME: https://ryuslash.org/
|
||||||
|
|
||||||
* My new Emacs configuration :draft:
|
#+BEGIN: blog-posts
|
||||||
:PROPERTIES:
|
|
||||||
:ID: 0069eced-52ed-4cb2-bb75-78e7ea32bd6c
|
|
||||||
:PUBDATE: <2019-10-06 Sun 18:18>
|
|
||||||
:END:
|
|
||||||
|
|
||||||
I'm still working on this one.
|
#+END:
|
||||||
|
|
||||||
* New blog
|
|
||||||
:PROPERTIES:
|
|
||||||
:ID: 68c55701-d8ce-44a1-9c97-6c16cf34890c
|
|
||||||
:PUBDATE: <2019-10-06 Sun 12:55>
|
|
||||||
:END:
|
|
||||||
|
|
||||||
It's that time again... I've started a new project to build and maintain my
|
|
||||||
site and of course it has to come with a new blog post.
|
|
||||||
|
|
5
posts/a-very-important-blog-post.org
Normal file
5
posts/a-very-important-blog-post.org
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
#+TITLE: A very important blog post
|
||||||
|
#+ID: a-very-important-blog-post
|
||||||
|
#+PUBDATE: <2020-02-23 Sun 18:28>
|
||||||
|
|
||||||
|
Very important business here.
|
6
posts/my-new-emacs-configuration.org
Normal file
6
posts/my-new-emacs-configuration.org
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
#+TITLE: My new Emacs configuration
|
||||||
|
#+ID: my-new-emacs-configuration
|
||||||
|
#+PUBDATE: <2019-10-06 Sun 18:18>
|
||||||
|
#+TAGS: draft
|
||||||
|
|
||||||
|
I'm still working on this one.
|
10
posts/new-blog.org
Normal file
10
posts/new-blog.org
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
#+TITLE: New Blog
|
||||||
|
#+ID: new-blog
|
||||||
|
#+PUBDATE: <2019-10-06 Sun 12:55>
|
||||||
|
#+READING_TIME: 6s
|
||||||
|
|
||||||
|
It's that time again... I've started a new project to build and maintain my site
|
||||||
|
and of course it has to come with a new blog post. I'm trying to have it
|
||||||
|
generate an index based on the files in this directory.
|
||||||
|
|
||||||
|
I don't want it to include anything beyond the first paragraph, though.
|
|
@ -10,7 +10,10 @@
|
||||||
:exclude "\\`README.org\\'"
|
:exclude "\\`README.org\\'"
|
||||||
:base-extension "org"
|
:base-extension "org"
|
||||||
:publishing-function org-html-publish-to-html
|
:publishing-function org-html-publish-to-html
|
||||||
:html-head "<link rel=\"stylesheet\" href=\"/assets/css/main.css\" type=\"text/css\"/>")
|
: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
|
||||||
|
:recursive t)
|
||||||
("ryuslash-rss"
|
("ryuslash-rss"
|
||||||
:base-directory "."
|
:base-directory "."
|
||||||
:publishing-directory "public_html"
|
:publishing-directory "public_html"
|
||||||
|
@ -20,4 +23,40 @@
|
||||||
:publishing-function org-rss-publish-to-rss)))
|
:publishing-function org-rss-publish-to-rss)))
|
||||||
|
|
||||||
(defun publish-ryuslash.org ()
|
(defun publish-ryuslash.org ()
|
||||||
|
(with-current-buffer (find-file "index.org")
|
||||||
|
(org-update-all-dblocks)
|
||||||
|
(save-buffer))
|
||||||
(org-publish-all))
|
(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))))))
|
||||||
|
|
|
@ -1,12 +1,19 @@
|
||||||
@background-color: #111114;
|
@background-color: #111114;
|
||||||
@foreground-color: #bfbfbf;
|
@foreground-color: #bfbfbf;
|
||||||
@link-color: #a88654;
|
@link-color: #a88654;
|
||||||
|
@font-family: sans-serif;
|
||||||
|
|
||||||
body {
|
body {
|
||||||
background-color: @background-color;
|
background-color: @background-color;
|
||||||
color: @foreground-color;
|
color: @foreground-color;
|
||||||
|
font-family: @font-family;
|
||||||
}
|
}
|
||||||
|
|
||||||
a {
|
a {
|
||||||
color: @link-color;
|
color: @link-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#content {
|
||||||
|
max-width: 900px;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue